On Tue, 2012-07-31 at 20:24 +0100, Chris Wilson wrote:
On Tue, 31 Jul 2012 11:14:17 +0100, Chris Wilson chris@chris-wilson.co.uk wrote:
On Tue, 31 Jul 2012 10:57:10 +0100, James Bottomley James.Bottomley@HansenPartnership.com wrote:
When did you inspect the debug files? One effect I can imagine is that if your system was previously stuck at RPn and never upclocking the GPU when X starts. The question would then be what is preventing the GPU from reaching its lowest power state again.
After I logged into an xfce4 session and powertop showed idle had been reached.
That you are using xfce4 makes the use of semaphores for pageflips as being the root cause even more suspect. Pageflips are only used for a fullscreen DRI client caalling SwapBuffers, to my knowledge xfce4 does not use DRI at all - its compositing manager is XRender based if you happen to be using it.
Please can you try the small patch to disable the use of semaphores for pageflips and see if the regression remains (which I judge it will...):
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 5c4657a..f301f2f 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -3067,7 +3067,7 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_o return ret;
if (pipelined != obj->ring) {
ret = i915_gem_object_sync(obj, pipelined);
ret = i915_gem_object_wait_rendering(obj); if (ret) return ret; }
Your patch doesn't apply ... I think because in v3.5 this line is displaced by about 200 lines in the file.
patching file drivers/gpu/drm/i915/i915_gem.c Hunk #1 FAILED at 3067. 1 out of 1 hunk FAILED -- saving rejects to file drivers/gpu/drm/i915/i915_gem.c.rej
I got the attached to apply and it doesn't really improve the idle power much (12.5W).
James
---
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 288d7b8..2f3f279 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -2869,7 +2869,7 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj, return ret;
if (pipelined != obj->ring) { - ret = i915_gem_object_sync(obj, pipelined); + ret = i915_gem_object_wait_rendering(obj); if (ret) return ret; }