Commit:     bbbab5ca835fb7676434815a47add8f2c696bec7
Parent:     0173b793ca477aa2ca516ebf0a35e137b678d466
Author:     Ingo Molnar <[EMAIL PROTECTED]>
AuthorDate: Wed Oct 24 13:58:57 2007 +0200
Committer:  Jeff Garzik <[EMAIL PROTECTED]>
CommitDate: Thu Oct 25 03:31:14 2007 -0400

    natsemi: fix oops, link back netdevice from private-struct
    * Andrew Nelless <[EMAIL PROTECTED]> 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 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:
    the NULL dereference is here:
     (gdb) list *0xffffffff804a9504
     0xffffffff804a9504 is in natsemi_poll (drivers/net/natsemi.c:717).
     712             return count;
     713     }
     715     static inline void __iomem *ns_ioaddr(struct net_device *dev)
     716     {
     717             return (void __iomem *) dev->base_addr;
     718     }
    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?
    Subject: natsemi: fix oops, link back netdevice from private-struct
    From: Ingo Molnar <[EMAIL PROTECTED]>
    this commit:
      commit bea3348eef27e6044b6161fd04c3152215f96411
      Author: Stephen Hemminger <[EMAIL PROTECTED]>
      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 <[EMAIL PROTECTED]>
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
    Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]>
 drivers/net/natsemi.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/net/natsemi.c b/drivers/net/natsemi.c
index 9531171..87cde06 100644
--- a/drivers/net/natsemi.c
+++ b/drivers/net/natsemi.c
@@ -864,6 +864,7 @@ static int __devinit natsemi_probe1 (struct pci_dev *pdev,
        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);
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to