Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753671AbbGAJw3 (ORCPT ); Wed, 1 Jul 2015 05:52:29 -0400 Received: from mailout1.w1.samsung.com ([210.118.77.11]:28195 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752114AbbGAJwW (ORCPT ); Wed, 1 Jul 2015 05:52:22 -0400 X-AuditID: cbfec7f5-f794b6d000001495-70-5593b853fcac Message-id: <5593B84B.7030806@samsung.com> Date: Wed, 01 Jul 2015 11:52:11 +0200 From: Jacek Anaszewski User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130804 Thunderbird/17.0.8 MIME-version: 1.0 To: Sakari Ailus Cc: linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org, cooloney@gmail.com, rpurdie@rpsys.net, stsp@users.sourceforge.net, pavel@ucw.cz, sakari.ailus@linux.intel.com, andreas.werner@men.de, andrew@lunn.ch, ospite@studenti.unina.it, anemo@mba.ocn.ne.jp, ben@simtec.co.uk, bootc@bootc.net, dmurphy@ti.com, daniel.jeong@ti.com, daniel@zonque.org, davem@davemloft.net, fabio.baltieri@gmail.com, balbi@ti.com, florian@openwrt.org, gshark.jeong@gmail.com, g.liakhovetski@gmx.de, ingi2.kim@samsung.com, dl9pf@gmx.de, johan@kernel.org, lenz@cs.wisc.edu, jogo@openwrt.org, q1.kim@samsung.com, kris@krisk.org, kristoffer.ericson@gmail.com, linus.walleij@linaro.org, broonie@kernel.org, michael.hennerich@analog.com, milo.kim@ti.com, nm127@freemail.hu, ncase@xes-inc.com, neilb@suse.de, nick.forbes@incepta.com, lost.distance@yahoo.com, p.meerwald@bct-electronic.com, n0-1@freewrt.org, philippe.retornaz@epfl.ch, raph@8d.com, rpurdie@openedhand.com, rod@whitby.id.au, dave@sr71.net, giometti@linux.it, bigeasy@linutronix.de, shuahkhan@gmail.com, sguinot@lacie.com Subject: Re: [PATCH/RFC v2 1/5] leds: Use set_brightness_work for brightness_set ops that can sleep References: <1435672770-4261-1-git-send-email-j.anaszewski@samsung.com> <20150630222450.GR5904@valkosipuli.retiisi.org.uk> In-reply-to: <20150630222450.GR5904@valkosipuli.retiisi.org.uk> Content-type: text/plain; charset=ISO-8859-1; format=flowed Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA02Sa0yTZxTH97zP817o1uyx8/KIH2aazUUSnW5qTrzihyXvNCZLhMSYbFrh FZyA2IrKQlxhc2pxiLQYrYR5K6xAQChCbUW0pFwsDBUxooKwUFSmXBRcuQy14hK+/c75//I/ X46ENd18qLQjYY+iT9DFaQUV8U3U3Vmw0WmOXNRWOxvSqzIJNLd7MNjMEXD90c+Q73tJ4MSt LAxF3m8gu6tbAO/l4xxcqfBjSPuvl0CqvZqDnOZfCVjGcnhI95Xz8EtgO7zqbyTQX5rLQeX9 CQxmt4kHZ9uQAA+KbwiQdu8oDyOOwyLkNjDw1rh4sIznc9DiyhHg0rNiBIGMCgEyaxwi5I8W E+jrGyPgP3ZdhKo/jAT+bXqN4ZnTx8NYuptAhmc2tN/wCtDS5CVQ+reVA3/jfQR19Q0cjFR1 YnC7/Dw0VtsFeFH+ioOSbhUMj4TDkYwTJPxr+bXjHJJ7W9fKf3a0c/JLex6RW0cLsFxub+Pk vIOFWL5wOCDKwy96RfmytV2UBwZ/kGuGzxI513YNy2UFRwTZfPcoL9tbOrnvvtisWhmtxO3Y q+i/XL1VFWvK+jaxc87+oasRRuScaUIhEqNLmMvhESZ5JrvZUfKWVZKG2hDr6WvCk0MPYmlP u3DQUtMw5h48LZqQJBH6OfstkBxcC3QxG3nyDxfkGXQTG/dd5Sf1aSxg7iBBnk7nMX9ZFwl2 YnpNYmZvpRgMPqEKGws8fNevoSksLTXvXVEIXcPOdzegIGO6gtmzKt7zp8xR9BxnImqdcsM6 RbNO0c4gXIBmKElRiYZtMfFfLTTo4g1JCTELo3bFl6HJ3xt2Ilvtcg+iEtJ+pI5l5kgNr9tr SI73ICZh7XT1UPbblTpal/yTot+1RZ8Upxg8aI5EtLPUp1z9ERoao9uj7FSUREX/f8pJIaFG lJIS3rE+O7poqXiw+VBL1MoJS0bP8zu3UgufUJs98UOa2l+wrqn847b51G5U9m0QylaYNv44 eqb26T7indsb9311nfFYXleYyf04mresGrjwmTHir3rTItXgBzvrrgx0Vq2eFnXo96ST9Tct a07yp1eFJo/fXrb7wPLaU5WtNYUXDU4tMcTqFodhvUH3Bpseh8Z3AwAA Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3713 Lines: 89 Hi Sakari, On 07/01/2015 12:24 AM, Sakari Ailus wrote: > Hi Jacek, > > On Tue, Jun 30, 2015 at 03:59:26PM +0200, Jacek Anaszewski wrote: >> This patch rearranges the core LED subsystem code, so that it >> now shifts the responsibility for using work queues from drivers, >> in case their brightness_set ops can sleep, onto the LED core >> Addition of two flags: LED_BRIGHTNESS_FAST and LED_BLINK_DISABLE >> as well as new_brightness_value property to the struct led_classdev >> allows for employing existing set_brightness_work to do the job. >> The modifications allows also to get rid of brightness_set_sync op, >> as flash LED devices can now be handled properly only basing on the >> SET_BRIGHTNESS_SYNC flag. > > Nice patch! Thanks! > > Looks like this is the favourite topic nowadays. ;-) Yeah, this allows to believe that we will manage to tackle the issue finally :) > The documentation should be improved to tell how the API is expected to be > have, e.g. which functions may block. I think this is out of scope for this > patch though. Yes, I planned to cover this after the patch is accepted. > I think all the existing drivers that implement the set_brightness() > callback have a fast (and non-blocking) implementation, and some of these > drivers use a work queue. In order to avoid modifying those drivers right > now, how about adding a flag for slow devices instead? "Slow" handlers > should be those that do at least one of the following: 1) sleep and 2) take > excessive amount of time to run. As Andrew Lunn mentioned, he was also working on this issue and he did the vast majority of work [1] needed to remove work queues from existing drivers. Only new flags would have to be added. > How about splitting the patch as follows: > > - set_brightness()/set_brightness_sync() -> set_brightness() + > LED_BRIGHTNESS_FAST + slow handlers in a work queue, > - add LED_BLINK_DISABLE flag, > - fix the heartbeat trigger (it's sleeping in a timer if LED_BRIGHTNESS_SYNC > is set). With my solution heartbeat trigger is not sleeping even if LED_BRIGHTNESS_SYNC is set as all triggers use the new function - led_set_brightness_nosleep. > I'd propose to drop led_set_brightness_async() and just make > led_set_brightness() asynchronous (or non-blocking if you wish) as it was > before the LED flash class patches. Considering the nature and tradition of > the framework, that's probably how most users want it to be. One can always > use led_set_brightness_sync() if needed. > > The caller should indeed decide whether the operation is synchronous or not, > that's not really a property of the LED. I requested that for the V4L2 > framework due to the very different use cases that are typical for the LED > class devices. > > I have some patches along these lines, but I probably won't have much time > to work on them, and I can rebase mine on yours later on. If you're > interested in taking a peek they're here: > > I've skimmed through the patches and I find them valuable. Could you elaborate on the patch "leds: Serialise access to LED framework data and drivers", what problem does it solve? > > As the result the as3645a driver is quite a bit smaller than the V4L2 > sub-device one, which is a good sign. :-) > [1] https://github.com/lunn/linux.git 3.19-rc4-led-devel-workqueue -- Best Regards, Jacek Anaszewski -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/