Hi Ben (or Pavel or whomever can explain this), since you are the original author of netdev LED trigger, I guess this question should go to you. Why are spinlocks used as locks in the netdev trigger code? Is this for performance? Would it be a drastic performance hit to use mutexes? The reason why I am asking is that I am designing an API for transparent HW offload of LED triggers. (Some LEDs, eg. LEDs on ethernet PHYs, can blink on rx/tx activity themselves). You can find this at https://git.kernel.org/pub/scm/linux/kernel/git/kabel/linux.git/log/?h=leds-trigger-hw-offload The current approach for the netdev trigger is that the set_baseline_state function calls trigger_offload() method of the LED classdev. But the whole set_baseline_state function is called from within spinlock, and so when the trigger_offload method calls something that can sleep (MDIO bus communication, for example), kernel complains: BUG: scheduling while atomic Thanks. Marek