Messages in this thread | | | Date | Thu, 25 Oct 2007 03:32:00 -0400 | From | Jeff Garzik <> | Subject | Re: [patch] natsemi: fix oops, link back netdevice from private-struct |
| |
Ingo Molnar wrote: > * Andrew Nelless <andrew@nelless.net> wrote: > >> Hi, >> >> I booted up 2.6.24-rc1 this morning [Real early over a brew ;-)] and >> was having a problems with multiple ~5 second hangs on SATA/drive init >> (Something to do with "EH" something-or-other and resets but I'll >> email in separately about it later unless its fixed by the time I get >> the chance). >> >> Anyway, I went to fire up netconsole to get a decent log dump and hit >> across the following nasty. Netconsole works fine in 2.6.23.1 with a >> similar config and the same kernel parameters. >> >> A shot of the screen is the only method I could come up with to >> capture the log, I hope that is OK, it is pretty readable. >> >> >> The nasty: >> http://andotnet.nfshost.com/linux/2.6.24-rc1-netconsole-nullderef.jpg > > > the NULL dereference is here: > > (gdb) list *0xffffffff804a9504 > 0xffffffff804a9504 is in natsemi_poll (drivers/net/natsemi.c:717). > 712 return count; > 713 } > 714 > 715 static inline void __iomem *ns_ioaddr(struct net_device *dev) > 716 { > 717 return (void __iomem *) dev->base_addr; > 718 } > 719 > > which is this code from natsemi.c: > > 2227 struct net_device *dev = np->dev; > 2228 void __iomem * ioaddr = ns_ioaddr(dev); > 2229 int work_done = 0; > > seems like the NAPI changes in -rc1 added an np->dev field but forgot to > initialize it ... > > does the patch below fix the oops for you? > > Ingo > > --------------------> > Subject: natsemi: fix oops, link back netdevice from private-struct > From: Ingo Molnar <mingo@elte.hu> > > this commit: > > commit bea3348eef27e6044b6161fd04c3152215f96411 > Author: Stephen Hemminger <shemminger@linux-foundation.org> > Date: Wed Oct 3 16:41:36 2007 -0700 > > [NET]: Make NAPI polling independent of struct net_device objects. > > added np->dev to drivers/net/natsemi.c's struct netdev_private, but > forgot to initialize that new field upon driver init. The result was > a predictable NULL dereference oops the first time the hardware > generated an interrupt. > > Reported-by: Andrew Nelless <andrew@nelless.net> > Signed-off-by: Ingo Molnar <mingo@elte.hu> > --- > drivers/net/natsemi.c | 1 + > 1 file changed, 1 insertion(+) > > Index: linux/drivers/net/natsemi.c > =================================================================== > --- linux.orig/drivers/net/natsemi.c > +++ linux/drivers/net/natsemi.c > @@ -864,6 +864,7 @@ static int __devinit natsemi_probe1 (str > > np = netdev_priv(dev); > netif_napi_add(dev, &np->napi, natsemi_poll, 64); > + np->dev = dev; > > np->pci_dev = pdev; > pci_set_drvdata(pdev, dev);
applied
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |