On Thu, 2008-03-20 at 16:47 -0700, Andrew Morton wrote:The LED interface said that the brightness_set implementation should not sleep since it was intended to be a 'cheap' function and to allow LED triggers changing the LED brightness to be simple. A lot of embedded LED hardware doesn't need to sleep to toggle gpios. Some drivers do have a problem with that however and its usually been suggested they offload the brightness changes into a workqueue. The gpio driver tries to be clever and only uses the workqueue if the gpio backend can sleep *and* the calling context requires it, the latter part being the problem. So the options are: * fix the gpio driver not to be so clever and clearly document * move the workqueue into the LED class, use it for everyone and remove the limitation of the function (punishes the hardware which doesn't need to sleep) * move the workqueue into the LED class and have LED drivers state whether they can sleep or not * start passing around GFP_* flags Passing flags around and maintaining a track of schedulable state for the LED class sounds like overkill. I also don't like the idea of needlessly always using a workqueue. The reason the workqueue was never implemented in the core was basically a question of timing. If you know the LED is on a serial bus running at 9600 baud you might not schedule work quite as often as something on a faster bus. Yes you could start passing this info around but to me it makes sense to leave this kind of policy to the drivers. So I'm leaning towards 'fixing' the gpio driver as I think David has already offered. I will also improve the documentation on this function and its requirements as I agree the current isn't as clear as it should be. Cheers, Richard --
| Bart Van Assche | Integration of SCST in the mainstream Linux kernel |
| Tejun Heo | [PATCHSET] FUSE: extend FUSE to support more operations |
| Linus Torvalds | Linux 2.6.27-rc8 |
| Linus Torvalds | Linux 2.6.27 |
git: | |
| Ken Pratt | pack operation is thrashing my server |
| Jari Aalto | Re: On Tabs and Spaces |
| Felipe Balbi | Re: git-svnimport |
| Jakub Narebski | Re: VCS comparison table |
| Marcos Laufer | dmesg IBM x3650 OpenBSD 4.3 |
| Kevin Neff | Patching a SSH 'Weakness' |
| F. Caulier | [Perl/locales] Warning about locales |
| OBSD | KSH and Bash problem with long commands |
| KOSAKI Motohiro | [bug?] tg3: Failed to load firmware "tigon/tg3_tso.bin" |
| Denys Fedoryshchenko | thousands of classes, e1000 TX unit hang |
| Chris Snook | [RFC] introducing the Atheros L2 Fast Ethernet driver |
| Tilman Schmidt | Re: 2.6.25-rc8: FTP transfer errors |
| Treason Uncloaked | 1 hour ago | Linux kernel |
| Shared swap partition | 12 hours ago | Linux general |
| high memory | 2 days ago | Linux kernel |
| semaphore access speed | 2 days ago | Applications and Utilities |
| the kernel how to power off the machine | 2 days ago | Linux kernel |
| Easter Eggs in windows XP | 2 days ago | Windows |
| Root password | 2 days ago | Linux general |
| Where/when DNOTIFY is used? | 2 days ago | Linux kernel |
| How to convert Linux Kernel built-in module into a loadable module | 2 days ago | Linux kernel |
| Linux 2.6.24 and I/O schedulers | 2 days ago | Linux kernel |
