From: Ben Skeggs Date: Mon, 13 Apr 2015 03:09:28 +0000 (+1000) Subject: drm/nouveau/gr/gk104-: prevent reading non-existent regs in intr handler X-Git-Tag: v5.15~15919^2~6^2~9 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=91c772ec129dc63038ee5642f441a03584474e1e;p=platform%2Fkernel%2Flinux-starfive.git drm/nouveau/gr/gk104-: prevent reading non-existent regs in intr handler Under certain circumstances the trapped address will contain subc 7, which GK104 GR doesn't have anymore. Notice this case to avoid causing additional priv ring faults. Signed-off-by: Ben Skeggs --- diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c index 3f05414..5606c25 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c @@ -1097,9 +1097,14 @@ gf100_gr_intr(struct nvkm_subdev *subdev) u32 subc = (addr & 0x00070000) >> 16; u32 data = nv_rd32(priv, 0x400708); u32 code = nv_rd32(priv, 0x400110); - u32 class = nv_rd32(priv, 0x404200 + (subc * 4)); + u32 class; int chid; + if (nv_device(priv)->card_type < NV_E0 || subc < 4) + class = nv_rd32(priv, 0x404200 + (subc * 4)); + else + class = 0x0000; + engctx = nvkm_engctx_get(engine, inst); chid = pfifo->chid(pfifo, engctx);