فهرست منبع

drm/nouveau: Add a separate class for the kernel channel mutex.

nouveau_bo_move_m2mf() needs to lock the kernel channel, and it may be
called from the pushbuf IOCTL with an user channel already locked. Use
a separate subclass for the kernel channel mutex because this is
legitimate mutex nesting.

Signed-off-by: Francisco Jerez <currojerez@riseup.net>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Francisco Jerez 14 سال پیش
والد
کامیت
e419cf0954
2فایلهای تغییر یافته به همراه6 افزوده شده و 1 حذف شده
  1. 1 1
      drivers/gpu/drm/nouveau/nouveau_bo.c
  2. 5 0
      drivers/gpu/drm/nouveau/nouveau_drv.h

+ 1 - 1
drivers/gpu/drm/nouveau/nouveau_bo.c

@@ -678,7 +678,7 @@ nouveau_bo_move_m2mf(struct ttm_buffer_object *bo, int evict, bool intr,
 	chan = nvbo->channel;
 	if (!chan || nvbo->no_vm) {
 		chan = dev_priv->channel;
-		mutex_lock(&chan->mutex);
+		mutex_lock_nested(&chan->mutex, NOUVEAU_KCHANNEL_MUTEX);
 	}
 
 	if (dev_priv->card_type < NV_50)

+ 5 - 0
drivers/gpu/drm/nouveau/nouveau_drv.h

@@ -173,6 +173,11 @@ struct nouveau_page_flip_state {
 	uint64_t offset;
 };
 
+enum nouveau_channel_mutex_class {
+	NOUVEAU_UCHANNEL_MUTEX,
+	NOUVEAU_KCHANNEL_MUTEX
+};
+
 struct nouveau_channel {
 	struct drm_device *dev;
 	int id;