Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933100AbcKJM4g (ORCPT ); Thu, 10 Nov 2016 07:56:36 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:45046 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932697AbcKJM4e (ORCPT ); Thu, 10 Nov 2016 07:56:34 -0500 X-AuditID: cbfec7ef-f79e76d000005b57-02-58246e7e7463 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: <5bd5333e-0dbb-6333-0a48-ca4d3a990f9c@samsung.com> Date: Thu, 10 Nov 2016 13:56:27 +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+NgFlrAKsWRmVeSWpSXmKPExsWy7djPc7p1eSoRBr//Kll0LTSweHN8OpPF 7a0bWCw2Pb7GanF51xw2i61v1jFazF7Sz2Jx99RRNov9V7wcOD2+fZ3E4rFz1l12j80rtDw2 L6n3eL/vKpvHitXf2T0+b5ILYI/isklJzcksSy3St0vgytgx6x9LwWflis0dy9gaGDuluxg5 OSQETCT2f/zICmGLSVy4t56ti5GLQ0hgGaNEb+d1NpCEkMBnRomtd51hGrY+/cUOV9T15B9U xzNGiTUbXzKBVAkL2EhMn/KRBcQWEaiSuHjnICNIEbPAYUaJJzfWgSXYBAwlfr54DdbAK2An cX7JTSCbg4NFQFViZ6MpiCkqECGx+24qRIWgxI/J98A6OYGqL53eBNbJLOAo8WDRTlYIW15i 85q3zBCH7mOXaPxYBjJGQkBWYtMBqLCLxNHDz6EeFpZ4dXwLO4QtI9HZcZAJ5EoJgcmMEheP 3WSFcFYzSmzs7GSBqLKWaPj/iwViGZ/EpG3TmSEW8Ep0tAlBlHhILJ7/C2qBo8T0+XMYIeHz mlHi+ZQzjBMY5Wch+WcWkh9mIflhASPzKkaR1NLi3PTUYkO94sTc4tK8dL3k/NxNjMB0c/rf 8fc7GJ82hxxiFOBgVOLh7dBUjhBiTSwrrsw9xCjBwawkwluWrRIhxJuSWFmVWpQfX1Sak1p8 iFGag0VJnHfvgivhQgLpiSWp2ampBalFMFkmDk6pBkaBLTpc6yOm/Q8OmH/sxqPdYc+M/f/l Xq0+UmbX+4HDYOvsKRMaHsX7TOPaGnriwKSbN1b2/6lgYnlb5PegfEswo/mDg828E91OzeN8 L+4icf+R50oBRs2Z+p13Xxb/Z+L8vNJakGceV0Tei4WMr28tPn2+M1hk9WzJ+dffG1qvaLmh PmOX/G07JZbijERDLeai4kQAkdhw2DMDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrIIsWRmVeSWpSXmKPExsVy+t/xy7q1eSoRBl3/DCy6FhpYvDk+ncni 9tYNLBabHl9jtbi8aw6bxdY36xgtZi/pZ7G4e+oom8X+K14OnB7fvk5i8dg56y67x+YVWh6b l9R7vN93lc1jxerv7B6fN8kFsEe52WSkJqakFimk5iXnp2TmpdsqhYa46VooKeQl5qbaKkXo +oYEKSmUJeaUAnlGBmjAwTnAPVhJ3y7BLWPHrH8sBZ+VKzZ3LGNrYOyU7mLk5JAQMJHY+vQX O4QtJnHh3nq2LkYuDiGBJYwSk3dPZYVwnjFKNGw5xAZSJSxgIzF9ykcWEFtEoEpiSctHRhBb SOA1o8SViSYgDcwChxkl7pxYDzaWTcBQ4ueL10wgNq+AncT5JTeBbA4OFgFViZ2NpiBhUYEI iVurIObwCghK/Jh8D2w+J1D5pdObwFqZBWwlFrxfxwJhy0tsXvOWeQKjwCwkLbOQlM1CUraA kXkVo0hqaXFuem6xoV5xYm5xaV66XnJ+7iZGYPRtO/Zz8w7GSxuDDzEKcDAq8fB2aCpHCLEm lhVX5h5ilOBgVhLhLctWiRDiTUmsrEotyo8vKs1JLT7EaAr0w0RmKdHkfGBiyCuJNzQxNLc0 NDK2sDA3MlIS5y35cCVcSCA9sSQ1OzW1ILUIpo+Jg1OqgZFdYYlep0vUMYs0g7a2B79bHnEJ 8TJxZlSuT6mskV+40Ti91ud3+NnPv1Tn5e0M2FHvb6gipVHx2W52OOON043bT3I5PPsZLrN5 e6zIhUSNPaciXLh5cn4yugknPJrevfbWrXRuNivvk+Eau//tLJViNzvoaH0rfbHPR+uoNBfH F3Lly11vKbEUZyQaajEXFScCAFnWCM/UAgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20161110125628eucas1p25be4d84ba95abcc95fe96e615bc658e0 X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 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> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4473 Lines: 122 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. > 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. -- Best regards, Jacek Anaszewski