diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index cdc8f544d47f1d31660592dc951bbf5218148de9..099f806f39eda91ed6df51e886c84c4f090dade0 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/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)
diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
index 5814db82f778cc297ab6205f643af591c2f566b5..ce0475ead3812f5664c9a45f35398fbd8b77c0aa 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drv.h
+++ b/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;