kni: fix large stack frame size
[dpdk.git] / lib / librte_eal / linuxapp / kni / kni_misc.c
index 59d15ca..097db32 100644 (file)
@@ -55,8 +55,10 @@ extern void kni_set_ethtool_ops(struct net_device *netdev);
 
 extern int ixgbe_kni_probe(struct pci_dev *pdev, struct net_device **lad_dev);
 extern void ixgbe_kni_remove(struct pci_dev *pdev);
+extern struct pci_device_id ixgbe_pci_tbl[];
 extern int igb_kni_probe(struct pci_dev *pdev, struct net_device **lad_dev);
 extern void igb_kni_remove(struct pci_dev *pdev);
+extern struct pci_device_id igb_pci_tbl[];
 
 static int kni_open(struct inode *inode, struct file *file);
 static int kni_release(struct inode *inode, struct file *file);
@@ -192,7 +194,7 @@ out:
 #ifdef HAVE_SIMPLIFIED_PERNET_OPERATIONS
        unregister_pernet_subsys(&kni_net_ops);
 #else
-       register_pernet_gen_subsys(&kni_net_id, &kni_net_ops);
+       unregister_pernet_gen_subsys(kni_net_id, &kni_net_ops);
 #endif
        return rc;
 }
@@ -204,7 +206,7 @@ kni_exit(void)
 #ifdef HAVE_SIMPLIFIED_PERNET_OPERATIONS
        unregister_pernet_subsys(&kni_net_ops);
 #else
-       register_pernet_gen_subsys(&kni_net_id, &kni_net_ops);
+       unregister_pernet_gen_subsys(kni_net_id, &kni_net_ops);
 #endif
        KNI_PRINT("####### DPDK kni module unloaded  #######\n");
 }
@@ -353,17 +355,11 @@ kni_dev_remove(struct kni_dev *dev)
        if (!dev)
                return -ENODEV;
 
-       switch (dev->device_id) {
-       #define RTE_PCI_DEV_ID_DECL_IGB(vend, dev) case (dev):
-       #include <rte_pci_dev_ids.h>
-               igb_kni_remove(dev->pci_dev);
-               break;
-       #define RTE_PCI_DEV_ID_DECL_IXGBE(vend, dev) case (dev):
-       #include <rte_pci_dev_ids.h>
-               ixgbe_kni_remove(dev->pci_dev);
-               break;
-       default:
-               break;
+       if (dev->pci_dev) {
+               if (pci_match_id(ixgbe_pci_tbl, dev->pci_dev))
+                       ixgbe_kni_remove(dev->pci_dev);
+               else if (pci_match_id(igb_pci_tbl, dev->pci_dev))
+                       igb_kni_remove(dev->pci_dev);
        }
 
        if (dev->net_dev) {
@@ -464,9 +460,6 @@ kni_ioctl_create(struct net *net,
        kni->sync_va = dev_info.sync_va;
        kni->sync_kva = phys_to_virt(dev_info.sync_phys);
 
-       kni->mbuf_kva = phys_to_virt(dev_info.mbuf_phys);
-       kni->mbuf_va = dev_info.mbuf_va;
-
 #ifdef RTE_KNI_VHOST
        kni->vhost_queue = NULL;
        kni->vq_status = BE_STOP;
@@ -485,9 +478,6 @@ kni_ioctl_create(struct net *net,
                (unsigned long long) dev_info.req_phys, kni->req_q);
        KNI_PRINT("resp_phys:    0x%016llx, resp_q addr:    0x%p\n",
                (unsigned long long) dev_info.resp_phys, kni->resp_q);
-       KNI_PRINT("mbuf_phys:    0x%016llx, mbuf_kva:       0x%p\n",
-               (unsigned long long) dev_info.mbuf_phys, kni->mbuf_kva);
-       KNI_PRINT("mbuf_va:      0x%p\n", dev_info.mbuf_va);
        KNI_PRINT("mbuf_size:    %u\n", kni->mbuf_size);
 
        KNI_DBG("PCI: %02x:%02x.%02x %04x:%04x\n",
@@ -510,20 +500,13 @@ kni_ioctl_create(struct net *net,
                        (PCI_SLOT(pci->devfn) == dev_info.devid) &&
                        (PCI_FUNC(pci->devfn) == dev_info.function)) {
                        found_pci = pci;
-                       switch (dev_info.device_id) {
-                       #define RTE_PCI_DEV_ID_DECL_IGB(vend, dev) case (dev):
-                       #include <rte_pci_dev_ids.h>
-                               ret = igb_kni_probe(found_pci, &lad_dev);
-                               break;
-                       #define RTE_PCI_DEV_ID_DECL_IXGBE(vend, dev) \
-                                                       case (dev):
-                       #include <rte_pci_dev_ids.h>
+
+                       if (pci_match_id(ixgbe_pci_tbl, found_pci))
                                ret = ixgbe_kni_probe(found_pci, &lad_dev);
-                               break;
-                       default:
+                       else if (pci_match_id(igb_pci_tbl, found_pci))
+                               ret = igb_kni_probe(found_pci, &lad_dev);
+                       else
                                ret = -1;
-                               break;
-                       }
 
                        KNI_DBG("PCI found: pci=0x%p, lad_dev=0x%p\n",
                                                        pci, lad_dev);
@@ -558,7 +541,9 @@ kni_ioctl_create(struct net *net,
        if (ret) {
                KNI_ERR("error %i registering device \"%s\"\n",
                                        ret, dev_info.name);
+               kni->net_dev = NULL;
                kni_dev_remove(kni);
+               free_netdev(net_dev);
                return -ENODEV;
        }