* [PATCH 1/2] drm: fix order of event_lock wrt. vblank_time_clock
@ 2012-10-31 22:03 Imre Deak
2012-10-31 22:03 ` [PATCH 2/2] drm/i915: lock event_lock for drm_vblank_off() Imre Deak
` (6 more replies)
0 siblings, 7 replies; 15+ messages in thread
From: Imre Deak @ 2012-10-31 22:03 UTC (permalink / raw)
To: intel-gfx, dri-devel
drm_vblank_off() requires callers to hold the event_lock, while itself
locking vbl_time and vblank_time_lock. This defines a dependency chain
that conflicts with the one in drm_handle_vblank() where we first lock
vblank_time_lock and then the event_lock. Fix this by reversing the
locking order in drm_handle_vblank().
This should've triggered a lockdep warning in the exynos driver, the
rest of the drivers were ok, since they are not using drm_vblank_off(),
or as in the case of the intel driver were not holding the event_lock
when calling drm_vblank_off(). This latter issue is addressed in the
next patch.
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
drivers/gpu/drm/drm_irq.c | 32 ++++++++++++++++++++------------
1 file changed, 20 insertions(+), 12 deletions(-)
Tested with i915, the rest of the drivers should be checked with
lockdep enabled.
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index 3a3d0ce..2193d4a 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -1236,17 +1236,21 @@ done:
return ret;
}
+/**
+ * drm_handle_vblank_events - send pending vblank events
+ * @dev: DRM device
+ * @crtc: crtc where the vblank(s) happened
+ *
+ * Must be called with @dev->event_lock held.
+ */
static void drm_handle_vblank_events(struct drm_device *dev, int crtc)
{
struct drm_pending_vblank_event *e, *t;
struct timeval now;
- unsigned long flags;
unsigned int seq;
seq = drm_vblank_count_and_time(dev, crtc, &now);
- spin_lock_irqsave(&dev->event_lock, flags);
-
list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
if (e->pipe != crtc)
continue;
@@ -1266,8 +1270,6 @@ static void drm_handle_vblank_events(struct drm_device *dev, int crtc)
e->event.sequence);
}
- spin_unlock_irqrestore(&dev->event_lock, flags);
-
trace_drm_vblank_event(crtc, seq);
}
@@ -1285,21 +1287,22 @@ bool drm_handle_vblank(struct drm_device *dev, int crtc)
s64 diff_ns;
struct timeval tvblank;
unsigned long irqflags;
+ bool ret = false;
if (!dev->num_crtcs)
return false;
+ spin_lock_irqsave(&dev->event_lock, irqflags);
+
/* Need timestamp lock to prevent concurrent execution with
* vblank enable/disable, as this would cause inconsistent
* or corrupted timestamps and vblank counts.
*/
- spin_lock_irqsave(&dev->vblank_time_lock, irqflags);
+ spin_lock(&dev->vblank_time_lock);
/* Vblank irq handling disabled. Nothing to do. */
- if (!dev->vblank_enabled[crtc]) {
- spin_unlock_irqrestore(&dev->vblank_time_lock, irqflags);
- return false;
- }
+ if (!dev->vblank_enabled[crtc])
+ goto unlock_ret;
/* Fetch corresponding timestamp for this vblank interval from
* driver and store it in proper slot of timestamp ringbuffer.
@@ -1340,7 +1343,12 @@ bool drm_handle_vblank(struct drm_device *dev, int crtc)
DRM_WAKEUP(&dev->vbl_queue[crtc]);
drm_handle_vblank_events(dev, crtc);
- spin_unlock_irqrestore(&dev->vblank_time_lock, irqflags);
- return true;
+ ret = true;
+
+unlock_ret:
+ spin_unlock(&dev->vblank_time_lock);
+ spin_unlock_irqrestore(&dev->event_lock, irqflags);
+
+ return ret;
}
EXPORT_SYMBOL(drm_handle_vblank);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 2/2] drm/i915: lock event_lock for drm_vblank_off()
2012-10-31 22:03 [PATCH 1/2] drm: fix order of event_lock wrt. vblank_time_clock Imre Deak
@ 2012-10-31 22:03 ` Imre Deak
2012-10-31 22:46 ` Daniel Vetter
2012-11-01 9:22 ` [PATCH 1/2] drm: fix order of event_lock wrt. vblank_time_clock Imre Deak
` (5 subsequent siblings)
6 siblings, 1 reply; 15+ messages in thread
From: Imre Deak @ 2012-10-31 22:03 UTC (permalink / raw)
To: intel-gfx, dri-devel
drm_vblank_off() requires callers to hold the event_lock.
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
drivers/gpu/drm/i915/intel_display.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index b453901..56f1119 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3413,6 +3413,7 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
struct intel_encoder *encoder;
int pipe = intel_crtc->pipe;
int plane = intel_crtc->plane;
+ unsigned long flags;
u32 reg, temp;
@@ -3423,7 +3424,11 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
encoder->disable(encoder);
intel_crtc_wait_for_pending_flips(crtc);
+
+ spin_lock_irqsave(&dev->event_lock, flags);
drm_vblank_off(dev, pipe);
+ spin_unlock_irqrestore(&dev->event_lock, flags);
+
intel_crtc_update_cursor(crtc, false);
intel_disable_plane(dev_priv, plane, pipe);
@@ -3495,6 +3500,7 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
int plane = intel_crtc->plane;
enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
bool is_pch_port;
+ unsigned long flags;
if (!intel_crtc->active)
return;
@@ -3505,7 +3511,11 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
encoder->disable(encoder);
intel_crtc_wait_for_pending_flips(crtc);
+
+ spin_lock_irqsave(&dev->event_lock, flags);
drm_vblank_off(dev, pipe);
+ spin_unlock_irqrestore(&dev->event_lock, flags);
+
intel_crtc_update_cursor(crtc, false);
intel_disable_plane(dev_priv, plane, pipe);
@@ -3617,6 +3627,7 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
struct intel_encoder *encoder;
int pipe = intel_crtc->pipe;
int plane = intel_crtc->plane;
+ unsigned long flags;
if (!intel_crtc->active)
@@ -3627,7 +3638,11 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
/* Give the overlay scaler a chance to disable if it's on this pipe */
intel_crtc_wait_for_pending_flips(crtc);
+
+ spin_lock_irqsave(&dev->event_lock, flags);
drm_vblank_off(dev, pipe);
+ spin_unlock_irqrestore(&dev->event_lock, flags);
+
intel_crtc_dpms_overlay(intel_crtc, false);
intel_crtc_update_cursor(crtc, false);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH 2/2] drm/i915: lock event_lock for drm_vblank_off()
2012-10-31 22:03 ` [PATCH 2/2] drm/i915: lock event_lock for drm_vblank_off() Imre Deak
@ 2012-10-31 22:46 ` Daniel Vetter
2012-11-01 9:34 ` Imre Deak
0 siblings, 1 reply; 15+ messages in thread
From: Daniel Vetter @ 2012-10-31 22:46 UTC (permalink / raw)
To: Imre Deak; +Cc: intel-gfx, dri-devel
On Thu, Nov 01, 2012 at 12:03:39AM +0200, Imre Deak wrote:
> drm_vblank_off() requires callers to hold the event_lock.
>
> Signed-off-by: Imre Deak <imre.deak@intel.com>
Hm, do we put this code through its paces already in flip_test by
scheduling a vblank wait in the future (a second or so), and then
disabling the display?
-Daniel
> ---
> drivers/gpu/drm/i915/intel_display.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index b453901..56f1119 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -3413,6 +3413,7 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
> struct intel_encoder *encoder;
> int pipe = intel_crtc->pipe;
> int plane = intel_crtc->plane;
> + unsigned long flags;
> u32 reg, temp;
>
>
> @@ -3423,7 +3424,11 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
> encoder->disable(encoder);
>
> intel_crtc_wait_for_pending_flips(crtc);
> +
> + spin_lock_irqsave(&dev->event_lock, flags);
> drm_vblank_off(dev, pipe);
> + spin_unlock_irqrestore(&dev->event_lock, flags);
> +
> intel_crtc_update_cursor(crtc, false);
>
> intel_disable_plane(dev_priv, plane, pipe);
> @@ -3495,6 +3500,7 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
> int plane = intel_crtc->plane;
> enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
> bool is_pch_port;
> + unsigned long flags;
>
> if (!intel_crtc->active)
> return;
> @@ -3505,7 +3511,11 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
> encoder->disable(encoder);
>
> intel_crtc_wait_for_pending_flips(crtc);
> +
> + spin_lock_irqsave(&dev->event_lock, flags);
> drm_vblank_off(dev, pipe);
> + spin_unlock_irqrestore(&dev->event_lock, flags);
> +
> intel_crtc_update_cursor(crtc, false);
>
> intel_disable_plane(dev_priv, plane, pipe);
> @@ -3617,6 +3627,7 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
> struct intel_encoder *encoder;
> int pipe = intel_crtc->pipe;
> int plane = intel_crtc->plane;
> + unsigned long flags;
>
>
> if (!intel_crtc->active)
> @@ -3627,7 +3638,11 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
>
> /* Give the overlay scaler a chance to disable if it's on this pipe */
> intel_crtc_wait_for_pending_flips(crtc);
> +
> + spin_lock_irqsave(&dev->event_lock, flags);
> drm_vblank_off(dev, pipe);
> + spin_unlock_irqrestore(&dev->event_lock, flags);
> +
> intel_crtc_dpms_overlay(intel_crtc, false);
> intel_crtc_update_cursor(crtc, false);
>
> --
> 1.7.9.5
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 1/2] drm: fix order of event_lock wrt. vblank_time_clock
2012-10-31 22:03 [PATCH 1/2] drm: fix order of event_lock wrt. vblank_time_clock Imre Deak
2012-10-31 22:03 ` [PATCH 2/2] drm/i915: lock event_lock for drm_vblank_off() Imre Deak
@ 2012-11-01 9:22 ` Imre Deak
2012-11-02 11:30 ` [PATCH v2 0/4] drm/exynos, intel: fix locking for flip/vbl event list Imre Deak
` (4 subsequent siblings)
6 siblings, 0 replies; 15+ messages in thread
From: Imre Deak @ 2012-11-01 9:22 UTC (permalink / raw)
To: intel-gfx; +Cc: dri-devel
On Thu, 2012-11-01 at 00:03 +0200, Imre Deak wrote:
> drm_vblank_off() requires callers to hold the event_lock, while itself
> locking vbl_time and vblank_time_lock. This defines a dependency chain
> that conflicts with the one in drm_handle_vblank() where we first lock
> vblank_time_lock and then the event_lock. Fix this by reversing the
> locking order in drm_handle_vblank().
>
> This should've triggered a lockdep warning in the exynos driver, the
> rest of the drivers were ok, since they are not using drm_vblank_off(),
> or as in the case of the intel driver were not holding the event_lock
> when calling drm_vblank_off(). This latter issue is addressed in the
> next patch.
I just realized this is better solved by fixing the lock order in the
exynos driver. That way we can take the event_lock close to what it
really locks. Fixing things there will also leave the other drivers
unaffected.
I'll follow up with v2 doing this.
--Imre
>
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
> drivers/gpu/drm/drm_irq.c | 32 ++++++++++++++++++++------------
> 1 file changed, 20 insertions(+), 12 deletions(-)
>
> Tested with i915, the rest of the drivers should be checked with
> lockdep enabled.
>
> diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
> index 3a3d0ce..2193d4a 100644
> --- a/drivers/gpu/drm/drm_irq.c
> +++ b/drivers/gpu/drm/drm_irq.c
> @@ -1236,17 +1236,21 @@ done:
> return ret;
> }
>
> +/**
> + * drm_handle_vblank_events - send pending vblank events
> + * @dev: DRM device
> + * @crtc: crtc where the vblank(s) happened
> + *
> + * Must be called with @dev->event_lock held.
> + */
> static void drm_handle_vblank_events(struct drm_device *dev, int crtc)
> {
> struct drm_pending_vblank_event *e, *t;
> struct timeval now;
> - unsigned long flags;
> unsigned int seq;
>
> seq = drm_vblank_count_and_time(dev, crtc, &now);
>
> - spin_lock_irqsave(&dev->event_lock, flags);
> -
> list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
> if (e->pipe != crtc)
> continue;
> @@ -1266,8 +1270,6 @@ static void drm_handle_vblank_events(struct drm_device *dev, int crtc)
> e->event.sequence);
> }
>
> - spin_unlock_irqrestore(&dev->event_lock, flags);
> -
> trace_drm_vblank_event(crtc, seq);
> }
>
> @@ -1285,21 +1287,22 @@ bool drm_handle_vblank(struct drm_device *dev, int crtc)
> s64 diff_ns;
> struct timeval tvblank;
> unsigned long irqflags;
> + bool ret = false;
>
> if (!dev->num_crtcs)
> return false;
>
> + spin_lock_irqsave(&dev->event_lock, irqflags);
> +
> /* Need timestamp lock to prevent concurrent execution with
> * vblank enable/disable, as this would cause inconsistent
> * or corrupted timestamps and vblank counts.
> */
> - spin_lock_irqsave(&dev->vblank_time_lock, irqflags);
> + spin_lock(&dev->vblank_time_lock);
>
> /* Vblank irq handling disabled. Nothing to do. */
> - if (!dev->vblank_enabled[crtc]) {
> - spin_unlock_irqrestore(&dev->vblank_time_lock, irqflags);
> - return false;
> - }
> + if (!dev->vblank_enabled[crtc])
> + goto unlock_ret;
>
> /* Fetch corresponding timestamp for this vblank interval from
> * driver and store it in proper slot of timestamp ringbuffer.
> @@ -1340,7 +1343,12 @@ bool drm_handle_vblank(struct drm_device *dev, int crtc)
> DRM_WAKEUP(&dev->vbl_queue[crtc]);
> drm_handle_vblank_events(dev, crtc);
>
> - spin_unlock_irqrestore(&dev->vblank_time_lock, irqflags);
> - return true;
> + ret = true;
> +
> +unlock_ret:
> + spin_unlock(&dev->vblank_time_lock);
> + spin_unlock_irqrestore(&dev->event_lock, irqflags);
> +
> + return ret;
> }
> EXPORT_SYMBOL(drm_handle_vblank);
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/2] drm/i915: lock event_lock for drm_vblank_off()
2012-10-31 22:46 ` Daniel Vetter
@ 2012-11-01 9:34 ` Imre Deak
0 siblings, 0 replies; 15+ messages in thread
From: Imre Deak @ 2012-11-01 9:34 UTC (permalink / raw)
To: Daniel Vetter; +Cc: intel-gfx, dri-devel
On Wed, 2012-10-31 at 23:46 +0100, Daniel Vetter wrote:
> On Thu, Nov 01, 2012 at 12:03:39AM +0200, Imre Deak wrote:
> > drm_vblank_off() requires callers to hold the event_lock.
> >
> > Signed-off-by: Imre Deak <imre.deak@intel.com>
>
> Hm, do we put this code through its paces already in flip_test by
> scheduling a vblank wait in the future (a second or so), and then
> disabling the display?
There isn't such a test case yet, but this bug is triggered with what we
have already, the 'wait-for-vblank + dpms off' test. But it might make
sense to delay the vblank as you say, in case disabling takes a long
time and the vblank arrives before we get to drm_vblank_off(). I can add
something for that.
--Imre
> -Daniel
> > ---
> > drivers/gpu/drm/i915/intel_display.c | 15 +++++++++++++++
> > 1 file changed, 15 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > index b453901..56f1119 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -3413,6 +3413,7 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
> > struct intel_encoder *encoder;
> > int pipe = intel_crtc->pipe;
> > int plane = intel_crtc->plane;
> > + unsigned long flags;
> > u32 reg, temp;
> >
> >
> > @@ -3423,7 +3424,11 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
> > encoder->disable(encoder);
> >
> > intel_crtc_wait_for_pending_flips(crtc);
> > +
> > + spin_lock_irqsave(&dev->event_lock, flags);
> > drm_vblank_off(dev, pipe);
> > + spin_unlock_irqrestore(&dev->event_lock, flags);
> > +
> > intel_crtc_update_cursor(crtc, false);
> >
> > intel_disable_plane(dev_priv, plane, pipe);
> > @@ -3495,6 +3500,7 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
> > int plane = intel_crtc->plane;
> > enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
> > bool is_pch_port;
> > + unsigned long flags;
> >
> > if (!intel_crtc->active)
> > return;
> > @@ -3505,7 +3511,11 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
> > encoder->disable(encoder);
> >
> > intel_crtc_wait_for_pending_flips(crtc);
> > +
> > + spin_lock_irqsave(&dev->event_lock, flags);
> > drm_vblank_off(dev, pipe);
> > + spin_unlock_irqrestore(&dev->event_lock, flags);
> > +
> > intel_crtc_update_cursor(crtc, false);
> >
> > intel_disable_plane(dev_priv, plane, pipe);
> > @@ -3617,6 +3627,7 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
> > struct intel_encoder *encoder;
> > int pipe = intel_crtc->pipe;
> > int plane = intel_crtc->plane;
> > + unsigned long flags;
> >
> >
> > if (!intel_crtc->active)
> > @@ -3627,7 +3638,11 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
> >
> > /* Give the overlay scaler a chance to disable if it's on this pipe */
> > intel_crtc_wait_for_pending_flips(crtc);
> > +
> > + spin_lock_irqsave(&dev->event_lock, flags);
> > drm_vblank_off(dev, pipe);
> > + spin_unlock_irqrestore(&dev->event_lock, flags);
> > +
> > intel_crtc_dpms_overlay(intel_crtc, false);
> > intel_crtc_update_cursor(crtc, false);
> >
> > --
> > 1.7.9.5
> >
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 0/4] drm/exynos, intel: fix locking for flip/vbl event list
2012-10-31 22:03 [PATCH 1/2] drm: fix order of event_lock wrt. vblank_time_clock Imre Deak
2012-10-31 22:03 ` [PATCH 2/2] drm/i915: lock event_lock for drm_vblank_off() Imre Deak
2012-11-01 9:22 ` [PATCH 1/2] drm: fix order of event_lock wrt. vblank_time_clock Imre Deak
@ 2012-11-02 11:30 ` Imre Deak
2012-11-07 9:31 ` Inki Dae
2012-11-02 11:30 ` [PATCH v2 1/4] drm/exynos: hold event_lock while accessing pageflip_event_list Imre Deak
` (3 subsequent siblings)
6 siblings, 1 reply; 15+ messages in thread
From: Imre Deak @ 2012-11-02 11:30 UTC (permalink / raw)
To: Inki Dae, Rob Clark, Daniel Vetter; +Cc: intel-gfx, dri-devel
The patchset adds the missing event_lock when accessing the
vblank_event_list in drm_vblank_off() and as preparation for this
also fixes a few other issues in the exynos driver.
This is also a dependency for Rob Clark's drm_send_vblank_event()
rework as that would trigger a warning for the unhold event_lock without
this changeset.
The exynos changes are only compile tested, the rest is tested on an
Intel IVB machine on top of drm-intel-nightly + drm_send_vblank_event()
rework, with i-g-t/flip_test.
In v2:
- Instead of fixing the event_lock vs. vblank_time_lock lockdep issue in
drm_handle_vblank(), fix it in the exynos driver. This looks like the
more logical thing to do and this way we also have a smaller impact on
the rest of DRM code.
Imre Deak (4):
drm/exynos: hold event_lock while accessing pageflip_event_list
drm/exynos: call drm_vblank_put for each queued flip event
drm/exynos: fix lockdep for event_lock wrt. vbl_time_lock
drm: hold event_lock while accessing vblank_event_list
drivers/gpu/drm/drm_irq.c | 3 +++
drivers/gpu/drm/exynos/exynos_drm_crtc.c | 5 +++++
drivers/gpu/drm/exynos/exynos_drm_fimd.c | 20 +-------------------
drivers/gpu/drm/exynos/exynos_drm_vidi.c | 20 +-------------------
drivers/gpu/drm/exynos/exynos_mixer.c | 11 +----------
5 files changed, 11 insertions(+), 48 deletions(-)
--
1.7.9.5
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 1/4] drm/exynos: hold event_lock while accessing pageflip_event_list
2012-10-31 22:03 [PATCH 1/2] drm: fix order of event_lock wrt. vblank_time_clock Imre Deak
` (2 preceding siblings ...)
2012-11-02 11:30 ` [PATCH v2 0/4] drm/exynos, intel: fix locking for flip/vbl event list Imre Deak
@ 2012-11-02 11:30 ` Imre Deak
2012-11-02 11:30 ` [PATCH v2 2/4] drm/exynos: call drm_vblank_put for each queued flip event Imre Deak
` (2 subsequent siblings)
6 siblings, 0 replies; 15+ messages in thread
From: Imre Deak @ 2012-11-02 11:30 UTC (permalink / raw)
To: Inki Dae, Rob Clark, Daniel Vetter; +Cc: intel-gfx, dri-devel
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
drivers/gpu/drm/exynos/exynos_drm_crtc.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
index fce245f..2efa4b0 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
@@ -236,16 +236,21 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc *crtc,
goto out;
}
+ spin_lock_irq(&dev->event_lock);
list_add_tail(&event->base.link,
&dev_priv->pageflip_event_list);
+ spin_unlock_irq(&dev->event_lock);
crtc->fb = fb;
ret = exynos_drm_crtc_mode_set_base(crtc, crtc->x, crtc->y,
NULL);
if (ret) {
crtc->fb = old_fb;
+
+ spin_lock_irq(&dev->event_lock);
drm_vblank_put(dev, exynos_crtc->pipe);
list_del(&event->base.link);
+ spin_unlock_irq(&dev->event_lock);
goto out;
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 2/4] drm/exynos: call drm_vblank_put for each queued flip event
2012-10-31 22:03 [PATCH 1/2] drm: fix order of event_lock wrt. vblank_time_clock Imre Deak
` (3 preceding siblings ...)
2012-11-02 11:30 ` [PATCH v2 1/4] drm/exynos: hold event_lock while accessing pageflip_event_list Imre Deak
@ 2012-11-02 11:30 ` Imre Deak
2012-11-02 11:30 ` [PATCH v2 3/4] drm/exynos: fix lockdep for event_lock wrt. vbl_time_lock Imre Deak
2012-11-02 11:30 ` [PATCH v2 4/4] drm: hold event_lock while accessing vblank_event_list Imre Deak
6 siblings, 0 replies; 15+ messages in thread
From: Imre Deak @ 2012-11-02 11:30 UTC (permalink / raw)
To: Inki Dae, Rob Clark, Daniel Vetter; +Cc: intel-gfx, dri-devel
It's guaranteed that for each event on pageflip_event_list we have
called drm_vblank_get() - see exynos_drm_crtc_page_flip() - so checking
for this is redundant.
Also we need to call drm_vblank_put() for each event on the list, not
only once, otherwise we'd leak vblank references if there are multiple
events on the list.
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
drivers/gpu/drm/exynos/exynos_drm_fimd.c | 8 +-------
drivers/gpu/drm/exynos/exynos_drm_vidi.c | 8 +-------
drivers/gpu/drm/exynos/exynos_mixer.c | 11 +----------
3 files changed, 3 insertions(+), 24 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index 130a2b5..e69b7c4 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -642,17 +642,11 @@ static void fimd_finish_pageflip(struct drm_device *drm_dev, int crtc)
list_move_tail(&e->base.link, &e->base.file_priv->event_list);
wake_up_interruptible(&e->base.file_priv->event_wait);
+ drm_vblank_put(drm_dev, crtc);
}
if (is_checked) {
/*
- * call drm_vblank_put only in case that drm_vblank_get was
- * called.
- */
- if (atomic_read(&drm_dev->vblank_refcount[crtc]) > 0)
- drm_vblank_put(drm_dev, crtc);
-
- /*
* don't off vblank if vblank_disable_allowed is 1,
* because vblank would be off by timer handler.
*/
diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
index e4b8a8f..e26d455 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
@@ -401,17 +401,11 @@ static void vidi_finish_pageflip(struct drm_device *drm_dev, int crtc)
list_move_tail(&e->base.link, &e->base.file_priv->event_list);
wake_up_interruptible(&e->base.file_priv->event_wait);
+ drm_vblank_put(drm_dev, crtc);
}
if (is_checked) {
/*
- * call drm_vblank_put only in case that drm_vblank_get was
- * called.
- */
- if (atomic_read(&drm_dev->vblank_refcount[crtc]) > 0)
- drm_vblank_put(drm_dev, crtc);
-
- /*
* don't off vblank if vblank_disable_allowed is 1,
* because vblank would be off by timer handler.
*/
diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c
index 614b2e9..5720e82 100644
--- a/drivers/gpu/drm/exynos/exynos_mixer.c
+++ b/drivers/gpu/drm/exynos/exynos_mixer.c
@@ -884,7 +884,6 @@ static void mixer_finish_pageflip(struct drm_device *drm_dev, int crtc)
struct drm_pending_vblank_event *e, *t;
struct timeval now;
unsigned long flags;
- bool is_checked = false;
spin_lock_irqsave(&drm_dev->event_lock, flags);
@@ -894,7 +893,6 @@ static void mixer_finish_pageflip(struct drm_device *drm_dev, int crtc)
if (crtc != e->pipe)
continue;
- is_checked = true;
do_gettimeofday(&now);
e->event.sequence = 0;
e->event.tv_sec = now.tv_sec;
@@ -902,16 +900,9 @@ static void mixer_finish_pageflip(struct drm_device *drm_dev, int crtc)
list_move_tail(&e->base.link, &e->base.file_priv->event_list);
wake_up_interruptible(&e->base.file_priv->event_wait);
+ drm_vblank_put(drm_dev, crtc);
}
- if (is_checked)
- /*
- * call drm_vblank_put only in case that drm_vblank_get was
- * called.
- */
- if (atomic_read(&drm_dev->vblank_refcount[crtc]) > 0)
- drm_vblank_put(drm_dev, crtc);
-
spin_unlock_irqrestore(&drm_dev->event_lock, flags);
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 3/4] drm/exynos: fix lockdep for event_lock wrt. vbl_time_lock
2012-10-31 22:03 [PATCH 1/2] drm: fix order of event_lock wrt. vblank_time_clock Imre Deak
` (4 preceding siblings ...)
2012-11-02 11:30 ` [PATCH v2 2/4] drm/exynos: call drm_vblank_put for each queued flip event Imre Deak
@ 2012-11-02 11:30 ` Imre Deak
2012-11-02 11:30 ` [PATCH v2 4/4] drm: hold event_lock while accessing vblank_event_list Imre Deak
6 siblings, 0 replies; 15+ messages in thread
From: Imre Deak @ 2012-11-02 11:30 UTC (permalink / raw)
To: Inki Dae, Rob Clark, Daniel Vetter; +Cc: intel-gfx, dri-devel
Currently the exynos driver calls drm_vblank_off() with the event_lock
held, while drm_vblank_off() will lock vbl_time and vblank_time_lock.
This lock dependency chain conflicts with the one in drm_handle_vblank()
where we first lock vblank_time_lock and then the event_lock.
Fix this by removing the above drm_vblank_off() calls which are in fact
never executed: drm_dev->vblank_disable_allowed is only ever non-zero
during driver init, until it's set in {fimd,vidi}_subdrv_probe. Both the
driver init and open code is protected by drm_global_mutex, so the
earliest page flip ioctl can happen only after vblank_disable_allowed is
set to 1. Thus {fimd,vidi}_finish_pageflip - with pending flip events -
will always get called with vblank_disable_allowed being 1.
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
drivers/gpu/drm/exynos/exynos_drm_fimd.c | 12 ------------
drivers/gpu/drm/exynos/exynos_drm_vidi.c | 12 ------------
2 files changed, 24 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index e69b7c4..2eb131c 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -623,7 +623,6 @@ static void fimd_finish_pageflip(struct drm_device *drm_dev, int crtc)
struct drm_pending_vblank_event *e, *t;
struct timeval now;
unsigned long flags;
- bool is_checked = false;
spin_lock_irqsave(&drm_dev->event_lock, flags);
@@ -633,8 +632,6 @@ static void fimd_finish_pageflip(struct drm_device *drm_dev, int crtc)
if (crtc != e->pipe)
continue;
- is_checked = true;
-
do_gettimeofday(&now);
e->event.sequence = 0;
e->event.tv_sec = now.tv_sec;
@@ -645,15 +642,6 @@ static void fimd_finish_pageflip(struct drm_device *drm_dev, int crtc)
drm_vblank_put(drm_dev, crtc);
}
- if (is_checked) {
- /*
- * don't off vblank if vblank_disable_allowed is 1,
- * because vblank would be off by timer handler.
- */
- if (!drm_dev->vblank_disable_allowed)
- drm_vblank_off(drm_dev, crtc);
- }
-
spin_unlock_irqrestore(&drm_dev->event_lock, flags);
}
diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
index e26d455..4b0c16b 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
@@ -382,7 +382,6 @@ static void vidi_finish_pageflip(struct drm_device *drm_dev, int crtc)
struct drm_pending_vblank_event *e, *t;
struct timeval now;
unsigned long flags;
- bool is_checked = false;
spin_lock_irqsave(&drm_dev->event_lock, flags);
@@ -392,8 +391,6 @@ static void vidi_finish_pageflip(struct drm_device *drm_dev, int crtc)
if (crtc != e->pipe)
continue;
- is_checked = true;
-
do_gettimeofday(&now);
e->event.sequence = 0;
e->event.tv_sec = now.tv_sec;
@@ -404,15 +401,6 @@ static void vidi_finish_pageflip(struct drm_device *drm_dev, int crtc)
drm_vblank_put(drm_dev, crtc);
}
- if (is_checked) {
- /*
- * don't off vblank if vblank_disable_allowed is 1,
- * because vblank would be off by timer handler.
- */
- if (!drm_dev->vblank_disable_allowed)
- drm_vblank_off(drm_dev, crtc);
- }
-
spin_unlock_irqrestore(&drm_dev->event_lock, flags);
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 4/4] drm: hold event_lock while accessing vblank_event_list
2012-10-31 22:03 [PATCH 1/2] drm: fix order of event_lock wrt. vblank_time_clock Imre Deak
` (5 preceding siblings ...)
2012-11-02 11:30 ` [PATCH v2 3/4] drm/exynos: fix lockdep for event_lock wrt. vbl_time_lock Imre Deak
@ 2012-11-02 11:30 ` Imre Deak
6 siblings, 0 replies; 15+ messages in thread
From: Imre Deak @ 2012-11-02 11:30 UTC (permalink / raw)
To: Inki Dae, Rob Clark, Daniel Vetter; +Cc: intel-gfx, dri-devel
Currently the only users of drm_vblank_off() are i915 and gma500,
neither of which holds the event_lock when calling this function.
Fix this by holding the event_lock while traversing the list.
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
drivers/gpu/drm/drm_irq.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index 3a3d0ce..c6cd558 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -949,6 +949,8 @@ void drm_vblank_off(struct drm_device *dev, int crtc)
/* Send any queued vblank events, lest the natives grow disquiet */
seq = drm_vblank_count_and_time(dev, crtc, &now);
+
+ spin_lock(&dev->event_lock);
list_for_each_entry_safe(e, t, &dev->vblank_event_list, base.link) {
if (e->pipe != crtc)
continue;
@@ -965,6 +967,7 @@ void drm_vblank_off(struct drm_device *dev, int crtc)
trace_drm_vblank_event_delivered(e->base.pid, e->pipe,
e->event.sequence);
}
+ spin_unlock(&dev->event_lock);
spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 0/4] drm/exynos, intel: fix locking for flip/vbl event list
2012-11-02 11:30 ` [PATCH v2 0/4] drm/exynos, intel: fix locking for flip/vbl event list Imre Deak
@ 2012-11-07 9:31 ` Inki Dae
2012-11-07 10:43 ` [PATCH v2 0/4] drm/exynos,intel: " Imre Deak
0 siblings, 1 reply; 15+ messages in thread
From: Inki Dae @ 2012-11-07 9:31 UTC (permalink / raw)
To: Imre Deak; +Cc: Daniel Vetter, intel-gfx, dri-devel, Rob Clark
[-- Attachment #1.1: Type: text/plain, Size: 1834 bytes --]
2012/11/2 Imre Deak <imre.deak@intel.com>
> The patchset adds the missing event_lock when accessing the
> vblank_event_list in drm_vblank_off() and as preparation for this
> also fixes a few other issues in the exynos driver.
>
> This is also a dependency for Rob Clark's drm_send_vblank_event()
> rework as that would trigger a warning for the unhold event_lock without
> this changeset.
>
> The exynos changes are only compile tested, the rest is tested on an
> Intel IVB machine on top of drm-intel-nightly + drm_send_vblank_event()
> rework, with i-g-t/flip_test.
>
>
Hi Imre,
Works fine. But we should wait for Rob's patch set to be merged to -next,
and this may be rebased on top of latest Rob's patch set again.
Thanks,
Inki Dae
> In v2:
> - Instead of fixing the event_lock vs. vblank_time_lock lockdep issue in
> drm_handle_vblank(), fix it in the exynos driver. This looks like the
> more logical thing to do and this way we also have a smaller impact on
> the rest of DRM code.
>
> Imre Deak (4):
> drm/exynos: hold event_lock while accessing pageflip_event_list
> drm/exynos: call drm_vblank_put for each queued flip event
> drm/exynos: fix lockdep for event_lock wrt. vbl_time_lock
> drm: hold event_lock while accessing vblank_event_list
>
> drivers/gpu/drm/drm_irq.c | 3 +++
> drivers/gpu/drm/exynos/exynos_drm_crtc.c | 5 +++++
> drivers/gpu/drm/exynos/exynos_drm_fimd.c | 20 +-------------------
> drivers/gpu/drm/exynos/exynos_drm_vidi.c | 20 +-------------------
> drivers/gpu/drm/exynos/exynos_mixer.c | 11 +----------
> 5 files changed, 11 insertions(+), 48 deletions(-)
>
> --
> 1.7.9.5
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
[-- Attachment #1.2: Type: text/html, Size: 2558 bytes --]
[-- Attachment #2: Type: text/plain, Size: 159 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 0/4] drm/exynos,intel: fix locking for flip/vbl event list
2012-11-07 9:31 ` Inki Dae
@ 2012-11-07 10:43 ` Imre Deak
2012-11-07 16:25 ` [PATCH v2 0/4] drm/exynos, intel: " Inki Dae
0 siblings, 1 reply; 15+ messages in thread
From: Imre Deak @ 2012-11-07 10:43 UTC (permalink / raw)
To: Inki Dae; +Cc: Daniel Vetter, intel-gfx, dri-devel, Rob Clark
On Wed, 2012-11-07 at 18:31 +0900, Inki Dae wrote:
> 2012/11/2 Imre Deak <imre.deak@intel.com>
> The patchset adds the missing event_lock when accessing the
> vblank_event_list in drm_vblank_off() and as preparation for
> this
> also fixes a few other issues in the exynos driver.
> This is also a dependency for Rob Clark's
> drm_send_vblank_event()
> rework as that would trigger a warning for the unhold
> event_lock without
> this changeset.
> The exynos changes are only compile tested, the rest is tested
> on an
> Intel IVB machine on top of drm-intel-nightly +
> drm_send_vblank_event()
> rework, with i-g-t/flip_test.
> Hi Imre,
> Works fine. But we should wait for Rob's patch set to be merged to
> -next, and this may be rebased on top of latest Rob's patch set again.
Ok, thanks for checking this. I assume then that this patchset will get
merged through your tree.
I think Rob's patchset depends on this, so ideally this should go first.
Otherwise the i915 driver would trigger the WARN in his patchset due to
the unheld event_lock.
--Imre
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 0/4] drm/exynos, intel: fix locking for flip/vbl event list
2012-11-07 10:43 ` [PATCH v2 0/4] drm/exynos,intel: " Imre Deak
@ 2012-11-07 16:25 ` Inki Dae
2012-11-07 16:28 ` Rob Clark
0 siblings, 1 reply; 15+ messages in thread
From: Inki Dae @ 2012-11-07 16:25 UTC (permalink / raw)
To: Imre Deak; +Cc: Daniel Vetter, intel-gfx, dri-devel, Rob Clark
[-- Attachment #1.1: Type: text/plain, Size: 1694 bytes --]
2012/11/7 Imre Deak <imre.deak@intel.com>
> On Wed, 2012-11-07 at 18:31 +0900, Inki Dae wrote:
> > 2012/11/2 Imre Deak <imre.deak@intel.com>
> > The patchset adds the missing event_lock when accessing the
> > vblank_event_list in drm_vblank_off() and as preparation for
> > this
> > also fixes a few other issues in the exynos driver.
> > This is also a dependency for Rob Clark's
> > drm_send_vblank_event()
> > rework as that would trigger a warning for the unhold
> > event_lock without
> > this changeset.
> > The exynos changes are only compile tested, the rest is tested
> > on an
> > Intel IVB machine on top of drm-intel-nightly +
> > drm_send_vblank_event()
> > rework, with i-g-t/flip_test.
> > Hi Imre,
> > Works fine. But we should wait for Rob's patch set to be merged to
> > -next, and this may be rebased on top of latest Rob's patch set again.
>
> Ok, thanks for checking this. I assume then that this patchset will get
> merged through your tree.
>
> I think Rob's patchset depends on this, so ideally this should go first.
> Otherwise the i915 driver would trigger the WARN in his patchset due to
> the unheld event_lock.
>
Ok, but I merge it first, shouldn't Rob's patch set be rebased? Anyway this
is minor issue so I could resolve it. And it seems like that your patch set
has no dependency of Rob's. I mean that your patch set worked
fine without Rob's.
Thanks,
Inki Dae
>
> --Imre
>
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
[-- Attachment #1.2: Type: text/html, Size: 2749 bytes --]
[-- Attachment #2: Type: text/plain, Size: 159 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 0/4] drm/exynos, intel: fix locking for flip/vbl event list
2012-11-07 16:25 ` [PATCH v2 0/4] drm/exynos, intel: " Inki Dae
@ 2012-11-07 16:28 ` Rob Clark
2012-11-07 16:42 ` Inki Dae
0 siblings, 1 reply; 15+ messages in thread
From: Rob Clark @ 2012-11-07 16:28 UTC (permalink / raw)
To: Inki Dae; +Cc: Daniel Vetter, intel-gfx, dri-devel
On Wed, Nov 7, 2012 at 10:25 AM, Inki Dae <inki.dae@samsung.com> wrote:
>
>
> 2012/11/7 Imre Deak <imre.deak@intel.com>
>>
>> On Wed, 2012-11-07 at 18:31 +0900, Inki Dae wrote:
>> > 2012/11/2 Imre Deak <imre.deak@intel.com>
>> > The patchset adds the missing event_lock when accessing the
>> > vblank_event_list in drm_vblank_off() and as preparation for
>> > this
>> > also fixes a few other issues in the exynos driver.
>> > This is also a dependency for Rob Clark's
>> > drm_send_vblank_event()
>> > rework as that would trigger a warning for the unhold
>> > event_lock without
>> > this changeset.
>> > The exynos changes are only compile tested, the rest is tested
>> > on an
>> > Intel IVB machine on top of drm-intel-nightly +
>> > drm_send_vblank_event()
>> > rework, with i-g-t/flip_test.
>> > Hi Imre,
>> > Works fine. But we should wait for Rob's patch set to be merged to
>> > -next, and this may be rebased on top of latest Rob's patch set again.
>>
>> Ok, thanks for checking this. I assume then that this patchset will get
>> merged through your tree.
>>
>> I think Rob's patchset depends on this, so ideally this should go first.
>> Otherwise the i915 driver would trigger the WARN in his patchset due to
>> the unheld event_lock.
>
>
> Ok, but I merge it first, shouldn't Rob's patch set be rebased? Anyway this
> is minor issue so I could resolve it. And it seems like that your patch set
> has no dependency of Rob's. I mean that your patch set worked fine without
> Rob's.
I think there should be no hard dependency on my patch set.. the only
connection is that my patchset without this patch will start showing
the WARN_ON() traces
BR,
-R
> Thanks,
> Inki Dae
>
>>
>>
>> --Imre
>>
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
>
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 0/4] drm/exynos, intel: fix locking for flip/vbl event list
2012-11-07 16:28 ` Rob Clark
@ 2012-11-07 16:42 ` Inki Dae
0 siblings, 0 replies; 15+ messages in thread
From: Inki Dae @ 2012-11-07 16:42 UTC (permalink / raw)
To: Rob Clark; +Cc: Daniel Vetter, intel-gfx, dri-devel
[-- Attachment #1.1: Type: text/plain, Size: 2559 bytes --]
2012/11/8 Rob Clark <rob.clark@linaro.org>
> On Wed, Nov 7, 2012 at 10:25 AM, Inki Dae <inki.dae@samsung.com> wrote:
> >
> >
> > 2012/11/7 Imre Deak <imre.deak@intel.com>
> >>
> >> On Wed, 2012-11-07 at 18:31 +0900, Inki Dae wrote:
> >> > 2012/11/2 Imre Deak <imre.deak@intel.com>
> >> > The patchset adds the missing event_lock when accessing the
> >> > vblank_event_list in drm_vblank_off() and as preparation for
> >> > this
> >> > also fixes a few other issues in the exynos driver.
> >> > This is also a dependency for Rob Clark's
> >> > drm_send_vblank_event()
> >> > rework as that would trigger a warning for the unhold
> >> > event_lock without
> >> > this changeset.
> >> > The exynos changes are only compile tested, the rest is tested
> >> > on an
> >> > Intel IVB machine on top of drm-intel-nightly +
> >> > drm_send_vblank_event()
> >> > rework, with i-g-t/flip_test.
> >> > Hi Imre,
> >> > Works fine. But we should wait for Rob's patch set to be merged to
> >> > -next, and this may be rebased on top of latest Rob's patch set again.
> >>
> >> Ok, thanks for checking this. I assume then that this patchset will get
> >> merged through your tree.
> >>
> >> I think Rob's patchset depends on this, so ideally this should go first.
> >> Otherwise the i915 driver would trigger the WARN in his patchset due to
> >> the unheld event_lock.
> >
> >
> > Ok, but I merge it first, shouldn't Rob's patch set be rebased? Anyway
> this
> > is minor issue so I could resolve it. And it seems like that your patch
> set
> > has no dependency of Rob's. I mean that your patch set worked fine
> without
> > Rob's.
>
> I think there should be no hard dependency on my patch set.. the only
> connection is that my patchset without this patch will start showing
> the WARN_ON() traces
>
>
Right, My concern was just merge conflict.
> BR,
> -R
>
> > Thanks,
> > Inki Dae
> >
> >>
> >>
> >> --Imre
> >>
> >>
> >> _______________________________________________
> >> dri-devel mailing list
> >> dri-devel@lists.freedesktop.org
> >> http://lists.freedesktop.org/mailman/listinfo/dri-devel
> >
> >
> >
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/dri-devel
> >
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>
[-- Attachment #1.2: Type: text/html, Size: 4298 bytes --]
[-- Attachment #2: Type: text/plain, Size: 159 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2012-11-07 16:42 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-31 22:03 [PATCH 1/2] drm: fix order of event_lock wrt. vblank_time_clock Imre Deak
2012-10-31 22:03 ` [PATCH 2/2] drm/i915: lock event_lock for drm_vblank_off() Imre Deak
2012-10-31 22:46 ` Daniel Vetter
2012-11-01 9:34 ` Imre Deak
2012-11-01 9:22 ` [PATCH 1/2] drm: fix order of event_lock wrt. vblank_time_clock Imre Deak
2012-11-02 11:30 ` [PATCH v2 0/4] drm/exynos, intel: fix locking for flip/vbl event list Imre Deak
2012-11-07 9:31 ` Inki Dae
2012-11-07 10:43 ` [PATCH v2 0/4] drm/exynos,intel: " Imre Deak
2012-11-07 16:25 ` [PATCH v2 0/4] drm/exynos, intel: " Inki Dae
2012-11-07 16:28 ` Rob Clark
2012-11-07 16:42 ` Inki Dae
2012-11-02 11:30 ` [PATCH v2 1/4] drm/exynos: hold event_lock while accessing pageflip_event_list Imre Deak
2012-11-02 11:30 ` [PATCH v2 2/4] drm/exynos: call drm_vblank_put for each queued flip event Imre Deak
2012-11-02 11:30 ` [PATCH v2 3/4] drm/exynos: fix lockdep for event_lock wrt. vbl_time_lock Imre Deak
2012-11-02 11:30 ` [PATCH v2 4/4] drm: hold event_lock while accessing vblank_event_list Imre Deak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).