How to Create a sysfs File Correctly

One common Linux kernel driver issue that I see all the time is a driver author attempting to create a sysfs file in their code by doing something like: int my_driver_probe(...) { ... retval = device_create_file(my_device, &my_first_attribute); if (retval) goto error1; retval = device_create_file(my_device, &my_second_attribute); if (retval) goto error2; ... return 0; error2: device_remove_file(my_device, &my_first_attribute); error1: /* Clean up other things and return an error */ ... return -ENODEV; } That’s a good first start, until they get tired of adding more and more sysfs files, and they discover attribute groups, which allows multiple sysfs files to be created and destroyed all at once, without having to handle the unwinding of things if problems occur: [Read More]

Hardware, Past, Present, and Future

Here’s some thoughts about some hardware I was going to use, hardware I use daily, and hardware I’ll probably use someday in the future. Thunderbolt is dead, long live Thunderbolt. Seriously, it’s dead, use it as a video interconnect and don’t worry about anything else. Ok, some more explanation is probably in order… Back in October of 2012, after a meeting with some very smart Intel engineers, I ended up the proud owner of a machine with Thunderbolt support, some hard disks with Thunderbolt interfaces, and most importantly, access to the super-secret Thunderbolt specification on how to make this whole thing work properly on Linux. [Read More]