Commit ecbec53b1d00ba582f71b210ed96cafc05ebd189

Authored by Hugh Dickins
Committed by Linus Torvalds
1 parent e2377fe0b6

drm/i915: more struct_mutex locking

When auditing the locking in i915_gem.c (for a prospective change which
I then abandoned), I noticed two places where struct_mutex is not held
across GEM object manipulations that would usually require it.

Since one is in initial setup and the other in driver unload, I'm
guessing the mutex is not required for either; but post a patch in case
it is.

Signed-off-by: Hugh Dickins <hughd@google.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Keith Packard <keithp@keithp.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 2 changed files with 6 additions and 2 deletions Side-by-side Diff

drivers/gpu/drm/i915/i915_dma.c
... ... @@ -2182,9 +2182,8 @@
2182 2182 /* Flush any outstanding unpin_work. */
2183 2183 flush_workqueue(dev_priv->wq);
2184 2184  
2185   - i915_gem_free_all_phys_object(dev);
2186   -
2187 2185 mutex_lock(&dev->struct_mutex);
  2186 + i915_gem_free_all_phys_object(dev);
2188 2187 i915_gem_cleanup_ringbuffer(dev);
2189 2188 mutex_unlock(&dev->struct_mutex);
2190 2189 if (I915_HAS_FBC(dev) && i915_powersave)
drivers/gpu/drm/i915/intel_overlay.c
... ... @@ -1416,6 +1416,8 @@
1416 1416 goto out_free;
1417 1417 overlay->reg_bo = reg_bo;
1418 1418  
  1419 + mutex_lock(&dev->struct_mutex);
  1420 +
1419 1421 if (OVERLAY_NEEDS_PHYSICAL(dev)) {
1420 1422 ret = i915_gem_attach_phys_object(dev, reg_bo,
1421 1423 I915_GEM_PHYS_OVERLAY_REGS,
... ... @@ -1440,6 +1442,8 @@
1440 1442 }
1441 1443 }
1442 1444  
  1445 + mutex_unlock(&dev->struct_mutex);
  1446 +
1443 1447 /* init all values */
1444 1448 overlay->color_key = 0x0101fe;
1445 1449 overlay->brightness = -19;
... ... @@ -1464,6 +1468,7 @@
1464 1468 i915_gem_object_unpin(reg_bo);
1465 1469 out_free_bo:
1466 1470 drm_gem_object_unreference(&reg_bo->base);
  1471 + mutex_unlock(&dev->struct_mutex);
1467 1472 out_free:
1468 1473 kfree(overlay);
1469 1474 return;