summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/core/include/subdev/instmem.h
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2014-01-14 14:56:22 +1000
committerBen Skeggs <bskeggs@redhat.com>2014-01-15 14:24:05 +1000
commitfdd239ac99a0cc298b382c5ab5e7bcd09e8933d7 (patch)
tree7bf11a0f66f855d872e2b275a4811975a6edcaf3 /drivers/gpu/drm/nouveau/core/include/subdev/instmem.h
parentbbc6319676944aa43527656b996766b85558e7e0 (diff)
downloadop-kernel-dev-fdd239ac99a0cc298b382c5ab5e7bcd09e8933d7.zip
op-kernel-dev-fdd239ac99a0cc298b382c5ab5e7bcd09e8933d7.tar.gz
drm/nouveau: fix null ptr dereferences on some boards
Regression from "device: populate master subdev pointer only when fully constructed" Reported-by: Bob Gleitsmann <rjgleits@bellsouth.net> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/core/include/subdev/instmem.h')
-rw-r--r--drivers/gpu/drm/nouveau/core/include/subdev/instmem.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/core/include/subdev/instmem.h b/drivers/gpu/drm/nouveau/core/include/subdev/instmem.h
index ec7a54e..4aca338 100644
--- a/drivers/gpu/drm/nouveau/core/include/subdev/instmem.h
+++ b/drivers/gpu/drm/nouveau/core/include/subdev/instmem.h
@@ -50,6 +50,13 @@ struct nouveau_instmem {
static inline struct nouveau_instmem *
nouveau_instmem(void *obj)
{
+ /* nv04/nv40 impls need to create objects in their constructor,
+ * which is before the subdev pointer is valid
+ */
+ if (nv_iclass(obj, NV_SUBDEV_CLASS) &&
+ nv_subidx(obj) == NVDEV_SUBDEV_INSTMEM)
+ return obj;
+
return (void *)nv_device(obj)->subdev[NVDEV_SUBDEV_INSTMEM];
}
OpenPOWER on IntegriCloud