include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit...
[safe/jmp/linux-2.6] / drivers / infiniband / hw / amso1100 / c2_provider.c
index 2acf9b6..c47f618 100644 (file)
@@ -50,6 +50,7 @@
 #include <linux/dma-mapping.h>
 #include <linux/if_arp.h>
 #include <linux/vmalloc.h>
+#include <linux/slab.h>
 
 #include <asm/io.h>
 #include <asm/irq.h>
@@ -272,7 +273,6 @@ static struct ib_qp *c2_create_qp(struct ib_pd *pd,
                pr_debug("%s: Invalid QP type: %d\n", __func__,
                        init_attr->qp_type);
                return ERR_PTR(-EINVAL);
-               break;
        }
 
        if (err) {
@@ -654,7 +654,7 @@ static int c2_service_destroy(struct iw_cm_id *cm_id)
 static int c2_pseudo_up(struct net_device *netdev)
 {
        struct in_device *ind;
-       struct c2_dev *c2dev = netdev->priv;
+       struct c2_dev *c2dev = netdev->ml_priv;
 
        ind = in_dev_get(netdev);
        if (!ind)
@@ -679,7 +679,7 @@ static int c2_pseudo_up(struct net_device *netdev)
 static int c2_pseudo_down(struct net_device *netdev)
 {
        struct in_device *ind;
-       struct c2_dev *c2dev = netdev->priv;
+       struct c2_dev *c2dev = netdev->ml_priv;
 
        ind = in_dev_get(netdev);
        if (!ind)
@@ -709,26 +709,27 @@ static int c2_pseudo_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
 
 static int c2_pseudo_change_mtu(struct net_device *netdev, int new_mtu)
 {
-       int ret = 0;
-
        if (new_mtu < ETH_ZLEN || new_mtu > ETH_JUMBO_MTU)
                return -EINVAL;
 
        netdev->mtu = new_mtu;
 
        /* TODO: Tell rnic about new rmda interface mtu */
-       return ret;
+       return 0;
 }
 
+static const struct net_device_ops c2_pseudo_netdev_ops = {
+       .ndo_open               = c2_pseudo_up,
+       .ndo_stop               = c2_pseudo_down,
+       .ndo_start_xmit         = c2_pseudo_xmit_frame,
+       .ndo_change_mtu         = c2_pseudo_change_mtu,
+       .ndo_validate_addr      = eth_validate_addr,
+};
+
 static void setup(struct net_device *netdev)
 {
-       netdev->open = c2_pseudo_up;
-       netdev->stop = c2_pseudo_down;
-       netdev->hard_start_xmit = c2_pseudo_xmit_frame;
-       netdev->get_stats = NULL;
-       netdev->tx_timeout = NULL;
-       netdev->set_mac_address = NULL;
-       netdev->change_mtu = c2_pseudo_change_mtu;
+       netdev->netdev_ops = &c2_pseudo_netdev_ops;
+
        netdev->watchdog_timeo = 0;
        netdev->type = ARPHRD_ETHER;
        netdev->mtu = 1500;
@@ -736,7 +737,6 @@ static void setup(struct net_device *netdev)
        netdev->addr_len = ETH_ALEN;
        netdev->tx_queue_len = 0;
        netdev->flags |= IFF_NOARP;
-       return;
 }
 
 static struct net_device *c2_pseudo_netdev_init(struct c2_dev *c2dev)
@@ -747,14 +747,14 @@ static struct net_device *c2_pseudo_netdev_init(struct c2_dev *c2dev)
        /* change ethxxx to iwxxx */
        strcpy(name, "iw");
        strcat(name, &c2dev->netdev->name[3]);
-       netdev = alloc_netdev(sizeof(*netdev), name, setup);
+       netdev = alloc_netdev(0, name, setup);
        if (!netdev) {
                printk(KERN_ERR PFX "%s -  etherdev alloc failed",
                        __func__);
                return NULL;
        }
 
-       netdev->priv = c2dev;
+       netdev->ml_priv = c2dev;
 
        SET_NETDEV_DEV(netdev, &c2dev->pcidev->dev);
 
@@ -781,11 +781,11 @@ int c2_register_device(struct c2_dev *dev)
        /* Register pseudo network device */
        dev->pseudo_netdev = c2_pseudo_netdev_init(dev);
        if (!dev->pseudo_netdev)
-               goto out3;
+               goto out;
 
        ret = register_netdev(dev->pseudo_netdev);
        if (ret)
-               goto out2;
+               goto out_free_netdev;
 
        pr_debug("%s:%u\n", __func__, __LINE__);
        strlcpy(dev->ibdev.name, "amso%d", IB_DEVICE_NAME_MAX);
@@ -852,6 +852,10 @@ int c2_register_device(struct c2_dev *dev)
        dev->ibdev.post_recv = c2_post_receive;
 
        dev->ibdev.iwcm = kmalloc(sizeof(*dev->ibdev.iwcm), GFP_KERNEL);
+       if (dev->ibdev.iwcm == NULL) {
+               ret = -ENOMEM;
+               goto out_unregister_netdev;
+       }
        dev->ibdev.iwcm->add_ref = c2_add_ref;
        dev->ibdev.iwcm->rem_ref = c2_rem_ref;
        dev->ibdev.iwcm->get_qp = c2_get_qp;
@@ -863,23 +867,25 @@ int c2_register_device(struct c2_dev *dev)
 
        ret = ib_register_device(&dev->ibdev);
        if (ret)
-               goto out1;
+               goto out_free_iwcm;
 
        for (i = 0; i < ARRAY_SIZE(c2_dev_attributes); ++i) {
                ret = device_create_file(&dev->ibdev.dev,
                                               c2_dev_attributes[i]);
                if (ret)
-                       goto out0;
+                       goto out_unregister_ibdev;
        }
-       goto out3;
+       goto out;
 
-out0:
+out_unregister_ibdev:
        ib_unregister_device(&dev->ibdev);
-out1:
+out_free_iwcm:
+       kfree(dev->ibdev.iwcm);
+out_unregister_netdev:
        unregister_netdev(dev->pseudo_netdev);
-out2:
+out_free_netdev:
        free_netdev(dev->pseudo_netdev);
-out3:
+out:
        pr_debug("%s:%u ret=%d\n", __func__, __LINE__, ret);
        return ret;
 }