variable number of dummy devices
Subsystems (2)
PATCH 1/1 variable number of dummy devices
Uses the new module_params that nobody else uses now.
drivers/net/dummy.c renamed from drivers/net/dummy.c-DUMMY +37 -5
@@ -33,6 +33,9 @@#include <linux/kernel.h> #include <linux/netdevice.h> #include <linux/init.h> +#include <linux/moduleparam.h> + +static int numdummies =1 ;static int dummy_xmit (struct sk_buff *skb,struct net_device *dev);static struct net_device_stats *dummy_get_stats (struct net_device *dev);
@@ -83,10 +86,14 @@return dev->priv; } -static struct net_device *dev_dummy; +static struct net_device **dummies; -static int __init dummy_init_module (void ) +/* Number of dummy devices to be set up by this module. */ +module_param (numdummies, int,0 ); + +static int __init dummy_init_one (int index) { +struct net_device *dev_dummy;int err; dev_dummy = alloc_netdev(sizeof(struct net_device_stats),
@@ -98,15 +105,40 @@if ((err =register_netdev (dev_dummy))) {kfree (dev_dummy); dev_dummy =NULL ; + }else { + dummies[index] = dev_dummy; } +return err; } +static void __exit dummy_free_one(int index) +{ +unregister_netdev (dummies[index]); +free_netdev (dummies[index]); +} + +static int __init dummy_init_module (void ) +{ +int i, err =0 ; + dummies =kmalloc (numdummies *sizeof (void *),GFP_KERNEL ); +if (!dummies) +return -ENOMEM ; +for (i =0 ; i < numdummies && !err; i++) + err =dummy_init_one (i); +if (err) { +while (--i >=0 ) +dummy_free_one (i); + } +return err; +} + static void __exit dummy_cleanup_module(void) { -unregister_netdev (dev_dummy); -free_netdev (dev_dummy); - dev_dummy =NULL ; +int i; +for (i =0 ; i < numdummies; i++) +dummy_free_one (i); +kfree (dummies); }module_init (dummy_init_module);
Quoted 1 line · On Thu, 11 Dec 2003 09:36:21 +0100 Andi Kleen <[email protected]> wrote:
Uses the new
module_paramsthat nobody else uses now.
Jeff, I think Andi's patch here is fine, you should try to get it into 2.6.1