Skip to content

W1: w1 core deadlock and oops fixes, ds2490 updates

David Fries lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest7 of 35 patches 5 repliesIn review

7 of 35 patches are in this archive. The cover letter announces 35.

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
7/35W1: feature, enable hardware strong pullupdrivers/w1/w1.c drivers/w1/w1.h drivers/w1/w1_int.c +1 more+122 -40 replies
9/35W1: feature, w1_therm.c use strong pullup and documentationDocumentation/w1/00-INDEX Documentation/w1/slaves/00-INDEX Documentation/w1/slaves/w1_therm +1 more+60 -20 replies
10/35W1: be able to manually add and remove slavesdrivers/w1/w1.c+137 -30 replies
12/35W1: new module parameter search_countdrivers/w1/w1_int.c+3 -10 replies
13/35W1: Document add, remove, search_count, and pullup.Documentation/w1/w1.generic+10 -10 replies
15/35W1: w1_slave_read_id multiple short read bugdrivers/w1/w1.c+10 -252 replies
34/35Documentation/w1/masters/ds2490 updateDocumentation/w1/masters/ds2490+62 -00 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [PATCH 0/35] W1: w1 core deadlock and oops fixes, ds2490 updates

The Linux one wire system allows talking to little devices, mostly sensors. Sensors such as temperature sensors that I want to put around the house, but first the one wire system and ds2490 USB to one wire controller driver needs to be stable. After a kernel panic, I did most all of the development inside of qemu. I had an issue with bulk transfers failing unless I told qemu to disconnect and reconnect the USB device every time I reloaded, the module, but it worked really nicely. What follows is a long list of fixes and enhancements. I would like some tester feedback. I only have the ds2490 USB to one wire controller and ds18b20 thermometer.

This set of patches fixes bugs in the one wire driver and the ds2490 one wire USB controller. Some of the bugs will deadlock the one wire system and print out a message every second reminding you of this. Others will panic the system. One will spam with printk in an infinite loop. The w1_therm slave device driver would overflow the userspace buffer, and didn't even work properly with cat.

In the name of being nice to the rest of the system, I've eliminated a thread that was waking up and polling every second, for pretty much only startup and shutdown events. The other thread, w1_process, will now block when there isn't anything to do, and if sleeping it will be immediately woken for a new search or for preparing to exit.

ds2490 USB to one wire master driver has been improved. The original code was observed to take 3.91 seconds for a temperature conversion and reading with 0.002s user and 3.001s system times. The system was very unresponsive, mostly due to some mdelay(750) calls. Now it is taking 0.860s elapsed with 0.004s user and 0.004s system time. That is pretty good considering that the temperature conversion takes 750ms (rounded up to 752ms). Some of the 108ms overload could be reduced by a shorter reset period, overdrive data transfer speed, and combining USB operations. The driver now supports the strong pullup, which is useful for parasite powered devices.

I was keeping track of my changes in cvs. I've included the file, cvs version number and log for that commit that make up the given patch. The cvs number is just to help me keep everything organized to make the patches. The patches are against 2.6.25-rc4.

--
David Fries <[email protected]>
http://fries.net/~david/ (PGP encryption key available)