[PATCH] drm/nouveau: fix suspend bug in nvc0 fence implementation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Everywhere else the constant is multiplied by 16/4, so it looks like
nvc0_fence_suspend/resume is buggy here.

Signed-off-by: Maarten Lankhorst <m.b.lankhorst@xxxxxxxxx>
Cc: stable@xxxxxxxxxxxxxxx [3.7+]

---

diff --git a/drivers/gpu/drm/nouveau/nvc0_fence.c
b/drivers/gpu/drm/nouveau/nvc0_fence.c
index 85a0e78..4f46d8b 100644
--- a/drivers/gpu/drm/nouveau/nvc0_fence.c
+++ b/drivers/gpu/drm/nouveau/nvc0_fence.c
@@ -161,11 +161,12 @@ nvc0_fence_suspend(struct nouveau_drm *drm)
 	struct nouveau_fifo *pfifo = nouveau_fifo(drm->device);
 	struct nvc0_fence_priv *priv = drm->fence;
 	int i;
+	u32 chan = pfifo->max + 1;

-	priv->suspend = vmalloc((pfifo->max + 1) * sizeof(u32));
+	priv->suspend = vmalloc(chan * sizeof(u32));
 	if (priv->suspend) {
-		for (i = 0; i <= pfifo->max; i++)
-			priv->suspend[i] = nouveau_bo_rd32(priv->bo, i);
+		for (i = 0; i < chan; i++)
+			priv->suspend[i] = nouveau_bo_rd32(priv->bo, i * 16/4);
 	}

 	return priv->suspend != NULL;
@@ -177,10 +178,11 @@ nvc0_fence_resume(struct nouveau_drm *drm)
 	struct nouveau_fifo *pfifo = nouveau_fifo(drm->device);
 	struct nvc0_fence_priv *priv = drm->fence;
 	int i;
+	u32 chan = pfifo->max + 1;

 	if (priv->suspend) {
-		for (i = 0; i <= pfifo->max; i++)
-			nouveau_bo_wr32(priv->bo, i, priv->suspend[i]);
+		for (i = 0; i < chan; i++)
+			nouveau_bo_wr32(priv->bo, i * 16/4, priv->suspend[i]);
 		vfree(priv->suspend);
 		priv->suspend = NULL;
 	}
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel


[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux