On Wed, 07 May 2014, Jani Nikula <[email protected]> wrote: > If too high a brightness value has been saved (e.g. due to kernel > mechanism changing from one kernel version to another, or booting the > userspace on another system), the brightness update fails and the > process exits. > > Clamp saved brightness between the policy minimum introduced in > > commit 7b909d7407965c03caaba30daae7aee113627a83 > Author: Josh Triplett <[email protected]> > Date: Tue Mar 11 21:16:33 2014 -0700 > > backlight: Avoid restoring brightness to an unreadably dim level > > and the absolute maximum. > > --- > > UNCOMPILED AND UNTESTED; please consider this more a bug report than a > real contribution... Based on reading the source while debugging > https://bugs.freedesktop.org/show_bug.cgi?id=78200 > --- > src/backlight/backlight.c | 11 ++++++++--- > 1 file changed, 8 insertions(+), 3 deletions(-) > > diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c > index c708391612a2..d48a73e69364 100644 > --- a/src/backlight/backlight.c > +++ b/src/backlight/backlight.c > @@ -229,7 +229,7 @@ static unsigned get_max_brightness(struct udev_device > *device) { > * would otherwise force the user to disable state restoration. */ > static void clamp_brightness(struct udev_device *device, char **value, > unsigned max_brightness) { > int r; > - unsigned brightness, new_brightness; > + unsigned brightness, new_brightness, min_brightness; > > r = safe_atou(*value, &brightness); > if (r < 0) { > @@ -237,7 +237,8 @@ static void clamp_brightness(struct udev_device *device, > char **value, unsigned > return; > } > > - new_brightness = MAX3(brightness, 1U, max_brightness/20); > + min_brightness = MAX(1U, max_brightness/20); > + new_brightness = CLAMP(brightness, min_brightness, max_brightness); > if (new_brightness != brightness) { > char *old_value = *value; > > @@ -247,7 +248,11 @@ static void clamp_brightness(struct udev_device *device, > char **value, unsigned > return; > } > > - log_debug("Saved brightness %s too low; increasing to %s.", > old_value, *value); > + log_debug("Saved brightness %s %s to %s.", old_value, > + new_brightness < min_brightness ?
Should be "brightness < min_brightness"; the above is never true. > + "too low; increasing" : "too high; decreasing", > + *value); > + > free(old_value); > } > } > -- > 1.9.1 > -- Jani Nikula, Intel Open Source Technology Center _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
