From patchwork Thu Jun 28 22:46:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Gora X-Patchwork-Id: 41888 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A44F58D8F; Fri, 29 Jun 2018 00:47:20 +0200 (CEST) Received: from mail-ot0-f180.google.com (mail-ot0-f180.google.com [74.125.82.180]) by dpdk.org (Postfix) with ESMTP id B19A68D88 for ; Fri, 29 Jun 2018 00:47:18 +0200 (CEST) Received: by mail-ot0-f180.google.com with SMTP id d19-v6so7941498oti.8 for ; Thu, 28 Jun 2018 15:47:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=OQf1xzRsloSmaaOq3NyvPQSYZQh//yOoNl7ygYWXcz0=; b=LAbs277lfRnsSSl+lIt5hri5mdF2pybLMu3IhgtI7rjV1ni8bGjLvRNr8fmLPUkU5p Wl9YMDP4rQKe/sfIjiO+rnNAkYjc4S8ZBblyuiJ+5cCyf0sR8UZDibasqt78Pvh3+RN2 A6mzNNwfdDBmGT/3RkdVyVh1ED4cO/scP0WLSF9nir7UZiYmm5JrLvkHXIJtOX04RkqD lWTzbpwd2nn8xKsL24kVlllRuIYvEurEiyayktdGX0OkaxAnnf02dOfYU3LTffAJ8Qyp +2UcHR6HnEWwqpabz8PttVkTSJcboHtqC4Lvs0xhi9Yo6Ik4kiVNZpwBddelL++IUrR5 SMAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=OQf1xzRsloSmaaOq3NyvPQSYZQh//yOoNl7ygYWXcz0=; b=Evr483J3obOps5+uu4lgkWvOw53wqzcwkT8i5rvCm8IS/HPRva6fsYH57fgcpKkGhu G3MT/45vI96pc+xRrYvd1OzxRou2h+awShnIvuRi2wpGkmtM0hVyOlrXNUQuOfO44UAE ISwbk0Vpsy1uMevSQtbNqVE96BGQE3eEfIKbNOntLU7tNKHPRbf3cf2z/yBkX6P5jmCS yQJFCy/MI+VQkRi6UDNiaHwWRDSGrhy7r1mgIMr5NDgW6mqoZl0rzvhCHj1ynADVjQIG bavmvQTxYBAG+xd0kha6jDcUJclBFCjf8Yign8J8kidIXvv3BnGAx27Qcs2TP0+ujgXQ U+oA== X-Gm-Message-State: APt69E1l5AGuu7rZwH6H9CYEZ+RnEH6DALOdA2arPzvvEtruCrm00XWB 8sSiNmNB43rQALsQGCeRYHw= X-Google-Smtp-Source: AAOMgpeBymr5joID1DYwPTVFg02I9m5Y/lx0lhbh8oKTzqwKVMXxyd/9t89BNh0ssbndf7raF5C/tw== X-Received: by 2002:a9d:1370:: with SMTP id q45-v6mr7761333otq.46.1530226037939; Thu, 28 Jun 2018 15:47:17 -0700 (PDT) Received: from linux.adax.com (172-11-198-60.lightspeed.sntcca.sbcglobal.net. [172.11.198.60]) by smtp.gmail.com with ESMTPSA id b12-v6sm3290561oiy.43.2018.06.28.15.47.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 28 Jun 2018 15:47:17 -0700 (PDT) From: Dan Gora To: Ferruh Yigit Cc: dev@dpdk.org, Dan Gora Date: Thu, 28 Jun 2018 15:46:04 -0700 Message-Id: <20180628224604.18729-1-dg@adax.com> X-Mailer: git-send-email 2.18.0.rc1.1.g6f333ff2f Subject: [dpdk-dev] [PATCH 01/10] kni: remove unused variables from struct kni_dev X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Remove the unused fields 'status' and 'synchro' from the struct kni_dev. Signed-off-by: Dan Gora --- kernel/linux/kni/kni_dev.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/kernel/linux/kni/kni_dev.h b/kernel/linux/kni/kni_dev.h index 6275ef27f..ed42989cc 100644 --- a/kernel/linux/kni/kni_dev.h +++ b/kernel/linux/kni/kni_dev.h @@ -37,7 +37,6 @@ struct kni_dev { struct list_head list; struct net_device_stats stats; - int status; uint16_t group_id; /* Group ID of a group of KNI devices */ uint32_t core_id; /* Core ID to bind */ char name[RTE_KNI_NAMESIZE]; /* Network device name */ @@ -82,9 +81,6 @@ struct kni_dev { /* mbuf size */ uint32_t mbuf_size; - /* synchro for request processing */ - unsigned long synchro; - /* buffers */ void *pa[MBUF_BURST_SZ]; void *va[MBUF_BURST_SZ]; From patchwork Thu Jun 28 22:47:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Gora X-Patchwork-Id: 41889 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CB3741B027; Fri, 29 Jun 2018 00:47:55 +0200 (CEST) Received: from mail-ot0-f195.google.com (mail-ot0-f195.google.com [74.125.82.195]) by dpdk.org (Postfix) with ESMTP id 358608DA6 for ; Fri, 29 Jun 2018 00:47:54 +0200 (CEST) Received: by mail-ot0-f195.google.com with SMTP id w13-v6so7939803ote.11 for ; Thu, 28 Jun 2018 15:47:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=ytOC7mp7wKfFaY5qMuyGH7qZSDHYGCEQGPP3dfwcCDQ=; b=EHN6+KORqM264oGHLZ2Vg+8MiIpOnfbO49KvqVJXp/fFw8yGQzDQqjpgIZ/ME8nHdU I86SR/gZ2xINcyB76hJlNqjCP94NdswAcgoOgrWH2k7to+WqbalD09i5MMtKukMqK+2K xzgbe4pth2VjpLO5rJIKbfSAdODesf9s+MM7uGBA3E8DlLSgz4k3RZdKU2fwGRQMNWXz klKujDZ3UMc6PmclyLilZy3WxYvQEKSMHdPyFKxrEqI6gsTOtQ929O+hEj8Ttp+1QLcQ NZUgfuVkVn/VAGBPq+Ikynt76LC7lHhD4dpOdhlMS6gdP6+wi86SigVLY/dU2xuLyCit BTdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=ytOC7mp7wKfFaY5qMuyGH7qZSDHYGCEQGPP3dfwcCDQ=; b=RhlWo+rpoeg2jcBDC+z/ckXk8EUEcuHpUhx5W6MyQgSWtW0J9qBCt3q1wRqwX29lhr erGjdZ38uDQRc/TDy4hbG3ZBKlYTfW/lvlreI9Jwgm9qDSyTDkPX8luqqxsbEOEVpPVf wmxqOt0tstaNG0cF7VKE3MMwifO5yw3Xd/HUB1ye7YuVgifOEtm1BH47XjC37WN3lXGq /hbj9ZPPpbY15RqfAY0PjKqBeC3GC/9u37odP9+tvj7CpjPqp8EvMpRlOyx1mSjNDxFG X5M3fEE+XyjMCc/ET9+9Z7Q0Na7S9zD8aFXKuN+9Skd3v1OB2SU/km8OW5pfZjB3oHyV 8vpg== X-Gm-Message-State: APt69E0L8xwSXZTPBM+TYv0vZK31RO7RnT9aU9S1tYQvlrw6ylKn+X2B X1RA7i5kggkFqrCC3FQrc9elOA== X-Google-Smtp-Source: AAOMgpfzDurB8hcXO2E7rFfcH2lcOz/UQ2l5EF7r3heoxc9gO4/sYAeojuIEcL33NPAMItvcxdiMGw== X-Received: by 2002:a9d:706:: with SMTP id 6-v6mr3639266ote.268.1530226073337; Thu, 28 Jun 2018 15:47:53 -0700 (PDT) Received: from linux.adax.com (172-11-198-60.lightspeed.sntcca.sbcglobal.net. [172.11.198.60]) by smtp.gmail.com with ESMTPSA id k47-v6sm7611259otb.50.2018.06.28.15.47.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 28 Jun 2018 15:47:52 -0700 (PDT) From: Dan Gora To: Ferruh Yigit Cc: dev@dpdk.org, Dan Gora Date: Thu, 28 Jun 2018 15:47:48 -0700 Message-Id: <20180628224748.19273-1-dg@adax.com> X-Mailer: git-send-email 2.18.0.rc1.1.g6f333ff2f Subject: [dpdk-dev] [PATCH 02/10] kni: separate releasing netdev from freeing KNI interface X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Currently the rte_kni kernel driver suffers from a problem where when the interface is released, it generates a callback to the DPDK application to change the interface state to Down. However, after the DPDK application handles the callback and generates a response back to the kernel, the rte_kni driver cannot wake the thread which is asleep waiting for the response, because it is holding the kni_link_lock semaphore and it has already removed the 'struct kni_dev' from the list of interfaces to poll for responses. This means that if the KNI interface is in the Up state when rte_kni_release() is called, it will always sleep for three seconds until kni_net_release gives up waiting for a response from the DPDK application. To fix this, we must separate the step to release the kernel network interface from the steps to remove the KNI interface from the list of interfaces to poll. When the kernel network interface is removed with unregister_netdev(), if the interface is up, it will generate a callback to mark the interface down, which calls kni_net_release(). kni_net_release() will block waiting for the DPDK application to call rte_kni_handle_request() to handle the callback, but it also needs the thread in the KNI driver (either the per-dev thread for multi-thread or the per-driver thread) to call kni_net_poll_resp() in order to wake the thread sleeping in kni_net_release (actually kni_net_process_request()). So now, KNI interfaces should be removed as such: 1) The user calls rte_kni_release(). This only unregisters the netdev in the kernel, but touches nothing else. This allows all the threads to run which are necessary to handle the callback into the DPDK application to mark the interface down. 2) The user stops the thread running rte_kni_handle_request(). After rte_kni_release() has been called, there will be no more callbacks for that interface so it is not necessary. It cannot be running at the same time that rte_kni_free() frees all of the FIFOs and DPDK memory for that KNI interface. 3) The user calls rte_kni_free(). This performs the RTE_KNI_IOCTL_FREE ioctl which calls kni_ioctl_free(). This function removes the struct kni_dev from the list of interfaces to poll (and kills the per-dev kthread, if configured for multi-thread), then frees the memory in the FIFOs. Signed-off-by: Dan Gora --- kernel/linux/kni/kni_misc.c | 69 +++++++++++++++---- .../eal/include/exec-env/rte_kni_common.h | 1 + 2 files changed, 58 insertions(+), 12 deletions(-) diff --git a/kernel/linux/kni/kni_misc.c b/kernel/linux/kni/kni_misc.c index fa69f8e63..d889ffc4b 100644 --- a/kernel/linux/kni/kni_misc.c +++ b/kernel/linux/kni/kni_misc.c @@ -192,8 +192,6 @@ kni_dev_remove(struct kni_dev *dev) free_netdev(dev->net_dev); } - kni_net_release_fifo_phy(dev); - return 0; } @@ -224,6 +222,7 @@ kni_release(struct inode *inode, struct file *file) } kni_dev_remove(dev); + kni_net_release_fifo_phy(dev); list_del(&dev->list); } up_write(&knet->kni_list_lock); @@ -263,7 +262,6 @@ kni_run_thread(struct kni_net *knet, struct kni_dev *kni, uint8_t force_bind) kni->pthread = kthread_create(kni_thread_multiple, (void *)kni, "kni_%s", kni->name); if (IS_ERR(kni->pthread)) { - kni_dev_remove(kni); return -ECANCELED; } @@ -278,7 +276,6 @@ kni_run_thread(struct kni_net *knet, struct kni_dev *kni, uint8_t force_bind) (void *)knet, "kni_single"); if (IS_ERR(knet->kni_kthread)) { mutex_unlock(&knet->kni_kthread_lock); - kni_dev_remove(kni); return -ECANCELED; } @@ -460,15 +457,17 @@ kni_ioctl_create(struct net *net, uint32_t ioctl_num, if (ret) { pr_err("error %i registering device \"%s\"\n", ret, dev_info.name); - kni->net_dev = NULL; - kni_dev_remove(kni); + kni_net_release_fifo_phy(kni); free_netdev(net_dev); return -ENODEV; } ret = kni_run_thread(knet, kni, dev_info.force_bind); - if (ret != 0) + if (ret != 0) { + kni_dev_remove(kni); + kni_net_release_fifo_phy(kni); return ret; + } down_write(&knet->kni_list_lock); list_add(&kni->list, &knet->kni_list_head); @@ -495,6 +494,46 @@ kni_ioctl_release(struct net *net, uint32_t ioctl_num, return -EIO; } + /* Release the network device according to its name */ + if (strlen(dev_info.name) == 0) + return ret; + + down_read(&knet->kni_list_lock); + list_for_each_entry_safe(dev, n, &knet->kni_list_head, list) { + if (strncmp(dev->name, dev_info.name, RTE_KNI_NAMESIZE) != 0) + continue; + + kni_dev_remove(dev); + up_read(&knet->kni_list_lock); + pr_info("Successfully released kni interface: %s\n", + dev_info.name); + return 0; + } + up_read(&knet->kni_list_lock); + pr_info("Error: failed to find kni interface: %s\n", + dev_info.name); + + return ret; +} + +static int +kni_ioctl_free(struct net *net, uint32_t ioctl_num, + unsigned long ioctl_param) +{ + struct kni_net *knet = net_generic(net, kni_net_id); + int ret = -EINVAL; + struct kni_dev *dev, *n; + struct rte_kni_device_info dev_info; + + if (_IOC_SIZE(ioctl_num) > sizeof(dev_info)) + return -EINVAL; + + ret = copy_from_user(&dev_info, (void *)ioctl_param, sizeof(dev_info)); + if (ret) { + pr_err("copy_from_user in kni_ioctl_release"); + return -EIO; + } + /* Release the network device according to its name */ if (strlen(dev_info.name) == 0) return ret; @@ -509,14 +548,17 @@ kni_ioctl_release(struct net *net, uint32_t ioctl_num, dev->pthread = NULL; } - kni_dev_remove(dev); + kni_net_release_fifo_phy(dev); list_del(&dev->list); - ret = 0; - break; + up_write(&knet->kni_list_lock); + pr_info("Successfully freed kni interface: %s\n", + dev_info.name); + return 0; } up_write(&knet->kni_list_lock); - pr_info("%s release kni named %s\n", - (ret == 0 ? "Successfully" : "Unsuccessfully"), dev_info.name); + + pr_info("Error: failed to find kni interface: %s\n", + dev_info.name); return ret; } @@ -542,6 +584,9 @@ kni_ioctl(struct inode *inode, uint32_t ioctl_num, unsigned long ioctl_param) case _IOC_NR(RTE_KNI_IOCTL_RELEASE): ret = kni_ioctl_release(net, ioctl_num, ioctl_param); break; + case _IOC_NR(RTE_KNI_IOCTL_FREE): + ret = kni_ioctl_free(net, ioctl_num, ioctl_param); + break; default: pr_debug("IOCTL default\n"); break; diff --git a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h index cfa9448bd..318a3f939 100644 --- a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h +++ b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h @@ -129,5 +129,6 @@ struct rte_kni_device_info { #define RTE_KNI_IOCTL_TEST _IOWR(0, 1, int) #define RTE_KNI_IOCTL_CREATE _IOWR(0, 2, struct rte_kni_device_info) #define RTE_KNI_IOCTL_RELEASE _IOWR(0, 3, struct rte_kni_device_info) +#define RTE_KNI_IOCTL_FREE _IOWR(0, 4, struct rte_kni_device_info) #endif /* _RTE_KNI_COMMON_H_ */ From patchwork Thu Jun 28 22:48:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Gora X-Patchwork-Id: 41890 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A92CB37AF; Fri, 29 Jun 2018 00:51:26 +0200 (CEST) Received: from mail-ot0-f194.google.com (mail-ot0-f194.google.com [74.125.82.194]) by dpdk.org (Postfix) with ESMTP id 4451A31FC for ; Fri, 29 Jun 2018 00:51:25 +0200 (CEST) Received: by mail-ot0-f194.google.com with SMTP id h6-v6so7966140otj.0 for ; Thu, 28 Jun 2018 15:51:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=fGC1/toUFvY8asYAO6HL+f7p7INZeOaqNCTBQH8reiw=; b=nWJ4YXoKo6/cToyF9ZZaK+tzo0VUdy1IHvF+x7n9hm4AZ2ObmTBV++V2s+K6RzTKud +qz1OsOezsqOL6dasdUE2T5jZ/BZjRoXqPWHC1shl5qaptCw8M4V6AsL7SZlzDa1Npsy gULRzE1I7TPPBol0TsyBpMnBkzPOzf4nswhSsYjRWtj31CvU5FdnN46Dqu7s0EcEM1G5 U/iFdro/gvf2L0e/UvRzGY88PTIYF2THBFfGXsfKoTWQIN4Blo1F2z41LFfWyL9EwOdZ u9tM95Twq7O6rdVrSStfzFEhKQIEeivDLpbvR+m423xiR3PirYzejbDpzyh6yffJ8ETB fxhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=fGC1/toUFvY8asYAO6HL+f7p7INZeOaqNCTBQH8reiw=; b=XNhp1OvJpTzDbGwPcHy2oc6tQwMfp2F+Z8zRooFkXnVrDRmtvRlypq6h0FSnXjB0h8 IIQpNIsFMGy8ZSCrtTG7860sEIfaSKVqrH2CNzyFvkeJm55phGR7JFdWJZQxgGbCo7pj Oin43xH0r/u7KURGstHJNSzbjBDcHLR3H3hs8kL6IJeZ5bTgShFgFPbmnGK0q8a/uhGd Gp3qjTGk/qcjj6IWZ8pnZamVZ5GAkVcO1KDbUk2TrVkqCeVwYPosVPg/kRRxcd9Nodsh ZLJ5dPigSe1InmCqj36dN8mmM/ggsQ0LgB8l6JQ0/ckHgX68yXHtpCpMXPuoZU3CIEMh +Hmw== X-Gm-Message-State: APt69E3/Z8Tw4laZUDn2N1Y0xWX99iCBolRsexA7nYUYzQqfhAbfAx6E BWvk8kAfQu5QEZk+ESQx6Xc= X-Google-Smtp-Source: AAOMgpcLm1+WC4ijHd94HTIHNXQ5kukemfAmYbsAKS3DJDM35ZP41y3gawu5nXzsqSEcEczlsNJicg== X-Received: by 2002:a9d:6a1:: with SMTP id 30-v6mr6677898otx.3.1530226284423; Thu, 28 Jun 2018 15:51:24 -0700 (PDT) Received: from linux.adax.com (172-11-198-60.lightspeed.sntcca.sbcglobal.net. [172.11.198.60]) by smtp.gmail.com with ESMTPSA id j29-v6sm3735537oth.60.2018.06.28.15.51.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 28 Jun 2018 15:51:23 -0700 (PDT) From: Dan Gora To: Ferruh Yigit Cc: dev@dpdk.org, Dan Gora Date: Thu, 28 Jun 2018 15:48:23 -0700 Message-Id: <20180628224823.19423-1-dg@adax.com> X-Mailer: git-send-email 2.18.0.rc1.1.g6f333ff2f Subject: [dpdk-dev] [PATCH 03/10] kni: don't touch struct kni_dev after freeing X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Since the struct kni_dev is allocated as part of the netdev with alloc_netdev, when free_netdev is called, this also frees the struct kni_dev embedded in it. This means that we cannot touch struct kni_dev after calling free_netdev since that memory was already deallocated. Separate unregistering the net_dev with unregister_netdev from freeing the net_device and kni_dev structures into separate functions and ensure that we do not touch anything in the kni_dev structure after freeing it (ie don't call list_del(), etc...). Signed-off-by: Dan Gora --- kernel/linux/kni/kni_dev.h | 1 + kernel/linux/kni/kni_misc.c | 28 +++++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/kernel/linux/kni/kni_dev.h b/kernel/linux/kni/kni_dev.h index ed42989cc..f9aa90ff9 100644 --- a/kernel/linux/kni/kni_dev.h +++ b/kernel/linux/kni/kni_dev.h @@ -37,6 +37,7 @@ struct kni_dev { struct list_head list; struct net_device_stats stats; + uint16_t registered; /* 0 if already released, 1 otherwise */ uint16_t group_id; /* Group ID of a group of KNI devices */ uint32_t core_id; /* Core ID to bind */ char name[RTE_KNI_NAMESIZE]; /* Network device name */ diff --git a/kernel/linux/kni/kni_misc.c b/kernel/linux/kni/kni_misc.c index d889ffc4b..1c38cfa1a 100644 --- a/kernel/linux/kni/kni_misc.c +++ b/kernel/linux/kni/kni_misc.c @@ -184,17 +184,34 @@ kni_dev_remove(struct kni_dev *dev) ixgbe_kni_remove(dev->pci_dev); else if (pci_match_id(igb_pci_tbl, dev->pci_dev)) igb_kni_remove(dev->pci_dev); + dev->pci_dev = NULL; } #endif - if (dev->net_dev) { + if (dev->registered) { unregister_netdev(dev->net_dev); - free_netdev(dev->net_dev); + dev->registered = 0; } return 0; } +static void +kni_dev_free(struct kni_dev *dev) +{ + struct net_device *net_dev; + /* + * Remember that struct kni_dev is part of the netdev + * structure, so we free *both* with free_netdev. + */ + if (dev == NULL) + return; + net_dev = dev->net_dev; + dev->net_dev = NULL; + if (net_dev) + free_netdev(net_dev); +} + static int kni_release(struct inode *inode, struct file *file) { @@ -224,6 +241,7 @@ kni_release(struct inode *inode, struct file *file) kni_dev_remove(dev); kni_net_release_fifo_phy(dev); list_del(&dev->list); + kni_dev_free(dev); } up_write(&knet->kni_list_lock); @@ -457,15 +475,18 @@ kni_ioctl_create(struct net *net, uint32_t ioctl_num, if (ret) { pr_err("error %i registering device \"%s\"\n", ret, dev_info.name); + kni_dev_remove(kni); kni_net_release_fifo_phy(kni); - free_netdev(net_dev); + kni_dev_free(kni); return -ENODEV; } + kni->registered = 1; ret = kni_run_thread(knet, kni, dev_info.force_bind); if (ret != 0) { kni_dev_remove(kni); kni_net_release_fifo_phy(kni); + kni_dev_free(kni); return ret; } @@ -550,6 +571,7 @@ kni_ioctl_free(struct net *net, uint32_t ioctl_num, kni_net_release_fifo_phy(dev); list_del(&dev->list); + kni_dev_free(dev); up_write(&knet->kni_list_lock); pr_info("Successfully freed kni interface: %s\n", dev_info.name); From patchwork Thu Jun 28 22:51:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Gora X-Patchwork-Id: 41891 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7A1DD1B063; Fri, 29 Jun 2018 00:52:07 +0200 (CEST) Received: from mail-ot0-f195.google.com (mail-ot0-f195.google.com [74.125.82.195]) by dpdk.org (Postfix) with ESMTP id 760741B063 for ; Fri, 29 Jun 2018 00:52:05 +0200 (CEST) Received: by mail-ot0-f195.google.com with SMTP id f17-v6so7958198otl.7 for ; Thu, 28 Jun 2018 15:52:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=djh6S5mwETgXxisTt962bYrDK6hsNfq1oEedVn8n42k=; b=Rd50dxHesmnv0zRxm1Tcll0LsP2GhAMpvQVS6TqUZCIpK1FXKc6FLqbKybaLsKwN4l V5tBOXKY7pWQR2GlmpvkOtoU2+LHp6gmMpClZCbxh9+B/WU6nXnXj7suDV+6nkOnL3Dc k9gC4pxPGIJmSxwOSGFwTY6NDIfhFXLekIbhjnlkEAWzTFegX+DToXmarNVzjeSVKu35 jmdnsnBtvTlRKUHILr7Xb6Y+/RVtSMq7Yo0c8klPWyEGZjhq82/eJ4gDpp9EmsxRwVgx SvudnVYfB6rME+8EsOEvLFSR8OZEu7qEO7AtSwHNS2jhk/4pgAvb5FrFINfgKkIv8pF/ 7ioA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=djh6S5mwETgXxisTt962bYrDK6hsNfq1oEedVn8n42k=; b=aAN9B9tR6Im6SAjMuszUY5VlxlFq20YBNRzZe3uYIMXXfg7s0pcTxJbgSg34sqGn+d B4E16qCViLSsjY/usVavbDMncnWtPGd2JcqDgfxckOwmDzJzwiPcfFspCBasArNoO+i/ xVfoaeg/xJQhBZXDdBiMJZX1tvbv8kMUnanwo6p4GvxqtYUkJCjD9DKrXjRKmAOj/BJm HKtbkEvADOrBzInM/2GeIn0QXJwj259pl9Ow2JdYaXwuQs17AXMN+i+8DNbz6PFOrpPi 6nhXo/YzaTCwD5ULQBO5KUNtL9zOyUb881VvbrQQvgZ5kIXUEHR5uV3vPNWlMHnofTrA haJQ== X-Gm-Message-State: APt69E3mRYSyIMkKhtQnXxMySwuYbg2deMKe3xgCL/lk3TUDl7cX/Rqe hzrMJhlavg5bVVZU8DEzFsY= X-Google-Smtp-Source: AAOMgpce3cC13VboG7sxgxQvxHx7koRmjsEz8bdvplppLK3n9ctiwPgjtXW1sbrrSkT1lZaD3ul8ug== X-Received: by 2002:a9d:3ba1:: with SMTP id k30-v6mr7649009otc.211.1530226324676; Thu, 28 Jun 2018 15:52:04 -0700 (PDT) Received: from linux.adax.com (172-11-198-60.lightspeed.sntcca.sbcglobal.net. [172.11.198.60]) by smtp.gmail.com with ESMTPSA id 78-v6sm4162457oii.0.2018.06.28.15.52.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 28 Jun 2018 15:52:03 -0700 (PDT) From: Dan Gora To: Ferruh Yigit Cc: dev@dpdk.org, Dan Gora Date: Thu, 28 Jun 2018 15:51:54 -0700 Message-Id: <20180628225154.20556-1-dg@adax.com> X-Mailer: git-send-email 2.18.0.rc1.1.g6f333ff2f Subject: [dpdk-dev] [PATCH 04/10] kni: add rte_kni_free to KNI library X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add the new rte_kni_free() API function to the KNI library. This function will be called by DPDK applications after rte_kni_release() to free the KNI interface resources from the kernel driver. Signed-off-by: Dan Gora --- lib/librte_kni/rte_kni.c | 32 +++++++++++++++++++++++++++++--- lib/librte_kni/rte_kni.h | 31 +++++++++++++++++++++++++++---- 2 files changed, 56 insertions(+), 7 deletions(-) diff --git a/lib/librte_kni/rte_kni.c b/lib/librte_kni/rte_kni.c index 8a8f6c1cc..1d84c0b70 100644 --- a/lib/librte_kni/rte_kni.c +++ b/lib/librte_kni/rte_kni.c @@ -463,8 +463,6 @@ int rte_kni_release(struct rte_kni *kni) { struct rte_kni_device_info dev_info; - uint32_t slot_id; - uint32_t retry = 5; if (!kni || !kni->in_use) return -1; @@ -475,6 +473,34 @@ rte_kni_release(struct rte_kni *kni) return -1; } + kni->in_use = 0; + return 0; +} + +int +rte_kni_free(struct rte_kni *kni) +{ + uint32_t slot_id; + uint32_t retry = 5; + struct rte_kni_device_info dev_info; + + if (!kni) + return -EINVAL; + + /* Must call rte_kni_release() first */ + if (kni->in_use) + return -EBUSY; + + /* + * Free the FIFOs in the kernel and remove it from the list + * of devices to poll + */ + snprintf(dev_info.name, sizeof(dev_info.name), "%s", kni->name); + if (ioctl(kni_fd, RTE_KNI_IOCTL_FREE, &dev_info) < 0) { + RTE_LOG(ERR, KNI, "Fail to release kni device\n"); + return -1; + } + /* mbufs in all fifo should be released, except request/response */ /* wait until all rxq packets processed by kernel */ @@ -497,7 +523,7 @@ rte_kni_release(struct rte_kni *kni) if (slot_id > kni_memzone_pool.max_ifaces) { RTE_LOG(ERR, KNI, "KNI pool: corrupted slot ID: %d, max: %d\n", slot_id, kni_memzone_pool.max_ifaces); - return -1; + return -EINVAL; } kni_memzone_pool_release(&kni_memzone_pool.slots[slot_id]); diff --git a/lib/librte_kni/rte_kni.h b/lib/librte_kni/rte_kni.h index 99055e2c2..d1a95f898 100644 --- a/lib/librte_kni/rte_kni.h +++ b/lib/librte_kni/rte_kni.h @@ -112,11 +112,17 @@ struct rte_kni *rte_kni_alloc(struct rte_mempool *pktmbuf_pool, const struct rte_kni_conf *conf, struct rte_kni_ops *ops); /** - * Release KNI interface according to the context. It will also release the - * paired KNI interface in kernel space. All processing on the specific KNI - * context need to be stopped before calling this interface. + * Release specified KNI interface. This will stop data transfer to and from + * this interface and will remove the paired KNI interface in kernel space. * - * rte_kni_release is thread safe. + * @note This function will trigger the kernel to remove the interface, which + * may trigger the RTE_KNI_REQ_CFG_NETWORK_IF KNI callback. This function will + * block until this callback is handled or times out. The user should ensure + * that rte_kni_handle_request() is called for this interface in a separate + * thread to handle this callback to avoid this delay. + * + * rte_kni_release() is thread safe, but should not be called from the same + * thread as rte_kni_handle_request(). * * @param kni * The pointer to the context of an existent KNI interface. @@ -127,6 +133,23 @@ struct rte_kni *rte_kni_alloc(struct rte_mempool *pktmbuf_pool, */ int rte_kni_release(struct rte_kni *kni); +/** + * Free specified KNI interface. It will also free the KNI interface resources + * in kernel space. No KNI functions for this interface should be called after + * or at the same time as calling this function. rte_kni_release() must be + * called before this function to release the kernel interface. + * + * @param kni + * The pointer to the context of an existent KNI interface. + * + * @return + * - 0 indicates success. + * - -EINVAL: Invalid kni structure. + * - -EBUSY: KNI interface still in use. Must call rte_kni_release(). + */ +int __rte_experimental +rte_kni_free(struct rte_kni *kni); + /** * It is used to handle the request mbufs sent from kernel space. * Then analyzes it and calls the specific actions for the specific requests. From patchwork Thu Jun 28 22:52:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Gora X-Patchwork-Id: 41892 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9DE331B059; Fri, 29 Jun 2018 00:52:45 +0200 (CEST) Received: from mail-oi0-f65.google.com (mail-oi0-f65.google.com [209.85.218.65]) by dpdk.org (Postfix) with ESMTP id 077871B006 for ; Fri, 29 Jun 2018 00:52:43 +0200 (CEST) Received: by mail-oi0-f65.google.com with SMTP id 8-v6so2131163oin.10 for ; Thu, 28 Jun 2018 15:52:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=S1g3e3n/4fwp3C2kckm+nJ4Q8ogPllXouqe+NAUrqAU=; b=MY2zqu/r9lnJIInFwc4C19VLpY0jYv1MaM7ifsw0XyuBqL20eASIPO0SX/tWSJ0UmG 7QxC3UgjzM2v83vTrk1jp66KiomupmeGKVwgp5dGQufsS/4gwwRqad5oIcNuv5N2V4wF +CGsOhc1INtZxmtyQVA5VjAoitf0LQalQM8XEHhgjri00h4Qs4RkRMCBhG1Lhsc90klh TCXwWV1pq3b8NAsY5NhdfuMcmsupjR5mbxcIgud73auRA1QCxq4FOzYpuYFmynZy+1o2 lhYjRBLcTWrivbuOOcuh222DT7EyoC0YFkWV953BoGRqATLSxAPgQiXkGaS5hid199qy tUqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=S1g3e3n/4fwp3C2kckm+nJ4Q8ogPllXouqe+NAUrqAU=; b=MqhNlAFL6WFV1VM98GYUznYqjRDaJkQM39ch15lJeGrAff5ePkgRbDPPfu+mg8qYBp cASynDQiRbsZUokAkb2aAxvpqXg7T7p8qf5e3cvnozO63FahE/g7MDnBLT9FaJU8KIf0 qxgeeDp8bWByvlykxsQfefQSWklAnHVS5MDkTBY1eIH2jK5ddEYyBrwDrmOP+BjcPqmL 8ArB3ij/UMycqvlGAtpbwACSMnpkykE8Zn/PlNUo2+6q0VV+ODis/bc+wLbYb4J0T9jG GEAImOh9VMePeSfUKMhTLFJAKZbNtY2XajldYX3lZWRbMPzvfke12n1RhcZhbpZF/1tO 38vw== X-Gm-Message-State: APt69E023ujeAzaaLK07Y8d77zOf6zRwqaq119h7FtWZIvGOV27XuaNA Myk5Cqid1P4vk6gfIaM7IBs= X-Google-Smtp-Source: AAOMgpdOasPNKhs80vFDS1sqe6RtQIhc36optvgH/sDHoSvHRNkg2HcEi5dMmDtFoFnNF7/j75DG9w== X-Received: by 2002:aca:bf82:: with SMTP id p124-v6mr6394203oif.344.1530226363162; Thu, 28 Jun 2018 15:52:43 -0700 (PDT) Received: from linux.adax.com (172-11-198-60.lightspeed.sntcca.sbcglobal.net. [172.11.198.60]) by smtp.gmail.com with ESMTPSA id w5-v6sm218020ote.66.2018.06.28.15.52.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 28 Jun 2018 15:52:42 -0700 (PDT) From: Dan Gora To: Ferruh Yigit Cc: dev@dpdk.org, Dan Gora Date: Thu, 28 Jun 2018 15:52:35 -0700 Message-Id: <20180628225235.20684-1-dg@adax.com> X-Mailer: git-send-email 2.18.0.rc1.1.g6f333ff2f Subject: [dpdk-dev] [PATCH 05/10] kni: don't run rte_kni_handle_request after interface release X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Check to ensure that the KNI interface is still in use before accessing the KNI interface FIFOs to kernel space. This will help to ensure that the user does not access the KNI interface after rte_kni_release() has been called. Signed-off-by: Dan Gora --- lib/librte_kni/rte_kni.c | 6 +++++- lib/librte_kni/rte_kni.h | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/librte_kni/rte_kni.c b/lib/librte_kni/rte_kni.c index 1d84c0b70..6ef0859bf 100644 --- a/lib/librte_kni/rte_kni.c +++ b/lib/librte_kni/rte_kni.c @@ -578,7 +578,11 @@ rte_kni_handle_request(struct rte_kni *kni) unsigned ret; struct rte_kni_request *req; - if (kni == NULL) + /* + * Don't touch the req/resp fifos after + * we've been released, we can be freed at any instant! + */ + if (kni == NULL || !kni->in_use) return -1; /* Get request mbuf */ diff --git a/lib/librte_kni/rte_kni.h b/lib/librte_kni/rte_kni.h index d1a95f898..94516c38f 100644 --- a/lib/librte_kni/rte_kni.h +++ b/lib/librte_kni/rte_kni.h @@ -155,6 +155,10 @@ rte_kni_free(struct rte_kni *kni); * Then analyzes it and calls the specific actions for the specific requests. * Finally constructs the response mbuf and puts it back to the resp_q. * + * Thread Safety: This function should be called in a separate thread from the + * thread which calls rte_kni_release() for this KNI. This function must not + * be called simultaneously with rte_kni_free(). + * * @param kni * The pointer to the context of an existent KNI interface. * From patchwork Thu Jun 28 22:53:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Gora X-Patchwork-Id: 41893 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A9A861B398; Fri, 29 Jun 2018 00:53:22 +0200 (CEST) Received: from mail-oi0-f45.google.com (mail-oi0-f45.google.com [209.85.218.45]) by dpdk.org (Postfix) with ESMTP id 4EC021B14C for ; Fri, 29 Jun 2018 00:53:21 +0200 (CEST) Received: by mail-oi0-f45.google.com with SMTP id 18-v6so6756475oiq.6 for ; Thu, 28 Jun 2018 15:53:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=yk6ajylhCv2817isDp+jSmjdtU2ydbjBdyBIiIlc2qs=; b=nL/NK16y1WCx013vJqksqEKKh2uONNlHWVKVzQnK51IZ7qb1CnSC5s6YiXleQs2Y/r Mjx3BHQf6JsCx884guB71OBKMBOPX5/3C8fi2agS5qvY7yjXnFmoVkB44eKbMoUtE0ee ane3hbpe5HxIXCypWJ2DDMsOJ0+Iadd4msWxB3G/JJBctRVIJlaCPGaqGj96UvQAUQ05 D/GpiJ8PX18OgVZgF53q1aQJ3kJaC1aQ2gqSFqmB5I18qdXn8esNHpfYxkrN/YaSkPFe uGqVxqsPwgWBoDfgIosRpdN+cQFKk5i8+S9bi4AkZFQZnKB+qHcWh8XqN/wldi1tkcGc ExJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=yk6ajylhCv2817isDp+jSmjdtU2ydbjBdyBIiIlc2qs=; b=RiTgcmkzp9jG9kRrYCZDnnQr8xblU0tBUnJS3Hghcwem2csRs6yFdZOuq2zbY5onGp 1x9Ne3CyLtWvsbes1q5cxEU+6C6dRO189eOTtQix+VmiWwS9IKCcxXBeHL3k7TW0siTX mgGRkVzbsXaoLwC4ApqtkX3pw9/ofgJmbOXQpKH/g78d2pNMgoyvIxG8fX/J54XYJWrA J6UVXQcwF7QI5oJom7sYCC87vWG//zroM/Vz57aW57aXrnhBTQyuCR/PubGbl5iE33kx 7GNGyBV0cyRRIMqtHnjR5mJE8E7B6kcGTG5gDu23KygAflMeoXoFbZxQzKjQxzofNw1Q 242A== X-Gm-Message-State: APt69E0oZ9MSqgEwvlhnyL2as6ZIO4eGqcyU/d4JvwvjKag1BJkhKEcr aX+um1yG7+PPi7a965+TOFasvA== X-Google-Smtp-Source: AAOMgpdhXdE8mymZsmfTeIVhRNi+yFAJDsm2Hjzq36hne1O3G7KdXcuArNGsDFm15vipykcAjgmESw== X-Received: by 2002:aca:ce85:: with SMTP id e127-v6mr5189585oig.169.1530226400471; Thu, 28 Jun 2018 15:53:20 -0700 (PDT) Received: from linux.adax.com (172-11-198-60.lightspeed.sntcca.sbcglobal.net. [172.11.198.60]) by smtp.gmail.com with ESMTPSA id c2-v6sm3949908oia.53.2018.06.28.15.53.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 28 Jun 2018 15:53:19 -0700 (PDT) From: Dan Gora To: Ferruh Yigit Cc: dev@dpdk.org, Dan Gora Date: Thu, 28 Jun 2018 15:53:13 -0700 Message-Id: <20180628225313.20959-1-dg@adax.com> X-Mailer: git-send-email 2.18.0.rc1.1.g6f333ff2f Subject: [dpdk-dev] [PATCH 06/10] kni: increase length of timeout for KNI responses X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Increase the timeout to receive a response for KNI events handled through kni_net_process_request to 10 seconds. Certain actions, such as calling rte_eth_dev_start() can take more than 3 seconds to return, in addition to any additional time needed for the DPDK application to call rte_kni_handle_request(). Signed-off-by: Dan Gora --- kernel/linux/kni/kni_net.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel/linux/kni/kni_net.c b/kernel/linux/kni/kni_net.c index 7fcfa106c..0850be434 100644 --- a/kernel/linux/kni/kni_net.c +++ b/kernel/linux/kni/kni_net.c @@ -25,7 +25,7 @@ #define WD_TIMEOUT 5 /*jiffies */ -#define KNI_WAIT_RESPONSE_TIMEOUT 300 /* 3 seconds */ +#define KNI_WAIT_RESPONSE_TIMEOUT 10 /* 10 seconds */ /* typedef for rx function */ typedef void (*kni_net_rx_t)(struct kni_dev *kni); @@ -101,7 +101,8 @@ kni_net_process_request(struct kni_dev *kni, struct rte_kni_request *req) } ret_val = wait_event_interruptible_timeout(kni->wq, - kni_fifo_count(kni->resp_q), 3 * HZ); + kni_fifo_count(kni->resp_q), + KNI_WAIT_RESPONSE_TIMEOUT * HZ); if (signal_pending(current) || ret_val <= 0) { ret = -ETIME; goto fail; From patchwork Thu Jun 28 22:53:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Gora X-Patchwork-Id: 41894 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8B4B41B152; Fri, 29 Jun 2018 00:53:58 +0200 (CEST) Received: from mail-oi0-f52.google.com (mail-oi0-f52.google.com [209.85.218.52]) by dpdk.org (Postfix) with ESMTP id D681A1B063 for ; Fri, 29 Jun 2018 00:53:56 +0200 (CEST) Received: by mail-oi0-f52.google.com with SMTP id y207-v6so6728347oie.13 for ; Thu, 28 Jun 2018 15:53:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=tgYS8jjwdQq+l5ch4bOFMmfEqsoOSUE+XJwad7xwZKw=; b=XnWJXaox/ijXpjs3SUuxrymHn8NAasJ39RFSYZWjxeV6VIDt29URP+59pc2e+gsWxI Vhx+MjmOjkntXH81ehkXiFHhceZ+EaUxV/mkCQfAk+6UynsBc3Cpd+2/9ODs7sjPE+40 KCbbGT3/Yl0/ZaCgOLhFwr8NJKBmvhQX3Xi4RngNCpVvCnrXsrUgqct6/o8Io3hFKe57 ql+skdBYx8JnanDSPANlO5YaVTxs8rGGJniaVHtVkX2TFUj8IQ0RQPenrV04OAtyteF/ afqAUH1ptzaw622mFLY8ar8XmI32FC2QE+z6vOuhlaNmXB9pyxEwL5g6w9IVNYGFcyGZ kBsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=tgYS8jjwdQq+l5ch4bOFMmfEqsoOSUE+XJwad7xwZKw=; b=mV6wcbvpHkUIUFXRskmkC1+qmeo9EgYfTN+2NLgpJ0ktJH9H9omICWHVVDhgOaux9g v53KEykJmYfAvkyoiymC9ebM3YIimA4qdRtKBEl9eNzWU0mXYd36iqhiTRKYBXN7Odbo 96vMUyWhNzLXhHLbinKFq4+ROWSTQzkMyJ5MHwSgsypUTYNYGNIxB1yg/lc01AEBT4xA jTewezrwu0U/kBF4O6SKKZdW1kO4PuRuSgj9VIbQA3ONav+OHASgvG5Ruhw+4N7a2rvO a4ebYv0erQ7KK44KZ1fEWoJt72N2zcysjSdltllcpIJO4aRH5BQoLIPm0Ye5aqmJX88X WA6g== X-Gm-Message-State: APt69E15M3iLOp3yX9U3Rimg5xZS4OeTv2VROiX1waCbhP/McOOcwgLy x23dz0g9Qr2OrIHxAlza4bis9Q== X-Google-Smtp-Source: AAOMgpfvHB0zb+jr6EV8JpcNcv4plxmOVYfxUfXpFBals5b+Bvoas/d8IYVXdvfcdYVW8nVYCkVjRQ== X-Received: by 2002:aca:2c02:: with SMTP id s2-v6mr5087056ois.82.1530226436097; Thu, 28 Jun 2018 15:53:56 -0700 (PDT) Received: from linux.adax.com (172-11-198-60.lightspeed.sntcca.sbcglobal.net. [172.11.198.60]) by smtp.gmail.com with ESMTPSA id t7-v6sm3731921oth.12.2018.06.28.15.53.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 28 Jun 2018 15:53:55 -0700 (PDT) From: Dan Gora To: Ferruh Yigit Cc: dev@dpdk.org, Dan Gora Date: Thu, 28 Jun 2018 15:53:50 -0700 Message-Id: <20180628225350.21227-1-dg@adax.com> X-Mailer: git-send-email 2.18.0.rc1.1.g6f333ff2f Subject: [dpdk-dev] [PATCH 07/10] kni: update kni test for rte_kni_free X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add support for testing rte_kni_free() function. Signed-off-by: Dan Gora --- test/test/test_kni.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/test/test_kni.c b/test/test/test_kni.c index 56773c8a2..ec051c07e 100644 --- a/test/test/test_kni.c +++ b/test/test/test_kni.c @@ -427,6 +427,12 @@ test_kni_processing(uint16_t port_id, struct rte_mempool *mp) goto fail_kni; } + /* test of freeing an unreleased kni device */ + if (rte_kni_free(kni) == 0) { + printf("should not be able to free an unreleased kni device\n"); + return -1; + } + if (rte_kni_release(kni) < 0) { printf("fail to release kni\n"); return -1; @@ -439,6 +445,12 @@ test_kni_processing(uint16_t port_id, struct rte_mempool *mp) return -1; } + /* test of freeing a released kni device */ + if (rte_kni_free(kni) != 0) { + printf("failed to free a released kni device\n"); + return -1; + } + /* test of reusing memzone */ kni = rte_kni_alloc(mp, &conf, &ops); if (!kni) { @@ -598,6 +610,14 @@ test_kni(void) goto fail; } + /* test of freeing NULL kni context */ + ret = rte_kni_free(NULL); + if (ret == 0) { + ret = -1; + printf("unexpectedly freed kni successfully\n"); + goto fail; + } + /* test of handling request on NULL device pointer */ ret = rte_kni_handle_request(NULL); if (ret == 0) { From patchwork Thu Jun 28 22:54:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Gora X-Patchwork-Id: 41895 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8A3031B14C; Fri, 29 Jun 2018 00:54:35 +0200 (CEST) Received: from mail-oi0-f48.google.com (mail-oi0-f48.google.com [209.85.218.48]) by dpdk.org (Postfix) with ESMTP id D985D1B063 for ; Fri, 29 Jun 2018 00:54:33 +0200 (CEST) Received: by mail-oi0-f48.google.com with SMTP id c6-v6so6768502oiy.0 for ; Thu, 28 Jun 2018 15:54:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=t9K0HAm7ovX56o3rCITJkVg9YocRDyAImC7Yvmmmhqo=; b=sWCNwM2Uh+kVQnZZsFX05iTl52YheEYrp5tGOnF9kaRrO/zl72LPl4j3XO/n7s//lQ Ghq7QukDMUqAwrBLcdZeUott+S6acEsRb3oEr0Z40Sz0n/WQVxWqm6s7lZU+IeB7Pcts M6aySJNt2TIZ5uDPmCmM/Ox8CYprmyc+bqi4IssP3gJxWrditCa2JpLVgAaUoM5Tp6yW HZZfoObjlFMhs7ZEJwQNan37Lxej0NGGZytrBBR/j45X/F6jmQ250yg72s8GUso/MqkW PqU7ZV2rykv89dGFEICYPS2Wcc7+PoyhMw7E5+Y8ol8cSBjtu/3hdA4JL5OK43Kba4yT PwBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=t9K0HAm7ovX56o3rCITJkVg9YocRDyAImC7Yvmmmhqo=; b=odapJHtPn21yhzVQk1QcTu5xIAnp5zKC22Xn/81J2uGqC09+ca23A5pjxgDq7pRjFK 9Bk4JcoIgPyC393s1MMUCXavsFeUeot3OcUt4R/eSkRE9GoMNkD+dt+eDp55egnBjcp4 ZtVpmSZRsHyuOH7x8vHZpnbBnyRlgi8Oh8SH0xQsNHLFHQ8fY4fjeWawN8CGNem23Dhs woEDsZ7d1A+q4psS3QBXPXOv/pDUpkUD4i+a3pxZu5AxrIVt+cr27mUCI2a6qYQmUZwj gyi916v67HTgsk3fK+Wk1tyIOYjh2oLcC+mhqLgcuVZ63M458gGwYhQ6fjVspcsQYPZF y6yQ== X-Gm-Message-State: APt69E3MATh3QTtINJ1Y7siSLKuLuwYZufBlrejBxIJIbAIDURYDAJ8F 6k7zlvIq8TX4KwO2qjbBW78= X-Google-Smtp-Source: AAOMgpeJCbwg8QSI78HSqmiiJ+djz8sW6yZM2ZFPFQSeBS+4lNI3sTqYMSCdTUQL/tL3ndNTP2KQ+w== X-Received: by 2002:aca:a93:: with SMTP id k19-v6mr7214817oiy.83.1530226473128; Thu, 28 Jun 2018 15:54:33 -0700 (PDT) Received: from linux.adax.com (172-11-198-60.lightspeed.sntcca.sbcglobal.net. [172.11.198.60]) by smtp.gmail.com with ESMTPSA id e4-v6sm3739311oti.75.2018.06.28.15.54.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 28 Jun 2018 15:54:32 -0700 (PDT) From: Dan Gora To: Ferruh Yigit Cc: dev@dpdk.org, Dan Gora Date: Thu, 28 Jun 2018 15:54:26 -0700 Message-Id: <20180628225426.21309-1-dg@adax.com> X-Mailer: git-send-email 2.18.0.rc1.1.g6f333ff2f Subject: [dpdk-dev] [PATCH 08/10] kni: add rte_kni_free to KNI example app X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add rte_kni_free to the KNI example application. Signed-off-by: Dan Gora --- examples/kni/main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/kni/main.c b/examples/kni/main.c index 4b162debb..75e23cd0f 100644 --- a/examples/kni/main.c +++ b/examples/kni/main.c @@ -883,7 +883,9 @@ kni_free_kni(uint16_t port_id) for (i = 0; i < p[port_id]->nb_kni; i++) { if (rte_kni_release(p[port_id]->kni[i])) - printf("Fail to release kni\n"); + printf("Failed to release kni\n"); + if (rte_kni_free(p[port_id]->kni[i])) + printf("Failed to free kni\n"); p[port_id]->kni[i] = NULL; } rte_eth_dev_stop(port_id); From patchwork Thu Jun 28 22:55:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Gora X-Patchwork-Id: 41896 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E65FB1B058; Fri, 29 Jun 2018 00:55:20 +0200 (CEST) Received: from mail-oi0-f67.google.com (mail-oi0-f67.google.com [209.85.218.67]) by dpdk.org (Postfix) with ESMTP id EB2081B000 for ; Fri, 29 Jun 2018 00:55:18 +0200 (CEST) Received: by mail-oi0-f67.google.com with SMTP id r16-v6so6242133oie.3 for ; Thu, 28 Jun 2018 15:55:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=hXv1XyDQ9FYYvhLY7WbYWIZ0bgQgqJ+Ndpj8blSVBaE=; b=X4wizdoljaY6JSvRU8FG0+NDFaxlBQ/ptYt+vYBf5CrH58GJrlcRyTvQENbucYklMt ZvBHIH+7qRIMta3CjSO4BuQ97SXlAEjKqMhg+GUzcg6xL9g8yLiP1vCExwtBCglCtZJJ vEGtS3zfkyHA775Tw41EntO8a6ulRbs6e3u7PQiQIB9wGSr78tPJt+kgR/PzSktJWgTl psJN0Tidb6kgFEyAXFG1uBbzUe31mLpdpujG/ewqH/2mI7/R5A/vhde+mypzqwxYlg+o wsV57jxzJsxq9Wtyl+ISefwPukJWXKHimPlRylHBtf2+c//tPdZn04HVQHRbiGOUQ+GB mMaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=hXv1XyDQ9FYYvhLY7WbYWIZ0bgQgqJ+Ndpj8blSVBaE=; b=tsyZDyN9Ac69Q8WP8/CwvRKPfWPM6dXGNuAlrDGQr7sBF7NcFytoO2OAS+6IsOyfIV d4+yzEclhTaRlRhmBfBSNc+ykm4w9rWbjjmFY2vuuDkgm+Z3/GYJzGTE9ytTsPDW7+8g LtfPXdo1OzSNEKD1BYPoOL+A7ZV2qNF4FGO1rBYN5lFLu//5qwreRwfeVSAzorEZ73kV 2vgFARYosh1ta3krMX11G78/bXBnDTUnebRHNdHqBdrksNu+5b99172VjfdA+5S2Ud0K y/YB8rGL5UAKVNf0XS37fY5RV6j3ycSGqmVJFNJYiB4LRgBKH79R20o34AiRF3BanmAG g7VA== X-Gm-Message-State: APt69E2NQOiVJ6tn7K/pcTs8lWD/1lWqnTY3+ciB6zM3CO7yAMU8wyW1 lTo+9H44qblkrTIyQ+QgkBU= X-Google-Smtp-Source: AAOMgpcqvdhNqEGEhXUc6SGLVknxbjoFH8A1yPru6YRVtC/EYZ8/D//J/9Wbyroa6aDJb7EHKQeWrw== X-Received: by 2002:aca:45d5:: with SMTP id s204-v6mr6543262oia.289.1530226518176; Thu, 28 Jun 2018 15:55:18 -0700 (PDT) Received: from linux.adax.com (172-11-198-60.lightspeed.sntcca.sbcglobal.net. [172.11.198.60]) by smtp.gmail.com with ESMTPSA id s10-v6sm3900588otb.55.2018.06.28.15.55.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 28 Jun 2018 15:55:17 -0700 (PDT) From: Dan Gora To: Ferruh Yigit Cc: dev@dpdk.org, Dan Gora Date: Thu, 28 Jun 2018 15:55:03 -0700 Message-Id: <20180628225503.21579-1-dg@adax.com> X-Mailer: git-send-email 2.18.0.rc1.1.g6f333ff2f Subject: [dpdk-dev] [PATCH 09/10] kni: add rte_kni_free to KNI vdev driver X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add rte_kni_free to the virual KNI device. Signed-off-by: Dan Gora --- drivers/net/kni/rte_eth_kni.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/net/kni/rte_eth_kni.c b/drivers/net/kni/rte_eth_kni.c index ab63ea427..24c6991e6 100644 --- a/drivers/net/kni/rte_eth_kni.c +++ b/drivers/net/kni/rte_eth_kni.c @@ -463,11 +463,13 @@ eth_kni_remove(struct rte_vdev_device *vdev) if (eth_dev == NULL) return -1; - eth_kni_dev_stop(eth_dev); - internals = eth_dev->data->dev_private; rte_kni_release(internals->kni); + eth_kni_dev_stop(eth_dev); + + rte_kni_free(internals->kni); + rte_free(internals); rte_eth_dev_release_port(eth_dev);