[netdrvr] tc35815: fix obvious bugs
authorJeff Garzik <jeff@garzik.org>
Sat, 24 Feb 2007 22:02:16 +0000 (17:02 -0500)
committerJeff Garzik <jeff@garzik.org>
Tue, 27 Feb 2007 09:11:05 +0000 (04:11 -0500)
* clear_page() use is wrong.  We might have multiple pages.
  Use memset() instead.
* Call pci_unregister_driver() in module exit.

Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/net/tc35815.c

index 81ed82f0b52073da356b58be80c5b09fd75ab9aa..eae2b63951f1ac78d4e8f856e11bd3cfded63ece 100644 (file)
@@ -657,7 +657,7 @@ tc35815_init_queues(struct net_device *dev)
                dma_cache_wback_inv((unsigned long)lp->fd_buf, PAGE_SIZE * FD_PAGE_NUM);
 #endif
        } else {
-               clear_page(lp->fd_buf);
+               memset(lp->fd_buf, 0, PAGE_SIZE * FD_PAGE_NUM);
 #ifdef __mips__
                dma_cache_wback_inv((unsigned long)lp->fd_buf, PAGE_SIZE * FD_PAGE_NUM);
 #endif
@@ -1732,6 +1732,11 @@ static void __exit tc35815_cleanup_module(void)
 {
        struct net_device *next_dev;
 
+       /*
+        * TODO: implement a tc35815_driver.remove hook, and
+        * move this code into that function.  Then, delete
+        * all root_tc35815_dev list handling code.
+        */
        while (root_tc35815_dev) {
                struct net_device *dev = root_tc35815_dev;
                next_dev = ((struct tc35815_local *)dev->priv)->next_module;
@@ -1740,6 +1745,9 @@ static void __exit tc35815_cleanup_module(void)
                free_netdev(dev);
                root_tc35815_dev = next_dev;
        }
+
+       pci_unregister_driver(&tc35815_driver);
 }
+
 module_init(tc35815_init_module);
 module_exit(tc35815_cleanup_module);