lp:~sforshee/powerd/fix-display-timing

Created by Seth Forshee on 2014-01-03 and last modified on 2014-01-06
Get this branch:
bzr branch lp:~sforshee/powerd/fix-display-timing
Only Seth Forshee can upload to this branch. If you are Seth Forshee please log in for upload directions.

Branch merges

Related bugs

Related blueprints

Branch information

Owner:
Seth Forshee
Project:
powerd
Status:
Merged

Recent revisions

107. By Seth Forshee on 2014-01-06

libsuspend: Fix earlysuspend error checking on writes

earlysuspend_{enter,exit}() could wait on the framebuffer state
to change in some cases when the write to /sys/power/state
failed. Erroneously waiting on the framebuffer state to change
could potentially block mainloop execution indefinitely, so be
conservative about doing so. Only wait if exactly the expected
number of bytes is written.

106. By Seth Forshee on 2014-01-03

display: Don't monitor wait_for_fb_{sleep,wake} directly

Now that powerd's entering and exiting of suspend are synchronous
wrt the kernel's suspending and resuming of the display device,
the display code no longer needs to monitor these files directly.
Instead it can just ask whether or not suspend is currently
active and expect the display device state to match the system
state. Since suspend/resume and display on/off all happen on the
mainloop, this is race-free.

The current interfaces are insufficient for what the display code
needs to do here, as they reflect the power state visible to the
system and this doesn't always match the actual suspend state.
Add a new interface, powerd_suspend_active(), to allow the
display code to inquire directly about the suspend state. Use
this new interface instead of the framebuffer sleep/wake status,
and remove monitoring of wait_for_fb_{sleep,wake} in the display
code as it is no longer used.

A callback into the display code is also needed to inform it of
transitioning out of suspend since the display device may be
suspended when a request comes in to turn on the display. Add
this callback, which schedules work on the main loop to power
on the display if needed, and call it after exiting suspend.

105. By Seth Forshee on 2014-01-03

libsuspend: Make earlysuspend enter/exit with kernel early suspend processing

When writing to /sys/power/state with a kernel using the
earlysuspend implementation the kernel will queue up processing
for the request on a separate kernel thread. The work done here
can included suspending and resuming certain devices without
freezing userspace tasks.

This is causing issues with the display handling on mako. The
display is one of the devices suspended and resumed while
userspace is active, and the kernel exports the status of the
device via the /sys/power/wait_for_fb_{sleep,wake,status} files.
However, the early suspend / late resume processing is slow
enough that mashing on the power button quickly can cause powerd
to get ahead of the kernel suspend workqueue, causing us to turn
the display off and then back on _before_ the kernel has gotten
around to suspending the display device. The kernel reports that
the display device is awake, powerd tries to turn it on, but
then the kernel tries to suspend it. This leads to failed
requests to the display driver and sometims some sort of deadlock
situation (due to apparent bugs in the display driver).

To avoid this, make entering and exiting suspend synchronous with
the kernel's internal suspend work. The only window we have into
this is via the wait_for_fb_* files. When the earlysuspend
implementation is detected a thread is launched to monitor the
status of these files and set an internal state variable. Any
request to enter/exit suspend will block until the framebuffer is
in the desired state, ensuring that at least the display device
has been suspended or resumed before returning to the caller.
Since entering/exiting resume and turning the display on/off are
all handled on the main loop this prevents any attempts to
modify the state of the display until the device has transitioned
to its new state.

104. By Ricardo Salveti on 2013-12-17

Using pkg-config files from hybris, and depending on latest version
.

Approved by Sergio Schvezov, PS Jenkins bot.

103. By PS Jenkins bot on 2013-10-10

Releasing 0.13+13.10.20131010-0ubuntu1 (revision 102 from lp:powerd).

Approved by PS Jenkins bot.

102. By Ricardo Mendoza on 2013-10-10

Under Mir, only suspend if Mir is still alive; this is to prevent the GPU state and the display server expectations getting out of sync when starting up.

101. By PS Jenkins bot on 2013-10-09

Releasing 0.13+13.10.20131009-0ubuntu1 (revision 100 from lp:powerd).

Approved by PS Jenkins bot.

100. By Ricardo Mendoza on 2013-10-09

Use power HAL to signal power subsystems to resume quickly as user interaction is expected. Fixes: https://bugs.launchpad.net/bugs/1233257.

Approved by Ricardo Salveti, PS Jenkins bot.

99. By PS Jenkins bot on 2013-10-07

Releasing 0.13+13.10.20131007.1-0ubuntu1 (revision 98 from lp:powerd).

Approved by PS Jenkins bot.

98. By Seth Forshee on 2013-10-07

Don't reset the activity timer for touch events if the screen is of (LP: #1234743).

Approved by PS Jenkins bot, Matthew Fischer.

Branch metadata

Branch format:
Branch format 7
Repository format:
Bazaar repository format 2a (needs bzr 1.16 or later)
Stacked on:
lp:powerd
This branch contains Public information 
Everyone can see this information.

Subscribers