[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20070530102810.1689119b@freepuppy>
Date: Wed, 30 May 2007 10:28:10 -0700
From: Stephen Hemminger <shemminger@...ux-foundation.org>
To: Urs Thuermann <urs@...ogud.escape.de>
Cc: David Miller <davem@...emloft.net>,
Thomas Gleixner <tglx@...utronix.de>,
Oliver Hartkopp <oliver.hartkopp@...kswagen.de>,
Urs Thuermann <urs.thuermann@...kswagen.de>,
netdev@...r.kernel.org
Subject: Re: [patch 5/7] CAN: Add virtual CAN netdevice driver
In addition to Patrick's comments.
> +
> +static void vcan_init(struct net_device *dev)
> +{
> + DBG("dev %s\n", dev->name);
> +
> + ether_setup(dev);
Do really want to do this?
- you set different flags/type after this.
- do you really want change_mtu to call eth_change_mtu
Better off to just copy what you want out of ether_setup if
your device is not really an ether device.
> + memset(dev->priv, 0, STATSIZE);
Unneeded alloc_netdev always zero's
> +
> + dev->type = ARPHRD_CAN;
> + dev->mtu = sizeof(struct can_frame);
> + dev->flags = IFF_NOARP;
> +
> + /* set flags according to driver capabilities */
> + if (loopback)
> + dev->flags |= IFF_LOOPBACK;
> +
> + dev->open = vcan_open;
> + dev->stop = vcan_stop;
> + dev->set_config = NULL;
unneeded
> + dev->hard_start_xmit = vcan_tx;
> + dev->do_ioctl = vcan_ioctl;
> + dev->get_stats = vcan_get_stats;
> + dev->hard_header = vcan_header;
> + dev->rebuild_header = vcan_rebuild_header;
> + dev->hard_header_cache = NULL;
unneeded
> + SET_MODULE_OWNER(dev);
> +}
> +
> +static __init int vcan_init_module(void)
> +{
> + int i, result;
> +
> + printk(banner);
> +
> + /* register at least one interface */
> + if (numdev < 1)
> + numdev = 1;
> +
> + printk(KERN_INFO
> + "vcan: registering %d virtual CAN interfaces. (loopback %s)\n",
> + numdev, loopback ? "enabled" : "disabled");
> +
> + vcan_devs = kzalloc(numdev * sizeof(struct net_device *), GFP_KERNEL);
kcalloc() instead?
> + if (!vcan_devs) {
> + printk(KERN_ERR "vcan: Can't allocate vcan devices array!\n");
> + return -ENOMEM;
> + }
> +
> + for (i = 0; i < numdev; i++) {
> + vcan_devs[i] = alloc_netdev(STATSIZE, "vcan%d", vcan_init);
> + if (!vcan_devs[i]) {
> + printk(KERN_ERR "vcan: error allocating net_device\n");
> + result = -ENOMEM;
> + goto out;
> + }
> +
> + result = register_netdev(vcan_devs[i]);
> + if (result < 0) {
> + printk(KERN_ERR
> + "vcan: error %d registering interface %s\n",
> + result, vcan_devs[i]->name);
> + free_netdev(vcan_devs[i]);
> + vcan_devs[i] = NULL;
> + goto out;
> +
> + } else {
> + DBG("successfully registered interface %s\n",
> + vcan_devs[i]->name);
> + }
> + }
> +
> + return 0;
> +
> + out:
> + for (i = 0; i < numdev; i++) {
> + if (vcan_devs[i]) {
> + unregister_netdev(vcan_devs[i]);
> + free_netdev(vcan_devs[i]);
> + }
> + }
> +
> + kfree(vcan_devs);
> +
> + return result;
> +}
> +
> +static __exit void vcan_cleanup_module(void)
> +{
> + int i;
> +
> + for (i = 0; i < numdev; i++) {
> + if (vcan_devs[i]) {
> + unregister_netdev(vcan_devs[i]);
> + free_netdev(vcan_devs[i]);
> + }
> + }
> +
> + kfree(vcan_devs);
> +}
> +
> +module_init(vcan_init_module);
> +module_exit(vcan_cleanup_module);
> Index: linux-2.6.22-rc3/net/can/Kconfig
> ===================================================================
> --- linux-2.6.22-rc3.orig/net/can/Kconfig 2007-05-30 14:58:03.000000000 +0200
> +++ linux-2.6.22-rc3/net/can/Kconfig 2007-05-30 14:58:05.000000000 +0200
> @@ -77,3 +77,6 @@
> Say Y here if you want the CAN core to produce a bunch of debug
> messages to the system log. Select this if you are having a
> problem with CAN support and want to see more of what is going on.
> +
> +
> +source "drivers/net/can/Kconfig"
>
> --
> -
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Stephen Hemminger <shemminger@...ux-foundation.org>
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists