Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933502AbcKJNz2 (ORCPT ); Thu, 10 Nov 2016 08:55:28 -0500 Received: from mailout4.w1.samsung.com ([210.118.77.14]:58881 "EHLO mailout4.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932952AbcKJNzZ (ORCPT ); Thu, 10 Nov 2016 08:55:25 -0500 X-AuditID: cbfec7f2-f79556d000002c42-8b-58247c48c5ea Subject: Re: PM regression with LED changes in next-20161109 To: Hans de Goede , Jacek Anaszewski , Tony Lindgren Cc: linux-leds@vger.kernel.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Darren Hart , Pavel Machek From: Jacek Anaszewski Message-id: <7cc1ba55-1bd0-ae3f-5c9b-f16efb8dcc80@samsung.com> Date: Thu, 10 Nov 2016 14:55:18 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-version: 1.0 In-reply-to: Content-type: text/plain; charset=windows-1252; format=flowed Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrEKsWRmVeSWpSXmKPExsWy7djPc7oeNSoRBht7LSy6FhpYvDk+ncni 9tYNLBabHl9jtbi8aw6bxdY36xgtZi/pZ7G4e+oom8X+K14OnB7fvk5i8dg56y67x+YVWh6b l9R7vN93lc1jxerv7B6fN8kFsEdx2aSk5mSWpRbp2yVwZbz43cxccE6vYubUvawNjE+Uuxg5 OSQETCTOzTjDCmGLSVy4t56ti5GLQ0hgKaPEzLfnWCCcz4wS+7r+MHUxcoB1XF0tDRFfxijx 4FszO4TzjFGi7ewEsFHCAjYS06d8ZAGxRQSqJC7eOcgIUsQscJhR4smNdWAJNgFDiZ8vXjOB 2LwCdhKTr39lA7FZBFQlDr2ewgiyTVQgQmL33VSIEkGJH5PvgbVyApWfvrYUrJxZwFHiwaKd rBC2vMTmNW+ZQXZJCBxil2j98o0V4mpZiU0HmCHedJF4MGUZG4QtLPHq+BZ2CFtG4vLkbhaI 3smMEheP3WSFcFYzSmzs7GSBqLKWaPj/iwViG5/EpG3TmSEW8Ep0tAlBlHhILJ7/CxqmjhLT 589hhITQFSaJY+f7GScwys9C8tAsJE/MQvLEAkbmVYwiqaXFuempxcZ6xYm5xaV56XrJ+bmb GIEp5/S/4592MH49YXWIUYCDUYmHt0NTOUKINbGsuDL3EKMEB7OSCG9PpUqEEG9KYmVValF+ fFFpTmrxIUZpDhYlcd49C66ECwmkJ5akZqemFqQWwWSZODilGhg37Xpdpu1q5PtFPWhV8m6u 1Ps5pxbPup+7Y6vrxksMzq//TFF9/cc4mINFXSmSVSG1RC3oAd+EVWHLXx6oiM6+WjpBzElJ okf8pUfyxmSpi4fKL96w+KXxd1m6avDUpQqd+40Xt5VvCHRXs80tPvI/cD+DVHv9isVPVv+6 6nCvsXTO6V6JGRJKLMUZiYZazEXFiQBZ0XDhNQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrEIsWRmVeSWpSXmKPExsVy+t/xq7raNSoRBlOmGlp0LTSweHN8OpPF 7a0bWCw2Pb7GanF51xw2i61v1jFazF7Sz2Jx99RRNov9V7wcOD2+fZ3E4rFz1l12j80rtDw2 L6n3eL/vKpvHitXf2T0+b5ILYI9ys8lITUxJLVJIzUvOT8nMS7dVCg1x07VQUshLzE21VYrQ 9Q0JUlIoS8wpBfKMDNCAg3OAe7CSvl2CW8aL383MBef0KmZO3cvawPhEuYuRg0NCwETi6mrp LkZOIFNM4sK99WxdjFwcQgJLGCV6bnQwQTjPGCW27/zCCFIlLGAjMX3KRxYQW0SgSmJJy0dG iKIrTBLLGj+DOcwChxkl7pxYzw5SxSZgKPHzxWsmEJtXwE5i8vWvbCA2i4CqxKHXU8CmigpE SNxa9ZERokZQ4sfke2AbOIHqT19bClbPLGArseD9OhYIW15i85q3zBMYBWYhaZmFpGwWkrIF jMyrGEVSS4tz03OLjfSKE3OLS/PS9ZLzczcxAuNv27GfW3Ywdr0LPsQowMGoxMPboakcIcSa WFZcmXuIUYKDWUmEt6dSJUKINyWxsiq1KD++qDQntfgQoynQExOZpUST84GpIa8k3tDE0NzS 0MjYwsLcyEhJnHfqhyvhQgLpiSWp2ampBalFMH1MHJxSDYxVBmUizzy/L5590yJyH+/BDWaP rO9z3zZq2e/h8W73Sp8v7oE8vVqp/bqPQ9YHr354debqnEWHAn73/199Z6XrE8cljTttJO5s bezh0b550kSPVdP9l3NQw3ypa4UTnwQvvXvJT2RdpZHLM5Y5tw5vPHkwgCPu/VOXD20Hjbaq +LFfZ150IdBOiaU4I9FQi7moOBEA+PTK5dUCAAA= X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20161110135520eucas1p149cab4313764fb1db71a607ab280e365 X-Msg-Generator: CA X-Sender-IP: 182.198.249.180 X-Local-Sender: =?UTF-8?B?SmFjZWsgQW5hc3pld3NraRtTUlBPTC1TeXN0ZW0gRlcgIChN?= =?UTF-8?B?Qikb7IK87ISx7KCE7J6QG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Global-Sender: =?UTF-8?B?SmFjZWsgQW5hc3pld3NraRtTUlBPTC1TeXN0ZW0gRlcgIChN?= =?UTF-8?B?QikbU2Ftc3VuZyBFbGVjdHJvbmljcxtTZW5pb3IgU29mdHdhcmUgRW5naW5l?= =?UTF-8?B?ZXI=?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDAyQ0QwMjc1MjY=?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20161110084919epcas3p2e8fbdd2905cabe15c5301b7a8e22416c X-RootMTR: 20161110084919epcas3p2e8fbdd2905cabe15c5301b7a8e22416c References: <20161109192301.GS26979@atomide.com> <28234714-3994-6747-9cf8-1ff0b3257f7a@gmail.com> <5bd5333e-0dbb-6333-0a48-ca4d3a990f9c@samsung.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5811 Lines: 155 Hi, On 11/10/2016 02:04 PM, Hans de Goede wrote: > Hi, > > On 10-11-16 13:56, Jacek Anaszewski wrote: >> Hi, >> >> On 11/10/2016 09:49 AM, Hans de Goede wrote: >>> Hi, >>> >>> On 09-11-16 21:45, Jacek Anaszewski wrote: >>>> Hi Tony, >>>> >>>> On 11/09/2016 08:23 PM, Tony Lindgren wrote: >>>>> Hi, >>>>> >>>>> Looks like commit 883d32ce3385 ("leds: core: Add support for poll()ing >>>>> the sysfs brightness attr for changes.") breaks runtime PM for me. >>>>> >>>>> On my omap dm3730 based test system, idle power consumption is over 70 >>>>> times higher now with this patch! It goes from about 6mW for the core >>>>> system to over 440mW during idle meaning there's some busy timer now >>>>> active. >>>>> >>>>> Reverting this patch fixes the issue. Any ideas? >>>> >>>> Thanks for the report. This is probably caused by >>>> sysfs_notify_dirent(). >>>> I'm afraid that we can't keep this feature in the current shape. >>>> Hans, I'm dropping the patch. We probably will have to delegate this >>>> call to a workqueue task. Think about use cases when the LED is blinked >>>> with high frequency e.g. from ledtrig-disk.c. >>> >>> sysfs_notify_dirent() already uses a workqueue, here is the actual >>> implementation of it (from fs/kernfs/file.c) : >>> >>> void kernfs_notify(struct kernfs_node *kn) >>> { >>> static DECLARE_WORK(kernfs_notify_work, kernfs_notify_workfn); >>> unsigned long flags; >>> >>> if (WARN_ON(kernfs_type(kn) != KERNFS_FILE)) >>> return; >>> >>> spin_lock_irqsave(&kernfs_notify_lock, flags); >>> if (!kn->attr.notify_next) { >>> kernfs_get(kn); >>> kn->attr.notify_next = kernfs_notify_list; >>> kernfs_notify_list = kn; >>> schedule_work(&kernfs_notify_work); >>> } >>> spin_unlock_irqrestore(&kernfs_notify_lock, flags); >>> } >> >> Indeed. As a next step of this investigation Tony could disable >> particular calls made in kernfs_notify_workfn to check what >> exactly causes excessive power consumption. >> >>> So using a workqueue is not going to help. Note that I already >>> feared this, which is why my initial implementation only called >>> sysfs_notify_dirent() for user initiated changes and not for >>> triggers / blinking. >> >> AFAIR there were no calls to led_notify_brightness_change() in >> the initial implementation and it was entirely predestined for >> being called by LED class drivers on brightness changes made >> by firmware. >> >>> I think we may need to reconsider what getting the brightness >>> sysfs atrribute actually returns. Currently when a LED is >>> blinking it will return 0 resp. the actual brightness depending >>> on when in the blink cycle the user reads the brightness >>> sysfs atrribute. >>> >>> So a user can do "echo 128 > brightness && cat brightness" and >>> get out 0, or 128, depending purely on timing. >>> >>> This seems to contradict what Documentation/ABI/testing/sysfs-class-led >>> has to say: >>> >>> What: /sys/class/leds//brightness >>> Date: March 2006 >>> KernelVersion: 2.6.17 >>> Contact: Richard Purdie >>> Description: >>> Set the brightness of the LED. Most LEDs don't >>> have hardware brightness support, so will just be turned >>> on for >>> non-zero brightness settings. The value is between 0 and >>> /sys/class/leds//max_brightness. >>> >>> Writing 0 to this file clears active trigger. >>> >>> Writing non-zero to this file while trigger is active >>> changes the >>> top brightness trigger is going to use. >>> >>> Even though it only talks about writing, the logical thing would be for >>> reading to be the exact opposite of writing, so we would get: >>> >>> Reading from this file while a trigger is active returns >>> the >>> top brightness trigger is going to use. >>> >>> The current docs say not about (sw) blinking, but that should be treated >>> just >>> like a trigger IMHO. >> >> You'r right, we should describe the semantics on reading, but it would >> have to be as follows: >> >> Reading from this file returns LED brightness at given moment, i.e. >> even though LED class device brightness setting is greater than 0, the >> momentary brightness can be 0 if the readout occurred during low phase >> of blink cycle. > > Why would it need to read like this, because this is the current behavior ? We have led_update_brightness() which was introduced long time ago and is used in brightness_show(). Note that if LED controller changed actual LED brightness e.g. due to battery voltage dropping below certain threshold, we wouldn't be able to find it out otherwise (except if we added separate sysfs file for that). > > I doubt anyone is relying on this current behavior because it is really > unpredictable which value one can get. > > I believe it would be better to change the read semantics to follow > the write semantics, this would be much more consistent. > > Making the read behavior match the write behavior should be easy I would > be happy to write a patch for this. Let's better agree on the description of the current semantics. It has been around for a long time. >>> If we can get consensus on what the read behavior for the brightness >>> attribute >>> should be, then I think that a better poll() behavior will automatically >>> follow >>> from that. >> >> It seems that we should get back to your initial approach. i.e. only >> brightness changes caused by hardware should be reported. > > Ok, if you really want to keep the read behavior as is, I can provide > an updated patch for this. Yes please. -- Best regards, Jacek Anaszewski