Bob Gleitsmann
2014-Jan-14 03:22 UTC
[Nouveau] [Fwd: [PATCH] Fix null dereference oopses for nv40 cards] kernel 3.13.0-rc8
I should have mentioned that this applies to Linus' 3.13.0-rc7 and rc8 git. Maybe it's obvious. Sorry about that. Bob -------- Forwarded Message -------- From: Bob Gleitsmann <rjgleits at bellsouth.net> To: bskeggs at redhat.com Cc: nouveau at lists.freedesktop.org, dri-devel at lists.freedesktop.org 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 at bellsouth.net 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;
Ben Skeggs
2014-Jan-14 05:07 UTC
[Nouveau] [Fwd: [PATCH] Fix null dereference oopses for nv40 cards] kernel 3.13.0-rc8
On Tue, Jan 14, 2014 at 1:22 PM, Bob Gleitsmann <rjgleits at bellsouth.net> 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? Ben.> > Sorry about that. > > Bob > -------- Forwarded Message -------- > From: Bob Gleitsmann <rjgleits at bellsouth.net> > To: bskeggs at redhat.com > Cc: nouveau at lists.freedesktop.org, dri-devel at lists.freedesktop.org > 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 at bellsouth.net > > 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 at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/nouveau-------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-fix-null-ptr-dereferences-on-some-boards.patch Type: text/x-patch Size: 1629 bytes Desc: not available URL: <http://lists.freedesktop.org/archives/nouveau/attachments/20140114/5ea59dbe/attachment.bin>
Ben Skeggs
2014-Jan-14 05:15 UTC
[Nouveau] [Fwd: [PATCH] Fix null dereference oopses for nv40 cards] kernel 3.13.0-rc8
On Tue, Jan 14, 2014 at 3:07 PM, Ben Skeggs <skeggsb at gmail.com> wrote:> On Tue, Jan 14, 2014 at 1:22 PM, Bob Gleitsmann <rjgleits at bellsouth.net> 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.> > Ben. > >> >> Sorry about that. >> >> Bob >> -------- Forwarded Message -------- >> From: Bob Gleitsmann <rjgleits at bellsouth.net> >> To: bskeggs at redhat.com >> Cc: nouveau at lists.freedesktop.org, dri-devel at lists.freedesktop.org >> 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 at bellsouth.net >> >> 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 at lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/nouveau-------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-fix-null-ptr-dereferences-on-some-boards.patch Type: text/x-patch Size: 4790 bytes Desc: not available URL: <http://lists.freedesktop.org/archives/nouveau/attachments/20140114/5b10ce11/attachment-0001.bin>
Seemingly Similar Threads
- [Fwd: [PATCH] Fix null dereference oopses for nv40 cards] kernel 3.13.0-rc8
- [Fwd: [PATCH] Fix null dereference oopses for nv40 cards] kernel 3.13.0-rc8
- [PATCH] Fix null dereference oopses for nv40 cards
- [Bug 22460] New: Demos crash with NV40 driver
- [Bug 87641] New: Oops in 3.19.0-rc1 - nv40 and older - patch included