netdev
[Top] [All Lists]

[PATCH] dynamic net_device for serial eql balancer

To: "David S. Miller" <davem@xxxxxxxxxx>
Subject: [PATCH] dynamic net_device for serial eql balancer
From: Stephen Hemminger <shemminger@xxxxxxxx>
Date: Tue, 15 Jul 2003 15:57:33 -0700
Cc: netdev@xxxxxxxxxxx
Organization: Open Source Development Lab
Sender: netdev-bounce@xxxxxxxxxxx
Patch against 2.6.0-test1 to dynamically allocate pseudo network device.
Compiles and loaded/unloaded but don't have multi-port serial load balancing to 
test 
more fuly.

diff -Nru a/drivers/net/eql.c b/drivers/net/eql.c
--- a/drivers/net/eql.c Tue Jul 15 15:50:48 2003
+++ b/drivers/net/eql.c Tue Jul 15 15:50:48 2003
@@ -162,22 +162,12 @@
 static char version[] __initdata = 
        "Equalizer2002: Simon Janes (simon@xxxxxxx) and David S. Miller 
(davem@xxxxxxxxxx)\n";
 
-static int __init eql_init(struct net_device *dev)
+static void __init eql_setup(struct net_device *dev)
 {
-       static unsigned int version_printed;
-       equalizer_t *eql;
+       equalizer_t *eql = dev->priv;
 
        SET_MODULE_OWNER(dev);
 
-       if (version_printed++ == 0)
-               printk(version);
-
-       dev->priv = kmalloc(sizeof (equalizer_t), GFP_KERNEL);
-       if (dev->priv == NULL)
-               return -ENOMEM;
-       memset(dev->priv, 0, sizeof (equalizer_t));
-       eql = dev->priv;
-
        init_timer(&eql->timer);
        eql->timer.data         = (unsigned long) dev->priv;
        eql->timer.expires      = jiffies + EQL_DEFAULT_RESCHED_IVAL;
@@ -203,8 +193,6 @@
 
        dev->type               = ARPHRD_SLIP;
        dev->tx_queue_len       = 5;            /* Hands them off fast */
-
-       return 0;
 }
 
 static int eql_open(struct net_device *dev)
@@ -598,23 +586,28 @@
        return -EINVAL;
 }
 
-static struct net_device dev_eql;
+static struct net_device *dev_eql;
 
 static int __init eql_init_module(void)
 {
-       strcpy(dev_eql.name, "eql");
-       dev_eql.init = eql_init;
-       if (register_netdev(&dev_eql) != 0) {
-               printk("eql: register_netdev() returned non-zero.\n");
-               return -EIO;
-       }
-       return 0;
+       int err;
+
+       printk(version);
+
+       dev_eql = alloc_netdev(sizeof(equalizer_t), "eql", eql_setup);
+       if (!dev_eql)
+               return -ENOMEM;
+
+       err = register_netdev(dev_eql);
+       if (err) 
+               kfree(dev_eql);
+       return err;
 }
 
 static void __exit eql_cleanup_module(void)
 {
-       kfree(dev_eql.priv);
-       unregister_netdev(&dev_eql);
+       unregister_netdev(dev_eql);
+       kfree(dev_eql);
 }
 
 module_init(eql_init_module);



<Prev in Thread] Current Thread [Next in Thread>