mirror of https://gitee.com/openkylin/linux.git
drm/i915: Grab dev->struct_mutex in i915_gem_pageflip_info
We could walk of a bad list otherwise when someone concurrently unbinds stuff for fun. I've suspected this as the root-cause behind seemingly inconsistent state, but alas it's not. Acked-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
c9224faa59
commit
8a270ebf34
|
@ -513,6 +513,11 @@ static int i915_gem_pageflip_info(struct seq_file *m, void *data)
|
||||||
struct drm_device *dev = node->minor->dev;
|
struct drm_device *dev = node->minor->dev;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct intel_crtc *crtc;
|
struct intel_crtc *crtc;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = mutex_lock_interruptible(&dev->struct_mutex);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
for_each_intel_crtc(dev, crtc) {
|
for_each_intel_crtc(dev, crtc) {
|
||||||
const char pipe = pipe_name(crtc->pipe);
|
const char pipe = pipe_name(crtc->pipe);
|
||||||
|
@ -554,6 +559,8 @@ static int i915_gem_pageflip_info(struct seq_file *m, void *data)
|
||||||
spin_unlock_irqrestore(&dev->event_lock, flags);
|
spin_unlock_irqrestore(&dev->event_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex_unlock(&dev->struct_mutex);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue