From: Ferruh Yigit <ferruh.yigit@intel.com> To: dev@dpdk.org Cc: Elad Nachman <eladv6@gmail.com> Subject: [dpdk-dev] [PATCH v5 2/3] kni: support async user request Date: Mon, 29 Mar 2021 15:36:54 +0100 Message-ID: <20210329143655.521750-2-ferruh.yigit@intel.com> (raw) In-Reply-To: <20210329143655.521750-1-ferruh.yigit@intel.com> Adding async userspace requests which don't wait for the userspace response and always return success. This is preparation to address a regression in KNI. Signed-off-by: Elad Nachman <eladv6@gmail.com> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com> --- kernel/linux/kni/kni_net.c | 9 +++++++++ lib/librte_kni/rte_kni.c | 7 +++++-- lib/librte_kni/rte_kni_common.h | 1 + 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/kernel/linux/kni/kni_net.c b/kernel/linux/kni/kni_net.c index b830054c7491..6cf99da0dc92 100644 --- a/kernel/linux/kni/kni_net.c +++ b/kernel/linux/kni/kni_net.c @@ -124,6 +124,14 @@ kni_net_process_request(struct net_device *dev, struct rte_kni_request *req) goto fail; } + /* No result available since request is handled + * asynchronously. set response to success. + */ + if (req->async != 0) { + req->result = 0; + goto async; + } + ret_val = wait_event_interruptible_timeout(kni->wq, kni_fifo_count(kni->resp_q), 3 * HZ); if (signal_pending(current) || ret_val <= 0) { @@ -139,6 +147,7 @@ kni_net_process_request(struct net_device *dev, struct rte_kni_request *req) } memcpy(req, kni->sync_kva, sizeof(struct rte_kni_request)); +async: ret = 0; fail: diff --git a/lib/librte_kni/rte_kni.c b/lib/librte_kni/rte_kni.c index 837d0217d2d1..9dae6a8d7c0c 100644 --- a/lib/librte_kni/rte_kni.c +++ b/lib/librte_kni/rte_kni.c @@ -591,8 +591,11 @@ rte_kni_handle_request(struct rte_kni *kni) break; } - /* Construct response mbuf and put it back to resp_q */ - ret = kni_fifo_put(kni->resp_q, (void **)&req, 1); + /* if needed, construct response buffer and put it back to resp_q */ + if (!req->async) + ret = kni_fifo_put(kni->resp_q, (void **)&req, 1); + else + ret = 1; if (ret != 1) { RTE_LOG(ERR, KNI, "Fail to put the muf back to resp_q\n"); return -1; /* It is an error of can't putting the mbuf back */ diff --git a/lib/librte_kni/rte_kni_common.h b/lib/librte_kni/rte_kni_common.h index ffb3182731a0..b547ea550171 100644 --- a/lib/librte_kni/rte_kni_common.h +++ b/lib/librte_kni/rte_kni_common.h @@ -48,6 +48,7 @@ struct rte_kni_request { uint8_t promiscusity;/**< 1: promisc mode enable, 0: disable */ uint8_t allmulti; /**< 1: all-multicast mode enable, 0: disable */ }; + int32_t async : 1; /**< 1: request is asynchronous */ int32_t result; /**< Result for processing request */ } __attribute__((__packed__)); -- 2.30.2
next prev parent reply other threads:[~2021-03-29 14:37 UTC|newest] Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-11-26 14:46 [dpdk-dev] [PATCH] kni: fix rtnl deadlocks and race conditions Elad Nachman 2021-02-19 18:41 ` Ferruh Yigit 2021-02-21 8:03 ` Elad Nachman 2021-02-22 15:58 ` Ferruh Yigit 2021-02-23 12:05 ` [dpdk-dev] [PATCH V2] kni: fix rtnl deadlocks and race conditions v2 Elad Nachman 2021-02-23 12:53 ` Ferruh Yigit 2021-02-23 13:44 ` [dpdk-dev] [PATCH 1/2] kni: fix rtnl deadlocks and race conditions v3 Elad Nachman 2021-02-23 13:45 ` [dpdk-dev] [PATCH 2/2] " Elad Nachman 2021-02-24 12:49 ` Igor Ryzhov 2021-02-24 13:33 ` Elad Nachman 2021-02-24 14:04 ` Igor Ryzhov 2021-02-24 14:06 ` Elad Nachman 2021-02-24 14:41 ` Igor Ryzhov 2021-02-24 14:56 ` Elad Nachman 2021-02-24 15:18 ` Igor Ryzhov [not found] ` <CACXF7qkhkzFc-=v=iiBzh2V7rLjk1U34VUfPbNrnYJND_0TKHQ@mail.gmail.com> 2021-02-24 16:31 ` Igor Ryzhov 2021-02-24 15:54 ` Stephen Hemminger 2021-02-25 14:32 ` [dpdk-dev] [PATCH 1/2] kni: fix kernel deadlock when using mlx devices Elad Nachman 2021-02-25 14:32 ` [dpdk-dev] [PATCH 2/2] kni: fix rtnl deadlocks and race conditions v4 Elad Nachman 2021-02-25 21:01 ` Igor Ryzhov 2021-02-26 15:48 ` Stephen Hemminger 2021-02-26 17:43 ` Elad Nachman 2021-03-01 8:10 ` Igor Ryzhov 2021-03-01 16:38 ` Stephen Hemminger 2021-03-15 16:58 ` Ferruh Yigit 2021-03-01 20:27 ` Dan Gora 2021-03-01 21:26 ` Dan Gora 2021-03-02 16:44 ` Elad Nachman 2021-03-15 17:17 ` Ferruh Yigit 2021-03-16 18:35 ` Elad Nachman 2021-03-16 18:42 ` Ferruh Yigit 2021-03-15 17:17 ` [dpdk-dev] [PATCH 1/2] kni: fix kernel deadlock when using mlx devices Ferruh Yigit 2021-03-29 14:36 ` [dpdk-dev] [PATCH v5 1/3] kni: refactor user request processing Ferruh Yigit 2021-03-29 14:36 ` Ferruh Yigit [this message] 2021-03-29 14:36 ` [dpdk-dev] [PATCH v5 3/3] kni: fix kernel deadlock when using mlx devices Ferruh Yigit 2021-04-09 14:56 ` [dpdk-dev] [dpdk-stable] " Ferruh Yigit 2021-04-12 14:35 ` Elad Nachman 2021-04-20 23:07 ` Thomas Monjalon 2021-04-23 8:41 ` Igor Ryzhov 2021-04-23 8:59 ` Ferruh Yigit 2021-04-23 12:43 ` Igor Ryzhov 2021-04-23 12:58 ` Igor Ryzhov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210329143655.521750-2-ferruh.yigit@intel.com \ --to=ferruh.yigit@intel.com \ --cc=dev@dpdk.org \ --cc=eladv6@gmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git