[Nouveau] [PATCH v2] pmu: use nvkm_msec instead of do while

Karol Herbst nouveau at karolherbst.de
Sat Nov 14 11:51:01 PST 2015


I hit this while loop in an error state of the gpu

v2: unlock mutex only if reply == true

Signed-off-by: Karol Herbst <nouveau at karolherbst.de>
---
 drm/nouveau/nvkm/subdev/pmu/base.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drm/nouveau/nvkm/subdev/pmu/base.c b/drm/nouveau/nvkm/subdev/pmu/base.c
index 81a5583..eb248fd 100644
--- a/drm/nouveau/nvkm/subdev/pmu/base.c
+++ b/drm/nouveau/nvkm/subdev/pmu/base.c
@@ -100,9 +100,16 @@ nvkm_pmu_send(struct nvkm_pmu *pmu, u32 reply[2],
 	}
 
 	/* acquire data segment access */
-	do {
+	nvkm_wr32(device, 0x10a580, 0x00000001);
+	if (nvkm_msec(device, 2000,
+		if (nvkm_rd32(device, 0x10a580) == 0x00000001)
+			break;
 		nvkm_wr32(device, 0x10a580, 0x00000001);
-	} while (nvkm_rd32(device, 0x10a580) != 0x00000001);
+	) < 0) {
+		if (reply)
+			mutex_unlock(&subdev->mutex);
+		return -EBUSY;
+	}
 
 	/* write the packet */
 	nvkm_wr32(device, 0x10a1c0, 0x01000000 | (((addr & 0x07) << 4) +
-- 
2.6.3



More information about the Nouveau mailing list