On Thu, Jan 17, 2019 at 10:21 PM Jacek Anaszewski <jacek.anaszewski@xxxxxxxxx> wrote: > Could you share why can't it be fixed by moving blink_set() > to a workqueue in the driver? It can be done that way, but that will lead to that: - The existing work struct in struct led_classdev provided by the LED core is not used, albeit being used by led_set_brightness() - led_blink_set() will have different semantic requirements than led_set_brightness() which can be called from any context as it will defer to led_set_brightness_nosleep() -> led_set_brightness_nopm() -> kicks workqueue. To me that appears arbitrarily inconsistent which is IMO not a good thing in generic APIs, but maybe there are other ways to see it? Yours, Linus Walleij