Re: [PATCH v8 7/7] platform/x86/dell-*: Call led_classdev_notify_brightness_hw_changed on kbd brightness change

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wednesday 01 March 2017 13:02:58 Hans de Goede wrote:
> Hi,
> 
> On 01-03-17 12:15, Pali Rohár wrote:
> >On Wednesday 22 February 2017 13:20:46 Hans de Goede wrote:
> >>1) These events do not happen 100s of times per second, they happen
> >>almost never
> >
> >100 events per second is probably not happening, but on my Latitude I
> >see that sometimes more events are delayed and delivered at once.
> >
> >>2) This is the best we can do given the firmware interface we have
> >
> >What about just dropping upcoming one event in interval of next 2-3
> >second? Instead of trying to remember last state in kernel and then
> >trying to mach if received event was that which was caused by change?
> 
> That is way more racy then the solution with the kernel remembering
> the brightness. With my proposed solution there is basically no race,

Is is racy. When you change keyboard backlight via LED sysfs and also in
that time kernel receive hardware event about changed backlight, kernel
do not know if that event comes as reaction to change via LED sysfs or
as autonomous firmware decision or as reaction to pressing key for
changing keyboard backlight (managed by firmware).

I'm not talking here about userspace libsmbios. All is just by
autonomous firmware, keyboard usage and LED sysfs API.

And how is my idea about dropping exactly one event for one request for
changing backlight via LED sysfs API more racy as yours?

Received event from firmware has only the timestamp, no more information
yet (*). Therefore state of events does is not ordered and any two
events are basically same.

In your provides patch you are adding additional information to event.
It is currently read brightness level in time when was event delivered,
not state of time when event was created. Which means you cannot swap
any two received events anymore as they are part of current driver
state.

In my idea I do not add any additional information to event. Which means
all received events are same in current driver state and I can swap
them. So I can decide to drop one event when driver is changing
backlight level. And because I can swap received events it does not
matter if I drop "correct" one (that which was really generated by my
backlight level change) or any other before or after (as they are same).
The only important is that kernel use correct number of firmware events.

Idea for time interval of 2-3 seconds is that if event is delivered
later as after 3 seconds it is probably useless as driver application
code can be already out-of-sync. But this time interval is just another
idea and we do not need to use it.

(*) Looks like for some machines in dell-wmi.c we know also which
brightness level was set by firmware, but it is not used now and we
still have machines without this information.

> the only downside is the driver seeing a brightness change caused by
> libsmbios as one caused by the hotkeys, but it will do so 100%
> reliably and that is something which I believe we can live with
> just fine.
> 
> >This would allow us to reduce doing one SMM call for each received
> >event and I think it would be same reliable as your approach.
> 
> As I explained *already* we already have only one SMM call for reach
> received event, we pass the read-back brightness into
> led_classdev_notify_brightness_hw_changed and when userspace
> reads the new brightness_hw_changed event in response to the wakeup
> the led-core will use the value passed through
> led_classdev_notify_brightness_hw_changed so only 1 SMM call happens
> per event.
> 
> Also again this does not happen 100 times per second you're really
> trying to optimize something which does not need any optimization
> at all here.

We have reports that on some Dell notebooks is issuing SMM call causing
freezing kernel for about 1-3 seconds (as firmware stay in SMM mode for
a longer time...).

> Regards,
> 
> Hans
> 

-- 
Pali Rohár
pali.rohar@xxxxxxxxx




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux