[Intel-gfx] [PATCH 2/3] drm/i915: close PM interrupt masking races in the rps work func

2011-09-08 Thread Daniel Vetter
This patch closes the following race: We get a PM interrupt A, mask it, set dev_priv-iir = PM_A and kick of the work item. Scheduler isn't grumpy, so the work queue takes rps_lock, grabs pm_iir = dev_priv-pm_iir and pm_imr = READ(PMIMR). Note that pm_imr == pm_iir because we've just masked the

Re: [Intel-gfx] [PATCH 2/3] drm/i915: close PM interrupt masking races in the rps work func

2011-09-08 Thread Ben Widawsky
On Thu, Sep 08, 2011 at 02:00:21PM +0200, Daniel Vetter wrote: This patch closes the following race: We get a PM interrupt A, mask it, set dev_priv-iir = PM_A and kick of the work item. Scheduler isn't grumpy, so the work queue takes rps_lock, grabs pm_iir = dev_priv-pm_iir and pm_imr =

Re: [Intel-gfx] [PATCH 2/3] drm/i915: close PM interrupt masking races in the rps work func

2011-09-05 Thread Daniel Vetter
On Sun, Sep 04, 2011 at 09:38:56PM +, Ben Widawsky wrote: Oops, you're totally right, I think I meant: - I915_WRITE(GEN6_PMIMR, pm_imr ~pm_iir); + I915_WRITE(GEN6_PMIMR, dev_priv-pm_iir); Imo still racy without the irqsafe rps_lock around it. gcc is free to compile that into a

Re: [Intel-gfx] [PATCH 2/3] drm/i915: close PM interrupt masking races in the rps work func

2011-09-05 Thread Ben Widawsky
On Mon, 5 Sep 2011 08:38:07 +0200 Daniel Vetter dan...@ffwll.ch wrote: On Sun, Sep 04, 2011 at 09:38:56PM +, Ben Widawsky wrote: Oops, you're totally right, I think I meant: - I915_WRITE(GEN6_PMIMR, pm_imr ~pm_iir); + I915_WRITE(GEN6_PMIMR, dev_priv-pm_iir); Imo still

Re: [Intel-gfx] [PATCH 2/3] drm/i915: close PM interrupt masking races in the rps work func

2011-09-05 Thread Chris Wilson
On Sun, 4 Sep 2011 23:51:52 -0700, Ben Widawsky b...@bwidawsk.net wrote: On Mon, 5 Sep 2011 08:38:07 +0200 Daniel Vetter dan...@ffwll.ch wrote: On Sun, Sep 04, 2011 at 09:38:56PM +, Ben Widawsky wrote: Oops, you're totally right, I think I meant: - I915_WRITE(GEN6_PMIMR,

[Intel-gfx] [PATCH 2/3] drm/i915: close PM interrupt masking races in the rps work func

2011-09-04 Thread Daniel Vetter
This patch closes the following race: We get a PM interrupt A, mask it, set dev_priv-iir = PM_A and kick of the work item. Scheduler isn't grumpy, so the work queue takes rps_lock, grabs pm_iir = dev_priv-pm_iir and pm_imr = READ(PMIMR). Note that pm_imr == pm_iir because we've just masked the

Re: [Intel-gfx] [PATCH 2/3] drm/i915: close PM interrupt masking races in the rps work func

2011-09-04 Thread Daniel Vetter
On Sun, Sep 04, 2011 at 10:08:17AM -0700, Ben Widawsky wrote: diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 55518e3..3bc1479 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c @@ -415,12 +415,7 @@ static void

Re: [Intel-gfx] [PATCH 2/3] drm/i915: close PM interrupt masking races in the rps work func

2011-09-04 Thread Ben Widawsky
On Sun, Sep 04, 2011 at 09:26:48PM +0200, Daniel Vetter wrote: On Sun, Sep 04, 2011 at 10:08:17AM -0700, Ben Widawsky wrote: diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 55518e3..3bc1479 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++

Re: [Intel-gfx] [PATCH 2/3] drm/i915: close PM interrupt masking races in the rps work func

2011-09-04 Thread Daniel Vetter
On Sun, Sep 04, 2011 at 07:56:57PM +, Ben Widawsky wrote: On Sun, Sep 04, 2011 at 09:26:48PM +0200, Daniel Vetter wrote: On Sun, Sep 04, 2011 at 10:08:17AM -0700, Ben Widawsky wrote: diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index