diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2014-01-14 14:56:22 +1000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2014-01-15 14:24:05 +1000 |
commit | fdd239ac99a0cc298b382c5ab5e7bcd09e8933d7 (patch) | |
tree | 7bf11a0f66f855d872e2b275a4811975a6edcaf3 /drivers/gpu/drm/nouveau/core/include/subdev/instmem.h | |
parent | bbc6319676944aa43527656b996766b85558e7e0 (diff) | |
download | op-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.h | 7 |
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]; } |