On 14/01/14 05:15, Ben Skeggs wrote: > On Tue, Jan 14, 2014 at 3:07 PM, Ben Skeggs <skeggsb@xxxxxxxxx> wrote: >> On Tue, Jan 14, 2014 at 1:22 PM, Bob Gleitsmann <rjgleits@xxxxxxxxxxxxx> wrote: >>> I should have mentioned that this applies to Linus' 3.13.0-rc7 and rc8 >>> git. Maybe it's obvious. >> Hey Bob, >> >> Thanks for reporting this. Can you try the attached patch instead and >> report if it helps you? > Thinko in first attempt, new one attached. > Seems to resolve the problem over at https://bugs.freedesktop.org/show_bug.cgi?id=73607 Thanks Ben >> >> Ben. >> >>> >>> Sorry about that. >>> >>> Bob >>> -------- Forwarded Message -------- >>> From: Bob Gleitsmann <rjgleits@xxxxxxxxxxxxx> >>> To: bskeggs@xxxxxxxxxx >>> Cc: nouveau@xxxxxxxxxxxxxxxxxxxxx, dri-devel@xxxxxxxxxxxxxxxxxxxxx >>> Subject: [PATCH] Fix null dereference oopses for nv40 cards >>> Date: Mon, 13 Jan 2014 01:45:36 -0500 >>> >>> The problem affects nv40 cards during booting. It comes from there being >>> two places where subdev arrays are maintained. A commit was recently >>> added to make the two equal. However, the struct nouveau_device version >>> ends up being referenced before it is initialized. The problem arises >>> during the creation of the INSTMEM and THERM subdevs. ' >>> >>> Signed off by: Bob Gleitsmann rjgleits@xxxxxxxxxxxxx >>> >>> diff --git a/drivers/gpu/drm/nouveau/core/subdev/instmem/nv40.c b/drivers/gpu/drm/nouveau/core/subdev/instmem/nv40.c >>> index b10a143..0f494ca 100644 >>> --- a/drivers/gpu/drm/nouveau/core/subdev/instmem/nv40.c >>> +++ b/drivers/gpu/drm/nouveau/core/subdev/instmem/nv40.c >>> @@ -23,6 +23,7 @@ >>> */ >>> >>> #include <engine/graph/nv40.h> >>> +#include <core/device.h> >>> >>> #include "nv04.h" >>> >>> @@ -38,6 +39,7 @@ nv40_instmem_ctor(struct nouveau_object *parent, struct nouveau_object *engine, >>> >>> ret = nouveau_instmem_create(parent, engine, oclass, &priv); >>> *pobject = nv_object(priv); >>> + device->subdev[NVDEV_SUBDEV_INSTMEM] = *pobject; >>> if (ret) >>> return ret; >>> >>> diff --git a/drivers/gpu/drm/nouveau/core/subdev/therm/nv40.c b/drivers/gpu/drm/nouveau/core/subdev/therm/nv40.c >>> index 002e51b..59b25be 100644 >>> --- a/drivers/gpu/drm/nouveau/core/subdev/therm/nv40.c >>> +++ b/drivers/gpu/drm/nouveau/core/subdev/therm/nv40.c >>> @@ -187,9 +187,11 @@ nv40_therm_ctor(struct nouveau_object *parent, >>> { >>> struct nv40_therm_priv *priv; >>> int ret; >>> + struct nouveau_device *device = nv_device(parent); >>> >>> ret = nouveau_therm_create(parent, engine, oclass, &priv); >>> *pobject = nv_object(priv); >>> + device->subdev[NVDEV_SUBDEV_THERM] = *pobject; >>> if (ret) >>> return ret; >>> >>> >>> >>> >>> _______________________________________________ >>> Nouveau mailing list >>> Nouveau@xxxxxxxxxxxxxxxxxxxxx >>> http://lists.freedesktop.org/mailman/listinfo/nouveau >>> >>> >>> _______________________________________________ >>> Nouveau mailing list >>> Nouveau@xxxxxxxxxxxxxxxxxxxxx >>> http://lists.freedesktop.org/mailman/listinfo/nouveau _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel