X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fifb.c;h=c26a4b8e552a52274832b551a45c2d47ca357da7;hb=5a09e39810ae0465016c380962e12dd115779b87;hp=2e222ef91e224892c675766831fddc851e40f017;hpb=37224470c8c6d90a4062e76a08d4dc1fcf91fc89;p=powerpc.git diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c index 2e222ef91e..c26a4b8e55 100644 --- a/drivers/net/ifb.c +++ b/drivers/net/ifb.c @@ -1,4 +1,4 @@ -/* drivers/net/ifb.c: +/* drivers/net/ifb.c: The purpose of this driver is to provide a device that allows for sharing of resources: @@ -8,8 +8,8 @@ an impression of sharing. 2) Allows for queueing incoming traffic for shaping instead of - dropping. - + dropping. + The original concept is based on what is known as the IMQ driver initially written by Martin Devera, later rewritten by Patrick McHardy and then maintained by Andre Correa. @@ -21,23 +21,22 @@ modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + Authors: Jamal Hadi Salim (2005) - + */ -#include #include #include #include #include #include #include -#include +#include #define TX_TIMEOUT (2*HZ) - + #define TX_Q_LIMIT 32 struct ifb_private { struct net_device_stats stats; @@ -65,7 +64,7 @@ static struct net_device_stats *ifb_get_stats(struct net_device *dev); static int ifb_open(struct net_device *dev); static int ifb_close(struct net_device *dev); -static void ri_tasklet(unsigned long dev) +static void ri_tasklet(unsigned long dev) { struct net_device *_dev = (struct net_device *)dev; @@ -164,7 +163,7 @@ dropped: stats->rx_dropped++; return ret; } else { - /* + /* * note we could be going * ingress -> egress or * egress -> ingress @@ -200,9 +199,9 @@ static struct net_device_stats *ifb_get_stats(struct net_device *dev) struct net_device_stats *stats = &dp->stats; pr_debug("tasklets stats %ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld:%ld \n", - dp->st_task_enter, dp->st_txq_refl_try, dp->st_rxq_enter, - dp->st_rx2tx_tran dp->st_rxq_notenter, dp->st_rx_frm_egr, - dp->st_rx_frm_ing, dp->st_rxq_check, dp->st_rxq_rsch ); + dp->st_task_enter, dp->st_txq_refl_try, dp->st_rxq_enter, + dp->st_rx2tx_tran, dp->st_rxq_notenter, dp->st_rx_frm_egr, + dp->st_rx_frm_ing, dp->st_rxq_check, dp->st_rxq_rsch); return stats; } @@ -251,7 +250,7 @@ static int __init ifb_init_one(int index) free_netdev(dev_ifb); dev_ifb = NULL; } else { - ifbs[index] = dev_ifb; + ifbs[index] = dev_ifb; } return err; @@ -261,31 +260,32 @@ static void ifb_free_one(int index) { unregister_netdev(ifbs[index]); free_netdev(ifbs[index]); -} +} static int __init ifb_init_module(void) -{ +{ int i, err = 0; - ifbs = kmalloc(numifbs * sizeof(void *), GFP_KERNEL); + ifbs = kmalloc(numifbs * sizeof(void *), GFP_KERNEL); if (!ifbs) - return -ENOMEM; + return -ENOMEM; for (i = 0; i < numifbs && !err; i++) - err = ifb_init_one(i); - if (err) { + err = ifb_init_one(i); + if (err) { + i--; while (--i >= 0) ifb_free_one(i); } return err; -} +} static void __exit ifb_cleanup_module(void) { int i; - for (i = 0; i < numifbs; i++) - ifb_free_one(i); - kfree(ifbs); + for (i = 0; i < numifbs; i++) + ifb_free_one(i); + kfree(ifbs); } module_init(ifb_init_module);