kni: refactor user request processing
authorStephen Hemminger <stephen@networkplumber.org>
Mon, 29 Mar 2021 14:36:53 +0000 (15:36 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 20 Apr 2021 23:04:19 +0000 (01:04 +0200)
Refactor the parameter kni_net_process_request() gets, this is
preparation for addressing a user request processing deadlock problem.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Elad Nachman <eladv6@gmail.com>
kernel/linux/kni/kni_net.c

index 4b75208..b830054 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/skbuff.h>
 #include <linux/kthread.h>
 #include <linux/delay.h>
+#include <linux/rtnetlink.h>
 
 #include <rte_kni_common.h>
 #include <kni_fifo.h>
@@ -102,17 +103,15 @@ get_data_kva(struct kni_dev *kni, void *pkt_kva)
  * It can be called to process the request.
  */
 static int
-kni_net_process_request(struct kni_dev *kni, struct rte_kni_request *req)
+kni_net_process_request(struct net_device *dev, struct rte_kni_request *req)
 {
+       struct kni_dev *kni = netdev_priv(dev);
        int ret = -1;
        void *resp_va;
        uint32_t num;
        int ret_val;
 
-       if (!kni || !req) {
-               pr_err("No kni instance or request\n");
-               return -EINVAL;
-       }
+       ASSERT_RTNL();
 
        mutex_lock(&kni->sync_lock);
 
@@ -155,7 +154,6 @@ kni_net_open(struct net_device *dev)
 {
        int ret;
        struct rte_kni_request req;
-       struct kni_dev *kni = netdev_priv(dev);
 
        netif_start_queue(dev);
        if (kni_dflt_carrier == 1)
@@ -168,7 +166,7 @@ kni_net_open(struct net_device *dev)
 
        /* Setting if_up to non-zero means up */
        req.if_up = 1;
-       ret = kni_net_process_request(kni, &req);
+       ret = kni_net_process_request(dev, &req);
 
        return (ret == 0) ? req.result : ret;
 }
@@ -178,7 +176,6 @@ kni_net_release(struct net_device *dev)
 {
        int ret;
        struct rte_kni_request req;
-       struct kni_dev *kni = netdev_priv(dev);
 
        netif_stop_queue(dev); /* can't transmit any more */
        netif_carrier_off(dev);
@@ -188,7 +185,7 @@ kni_net_release(struct net_device *dev)
 
        /* Setting if_up to 0 means down */
        req.if_up = 0;
-       ret = kni_net_process_request(kni, &req);
+       ret = kni_net_process_request(dev, &req);
 
        return (ret == 0) ? req.result : ret;
 }
@@ -643,14 +640,13 @@ kni_net_change_mtu(struct net_device *dev, int new_mtu)
 {
        int ret;
        struct rte_kni_request req;
-       struct kni_dev *kni = netdev_priv(dev);
 
        pr_debug("kni_net_change_mtu new mtu %d to be set\n", new_mtu);
 
        memset(&req, 0, sizeof(req));
        req.req_id = RTE_KNI_REQ_CHANGE_MTU;
        req.new_mtu = new_mtu;
-       ret = kni_net_process_request(kni, &req);
+       ret = kni_net_process_request(dev, &req);
        if (ret == 0 && req.result == 0)
                dev->mtu = new_mtu;
 
@@ -661,7 +657,6 @@ static void
 kni_net_change_rx_flags(struct net_device *netdev, int flags)
 {
        struct rte_kni_request req;
-       struct kni_dev *kni = netdev_priv(netdev);
 
        memset(&req, 0, sizeof(req));
 
@@ -683,7 +678,7 @@ kni_net_change_rx_flags(struct net_device *netdev, int flags)
                        req.promiscusity = 0;
        }
 
-       kni_net_process_request(kni, &req);
+       kni_net_process_request(netdev, &req);
 }
 
 /*
@@ -742,7 +737,6 @@ kni_net_set_mac(struct net_device *netdev, void *p)
 {
        int ret;
        struct rte_kni_request req;
-       struct kni_dev *kni;
        struct sockaddr *addr = p;
 
        memset(&req, 0, sizeof(req));
@@ -754,8 +748,7 @@ kni_net_set_mac(struct net_device *netdev, void *p)
        memcpy(req.mac_addr, addr->sa_data, netdev->addr_len);
        memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
 
-       kni = netdev_priv(netdev);
-       ret = kni_net_process_request(kni, &req);
+       ret = kni_net_process_request(netdev, &req);
 
        return (ret == 0 ? req.result : ret);
 }