Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d74472f0b2553e59eafb7feee0ff9558136a17e0
Commit:     d74472f0b2553e59eafb7feee0ff9558136a17e0
Parent:     8b6aaab8c8bdbe011aac79af218dd1e657984bab
Author:     Finn Thain <[EMAIL PROTECTED]>
AuthorDate: Tue May 1 22:33:02 2007 +0200
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Fri May 4 17:59:08 2007 -0700

    SONIC: small fix and cleanup
    
    Fix a potential problem in the timeout handling: don't free the DMA buffers
    before resetting the chip.
    
    Also a trivial cleanup. Bring macsonic and jazzsonic into sync.
    
    Signed-off-by: Finn Thain <[EMAIL PROTECTED]>
    Signed-off-by: Geert Uytterhoeven <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 drivers/net/jazzsonic.c |    4 ++--
 drivers/net/macsonic.c  |   17 ++++++++---------
 drivers/net/sonic.c     |    7 ++++++-
 3 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/drivers/net/jazzsonic.c b/drivers/net/jazzsonic.c
index d34afb5..1a73630 100644
--- a/drivers/net/jazzsonic.c
+++ b/drivers/net/jazzsonic.c
@@ -269,11 +269,11 @@ static int __devexit jazz_sonic_device_remove (struct 
platform_device *pdev)
        struct net_device *dev = platform_get_drvdata(pdev);
        struct sonic_local* lp = netdev_priv(dev);
 
-       unregister_netdev (dev);
+       unregister_netdev(dev);
        dma_free_coherent(lp->device, SIZEOF_SONIC_DESC * 
SONIC_BUS_SCALE(lp->dma_bitmode),
                          lp->descriptors, lp->descriptors_laddr);
        release_region (dev->base_addr, SONIC_MEM_SIZE);
-       free_netdev (dev);
+       free_netdev(dev);
 
        return 0;
 }
diff --git a/drivers/net/macsonic.c b/drivers/net/macsonic.c
index a3d24a3..c78a7e2 100644
--- a/drivers/net/macsonic.c
+++ b/drivers/net/macsonic.c
@@ -522,7 +522,7 @@ int __init mac_nubus_sonic_probe(struct net_device* dev)
        return macsonic_init(dev);
 }
 
-static int __init mac_sonic_probe(struct platform_device *device)
+static int __init mac_sonic_probe(struct platform_device *pdev)
 {
        struct net_device *dev;
        struct sonic_local *lp;
@@ -534,8 +534,8 @@ static int __init mac_sonic_probe(struct platform_device 
*device)
                return -ENOMEM;
 
        lp = netdev_priv(dev);
-       lp->device = &device->dev;
-       SET_NETDEV_DEV(dev, &device->dev);
+       lp->device = &pdev->dev;
+       SET_NETDEV_DEV(dev, &pdev->dev);
        SET_MODULE_OWNER(dev);
 
        /* This will catch fatal stuff like -ENOMEM as well as success */
@@ -576,15 +576,15 @@ MODULE_PARM_DESC(sonic_debug, "macsonic debug level 
(1-4)");
 
 #include "sonic.c"
 
-static int __devexit mac_sonic_device_remove (struct platform_device *device)
+static int __devexit mac_sonic_device_remove (struct platform_device *pdev)
 {
-       struct net_device *dev = platform_get_drvdata(device);
+       struct net_device *dev = platform_get_drvdata(pdev);
        struct sonic_local* lp = netdev_priv(dev);
 
-       unregister_netdev (dev);
+       unregister_netdev(dev);
        dma_free_coherent(lp->device, SIZEOF_SONIC_DESC * 
SONIC_BUS_SCALE(lp->dma_bitmode),
                          lp->descriptors, lp->descriptors_laddr);
-       free_netdev (dev);
+       free_netdev(dev);
 
        return 0;
 }
@@ -607,9 +607,8 @@ static int __init mac_sonic_init_module(void)
        }
 
        mac_sonic_device = platform_device_alloc(mac_sonic_string, 0);
-       if (!mac_sonic_device) {
+       if (!mac_sonic_device)
                goto out_unregister;
-       }
 
        if (platform_device_add(mac_sonic_device)) {
                platform_device_put(mac_sonic_device);
diff --git a/drivers/net/sonic.c b/drivers/net/sonic.c
index c6320c7..687c141 100644
--- a/drivers/net/sonic.c
+++ b/drivers/net/sonic.c
@@ -178,8 +178,13 @@ static void sonic_tx_timeout(struct net_device *dev)
 {
        struct sonic_local *lp = netdev_priv(dev);
        int i;
-       /* Stop the interrupts for this */
+       /*
+        * put the Sonic into software-reset mode and
+        * disable all interrupts before releasing DMA buffers
+        */
        SONIC_WRITE(SONIC_IMR, 0);
+       SONIC_WRITE(SONIC_ISR, 0x7fff);
+       SONIC_WRITE(SONIC_CMD, SONIC_CR_RST);
        /* We could resend the original skbs. Easier to re-initialise. */
        for (i = 0; i < SONIC_NUM_TDS; i++) {
                if(lp->tx_laddr[i]) {
-
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  http://vger.kernel.org/majordomo-info.html

Reply via email to