From patchwork Thu Aug 9 17:50:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 43656 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 E42C337B4; Thu, 9 Aug 2018 19:50:22 +0200 (CEST) Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by dpdk.org (Postfix) with ESMTP id B845D2BCD for ; Thu, 9 Aug 2018 19:50:19 +0200 (CEST) Received: by mail-pf1-f194.google.com with SMTP id u24-v6so3173697pfn.13 for ; Thu, 09 Aug 2018 10:50:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=l61fyM8PLyqh8SU4d7kOPxifs82/3wDwcM7mGyqQ9Sk=; b=DgF5rsnef04YjqEi3ViSG35aj4Ua9V1I/yNswZ+0Mno+qaUwW7QfA25pG7CE/MsAB+ AxGXc/S7pmoifpyGeADZa4rZPCOOVHrCanMKvv5uGbdvh/9WEZnRBIMEx0NP/P5ihlBX JUSYAwlvBvTvgtG50lB7xRwUyB1eWGre2x5iRWgS4P8oXqhbDxL2aDJG7aTFk5FLJqfa nBunBPhBZmxLoLVdeesmZtcyOGPpUlxygPgWMvxYdYdbwmj0YFdgsn7BVfmeyDlMN2In 2/xJb1ETCYR7xAytf7ByVCQg+CzTjK9oo8iluuQ7H0pFUvUdXaYNGR/L3GvWtDs7eJcn g3gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=l61fyM8PLyqh8SU4d7kOPxifs82/3wDwcM7mGyqQ9Sk=; b=o4E20iLuwtmWNPp7G9VrxSpJGS3VE5+uUpjHJctAHrXOZSuaxVmigEF1tkKCA85GCn iaVbalAlYWMRNTg5o6UXM5rRtMU+obpGX2/8Mn3Ri8ito16EcmpVitMFaRCTXq42CyHm X1d7CAdg1IUGaHuBY7vIzzjhYx2K0SdssOInSNSY/xwFXhwgPWNbiasnhA2JA3lVYuju cd8+QjPvXC7jRM+asT+oF0K1x7MmhGCW0F2yw2xJOd5nSeZ7PEJriqTY93Qx5jiCkTEn BqbHe5Ry0yC1gAXhbXapmpcdAcFvABmNwIAv9Ipb2JgJ7YgFIV9qO75o/ccgtmAs3b7T 18fQ== X-Gm-Message-State: AOUpUlHM5WezTn6MgJs0Y8FlE6FMIg0iilEiJLzm2MiPOP/5/Ey/umuu dIXY0kOfECZYM9iXTRwlye83YgO5xvM= X-Google-Smtp-Source: AA+uWPzbPXk0EmwLwZDj6VGx6sz7Ud9KvlNtObXIFBrxLfj0Fi3DrMKTyLjBdXlPdvw3lj+cyJSSVw== X-Received: by 2002:a62:9541:: with SMTP id p62-v6mr3359110pfd.152.1533837018658; Thu, 09 Aug 2018 10:50:18 -0700 (PDT) Received: from xeon-e3.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id n22-v6sm14993873pfj.68.2018.08.09.10.50.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Aug 2018 10:50:17 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Stephen Hemminger Date: Thu, 9 Aug 2018 10:50:05 -0700 Message-Id: <20180809175008.5787-2-stephen@networkplumber.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180809175008.5787-1-stephen@networkplumber.org> References: <20180809175008.5787-1-stephen@networkplumber.org> Subject: [dpdk-dev] [PATCH 1/4] netvsc: chimney buffer size error handling 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" Fix the error handling in setting up transmit buffer. If setting up chimney buffer fails, then it is not connected so no need to send disconnect. Allow for some unused area if full area is not used. Signed-off-by: Stephen Hemminger --- drivers/net/netvsc/hn_nvs.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/drivers/net/netvsc/hn_nvs.c b/drivers/net/netvsc/hn_nvs.c index 77d3b839fd45..a458bb720f82 100644 --- a/drivers/net/netvsc/hn_nvs.c +++ b/drivers/net/netvsc/hn_nvs.c @@ -279,14 +279,13 @@ hn_nvs_conn_chim(struct hn_data *hv) NVS_TYPE_CHIM_CONNRESP); if (error) { PMD_DRV_LOG(ERR, "exec nvs chim conn failed"); - goto cleanup; + return error; } if (resp.status != NVS_STATUS_OK) { PMD_DRV_LOG(ERR, "nvs chim conn failed: %x", resp.status); - error = -EIO; - goto cleanup; + return -EIO; } sectsz = resp.sectsz; @@ -295,7 +294,8 @@ hn_nvs_conn_chim(struct hn_data *hv) PMD_DRV_LOG(NOTICE, "invalid chimney sending buffer section size: %u", sectsz); - return 0; + error = -EINVAL; + goto cleanup; } hv->chim_szmax = sectsz; @@ -304,11 +304,6 @@ hn_nvs_conn_chim(struct hn_data *hv) PMD_DRV_LOG(INFO, "send buffer %lu section size:%u, count:%u", len, hv->chim_szmax, hv->chim_cnt); - if (len % hv->chim_szmax != 0) { - PMD_DRV_LOG(NOTICE, - "chimney sending sections are not properly aligned"); - } - /* Done! */ return 0; From patchwork Thu Aug 9 17:50:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 43657 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 2E7854C6F; Thu, 9 Aug 2018 19:50:25 +0200 (CEST) Received: from mail-pg1-f194.google.com (mail-pg1-f194.google.com [209.85.215.194]) by dpdk.org (Postfix) with ESMTP id 1133D2BCD for ; Thu, 9 Aug 2018 19:50:21 +0200 (CEST) Received: by mail-pg1-f194.google.com with SMTP id w10-v6so3099202pgv.2 for ; Thu, 09 Aug 2018 10:50:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=naiS10gSZtfmF3kVjCxn/koiL4XuWWzSvx7Re+7HG0Q=; b=0VBFERMW23r1D2jy2pILfO7bynM6iKrcTg/Y1e4kdw5AhdLPOuI2N93OOPIbeQfNLx Z8EvKVUdKk73AY5/jvXGSK1Y7xTFouRt4AuqzUS6hxilVclfor+Y7d0kP/HGPwuUgib/ n+EHB/D8OF49NkPsZKupZywXEk13tGQ+ZxFixpxsgk+z3rDVsZCgGyFZl8Vjds2dGcEc 8vpVfmlxU9+LQBRYf9NOnwFkP2Tocygxs0Bu5vczaNfvrMV3jaIMGqni+dgRp0DXDv9N DahDeFrnuhHieXC+Q6M8cLRjwCsDIggd4S07VIBIsIsP4SCFEYE+phMm+TMA08ji9gBe aouw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=naiS10gSZtfmF3kVjCxn/koiL4XuWWzSvx7Re+7HG0Q=; b=BP13ZoNK1J0rtnzeLejNK9nJnouJVnl7A98ytkufct/NIvnvXdeNTHIKUGv+9o+Y1D JL/nhV/UGYb0mSaIjgAnGTYSP958c2GgrULiESWcksVnK2ywk0CtVlO7lByLWfjWETav aJPXIob4k6e5jF/HSWN8gWsTOZDjRMeW2JPiOtq+C9JRgCcA2j7uVGMJOCphuc3VLpHs WrPdrK126iamr6V4lXf51Z+y2pwG04NjP6oRITIbhy5HpsWDIQyx41G305/49dI5itgk 7GV9nEqE85beJiL28w6wnzB2SM6AsPNvlL3/zZ+92J4vPSWaAwgmQTa5OYcb9icpWw+7 vEWg== X-Gm-Message-State: AOUpUlFm5RSlelqQW95mLlh89ykG0D7XmO+8+DBC1ls1EjVAxVIbvuu2 h1ZE+ZPinB+lZolHirC5CAmEyV2Ov4k= X-Google-Smtp-Source: AA+uWPwU2qjZKJwOzZ3izHzi/iolYxEYD/r+jkNWGhAcaW9k2Qq+yChOJipX4LGEOWD5JFdmYMmY+A== X-Received: by 2002:a62:be03:: with SMTP id l3-v6mr3383741pff.138.1533837019934; Thu, 09 Aug 2018 10:50:19 -0700 (PDT) Received: from xeon-e3.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id n22-v6sm14993873pfj.68.2018.08.09.10.50.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Aug 2018 10:50:18 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Stephen Hemminger Date: Thu, 9 Aug 2018 10:50:06 -0700 Message-Id: <20180809175008.5787-3-stephen@networkplumber.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180809175008.5787-1-stephen@networkplumber.org> References: <20180809175008.5787-1-stephen@networkplumber.org> Subject: [dpdk-dev] [PATCH 2/4] bus/vmbus: add host latency tuning function 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 vmbus API to allow tuning the scan interval on the host side. Signed-off-by: Stephen Hemminger --- drivers/bus/vmbus/rte_bus_vmbus.h | 15 ++++++++++++ drivers/bus/vmbus/rte_bus_vmbus_version.map | 1 + drivers/bus/vmbus/vmbus_channel.c | 26 +++++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/drivers/bus/vmbus/rte_bus_vmbus.h b/drivers/bus/vmbus/rte_bus_vmbus.h index 4a2c1f6fd918..2839fef5b27a 100644 --- a/drivers/bus/vmbus/rte_bus_vmbus.h +++ b/drivers/bus/vmbus/rte_bus_vmbus.h @@ -364,6 +364,21 @@ void rte_vmbus_chan_signal_read(struct vmbus_channel *chan, uint32_t bytes_read) */ uint16_t rte_vmbus_sub_channel_index(const struct vmbus_channel *chan); +/** + * Set the host monitor latency hint + * + * @param dev + * VMBUS device + * @param chan + * Pointer to vmbus_channel structure. + * @param latency + * Approximate wait period between hypervisor examinations of + * the trigger page (in nanoseconds). + */ +void rte_vmbus_set_latency(const struct rte_vmbus_device *dev, + const struct vmbus_channel *chan, + uint32_t latency); + /** * Register a VMBUS driver. * diff --git a/drivers/bus/vmbus/rte_bus_vmbus_version.map b/drivers/bus/vmbus/rte_bus_vmbus_version.map index dabb9203104b..5b01ff30d7b0 100644 --- a/drivers/bus/vmbus/rte_bus_vmbus_version.map +++ b/drivers/bus/vmbus/rte_bus_vmbus_version.map @@ -20,6 +20,7 @@ DPDK_18.08 { rte_vmbus_probe; rte_vmbus_register; rte_vmbus_scan; + rte_vmbus_set_latency; rte_vmbus_sub_channel_index; rte_vmbus_subchan_open; rte_vmbus_unmap_device; diff --git a/drivers/bus/vmbus/vmbus_channel.c b/drivers/bus/vmbus/vmbus_channel.c index cc5f3e8379a5..bd14c0662b46 100644 --- a/drivers/bus/vmbus/vmbus_channel.c +++ b/drivers/bus/vmbus/vmbus_channel.c @@ -59,6 +59,32 @@ vmbus_set_event(const struct rte_vmbus_device *dev, vmbus_set_monitor(dev, chan->monitor_id); } +/* + * Set the wait between when hypervisor examines the trigger. + */ +void +rte_vmbus_set_latency(const struct rte_vmbus_device *dev, + const struct vmbus_channel *chan, + uint32_t latency) +{ + uint32_t trig_idx = chan->monitor_id / VMBUS_MONTRIG_LEN; + uint32_t trig_offs = chan->monitor_id % VMBUS_MONTRIG_LEN; + + if (latency >= UINT16_MAX * 100) { + VMBUS_LOG(ERR, "invalid latency value %u", latency); + return; + } + + if (trig_idx >= VMBUS_MONTRIGS_MAX) { + VMBUS_LOG(ERR, "invalid monitor trigger %u", + trig_idx); + return; + } + + /* Host value is expressed in 100 nanosecond units */ + dev->monitor_page->lat[trig_idx][trig_offs] = latency / 100; +} + /* * Notify host that there are data pending on our TX bufring. * From patchwork Thu Aug 9 17:50:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 43658 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 E00494C7B; Thu, 9 Aug 2018 19:50:27 +0200 (CEST) Received: from mail-pg1-f194.google.com (mail-pg1-f194.google.com [209.85.215.194]) by dpdk.org (Postfix) with ESMTP id 9DB92343C for ; Thu, 9 Aug 2018 19:50:22 +0200 (CEST) Received: by mail-pg1-f194.google.com with SMTP id k3-v6so3090828pgq.5 for ; Thu, 09 Aug 2018 10:50:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=IYwAZM5k+hA/eCg9O32LSRpYihlnI2z3PKLqtq/xiFk=; b=eaKYvXBA37f+iMtIeHQMaVA/6d3nUxVkHrV6ghXFwRRIbZC6KzmoY3y2h0G9LcFeGh I11z9goNvATWE/S7Q9hWOV5ZFcnas5TkHIBolPF1eqI3+DSXp1Owj/dZ2QYha4zHQEeO 2RCSz1/HpfZBso9pi9LqSrMAJNINfw+v21xeArRZEp5Xrb2WA9k3hFkW7Hy1nJNizKOE 5dpOCak4HXchGYBB/505PuBkCdgDTFPwCGjpA7t5PDuXLu8+99Ipg/xt5uEiA5I4ZZ5+ VSBZ4+izQL1mp+mJ/njI6J6LCx49KD3GZWztfao9OUN4iOC2ArAskxQJzIdYY/ipd8Cf Ackw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=IYwAZM5k+hA/eCg9O32LSRpYihlnI2z3PKLqtq/xiFk=; b=cfrYEop+nRlp6fc99GcS5QwE54WNSX1f0jPLhaN4ZsrsjG7B8lyfBmirtlEkCdJkMJ OsCMDRhhzOuNJwmVURpYUCgzuP+DMhxUp3QXUDur51Ren0uG9zl2hyt7o6y+BOhitZa2 FlUxuJRqeEsljKxPPLEwh2mWm7jBuShBOWtJpZWMEy9l5tF22Mxt54ltujDOACQuLXuM 6rYDLJPrgeRJ+hDaYwaH303W3OXdpI0cjVDoaoNz07Hf3MR0Ug0xCtvQ+wdk6GANy5Uc h8pjwhz50wR7C2wDmv/IFlQCEGZcMczvJFBsKL49HkSZrZnaxEKXVqlumaYU1C3Qff1+ EKlw== X-Gm-Message-State: AOUpUlHhFQrQEdGD8rTlx14rBOjMxfCNSFizE/hfc2DYwMJPQhBV8vgr KNFkkfMXueU2bYFHy/EvaTEdxJZhnxA= X-Google-Smtp-Source: AA+uWPxKwO4aE/y/3mKW/veACdxwDVEHLgooDzSymLYcu1/kcYxuFBFpVL0aaB2umDm+TwFEJsdaJA== X-Received: by 2002:a62:569c:: with SMTP id h28-v6mr3382437pfj.201.1533837021478; Thu, 09 Aug 2018 10:50:21 -0700 (PDT) Received: from xeon-e3.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id n22-v6sm14993873pfj.68.2018.08.09.10.50.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Aug 2018 10:50:20 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Stephen Hemminger Date: Thu, 9 Aug 2018 10:50:07 -0700 Message-Id: <20180809175008.5787-4-stephen@networkplumber.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180809175008.5787-1-stephen@networkplumber.org> References: <20180809175008.5787-1-stephen@networkplumber.org> Subject: [dpdk-dev] [PATCH 3/4] netvsc: set lower host latency 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" Tune the vmbus connection so the host scans faster. This improves transmit performance. The host default value is 100us but setting to 50us reduces packet loss significantly. Signed-off-by: Stephen Hemminger --- drivers/net/netvsc/hn_ethdev.c | 6 ++++++ drivers/net/netvsc/hn_var.h | 3 +++ 2 files changed, 9 insertions(+) diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c index 78b842ba2d68..148e6a33d682 100644 --- a/drivers/net/netvsc/hn_ethdev.c +++ b/drivers/net/netvsc/hn_ethdev.c @@ -264,6 +264,9 @@ static int hn_subchan_configure(struct hn_data *hv, return err; } + rte_vmbus_set_latency(hv->vmbus, new_sc, + HN_CHAN_LATENCY_NS); + retry = 0; chn_index = rte_vmbus_sub_channel_index(new_sc); if (chn_index == 0 || chn_index > hv->max_queues) { @@ -629,6 +632,9 @@ eth_hn_dev_init(struct rte_eth_dev *eth_dev) if (err) return err; + rte_vmbus_set_latency(hv->vmbus, hv->channels[0], + HN_CHAN_LATENCY_NS); + hv->primary = hn_rx_queue_alloc(hv, 0, eth_dev->device->numa_node); diff --git a/drivers/net/netvsc/hn_var.h b/drivers/net/netvsc/hn_var.h index f7ff8585bc1c..b3e0a93d45df 100644 --- a/drivers/net/netvsc/hn_var.h +++ b/drivers/net/netvsc/hn_var.h @@ -20,6 +20,9 @@ /* Retry interval */ #define HN_CHAN_INTERVAL_US 100 +/* Host monitor interval */ +#define HN_CHAN_LATENCY_NS 50000 + /* Buffers need to be aligned */ #ifndef PAGE_SIZE #define PAGE_SIZE 4096 From patchwork Thu Aug 9 17:50:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 43659 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 2F29C4C8D; Thu, 9 Aug 2018 19:50:29 +0200 (CEST) Received: from mail-pl0-f68.google.com (mail-pl0-f68.google.com [209.85.160.68]) by dpdk.org (Postfix) with ESMTP id EBC31343C for ; Thu, 9 Aug 2018 19:50:23 +0200 (CEST) Received: by mail-pl0-f68.google.com with SMTP id g6-v6so2852140plq.9 for ; Thu, 09 Aug 2018 10:50:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Nu/qK3zVLfLflxQC1/BZ40Ryby39Zg+goe32F4QiVSM=; b=Elcm1zbnJUg59H5xSsWQzSiop9d32wRpXDG0VrxArWua4ZW7ZfaYUG5yO2RYsPlaY3 GykhChyEViJcOheMNnq8NRSW9/cK5QiHZ1jph+MG8oFFEPWpKKoE3F6W3sR9ix/b9L0g U/7q+KbfmB7NDu0El/B0ervzK7btLbpCGRBJR4Z89+TVaQQl/MBftk6jUDzg0aOAeLun +U2w7jaH19xjlUsNMgAaokE1KlZsNjKLnKsVPYnCq8Czmg26MhQV4j3yv8qaKBJJslg4 K6MK/tunEzaVTkETbkmKKhqJr56Bo1UaQiWancQVMofK2ktYW9SyrII2eeG5tzWXPFwy IQcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Nu/qK3zVLfLflxQC1/BZ40Ryby39Zg+goe32F4QiVSM=; b=JlYbJRqt1NYisIl+2idopKrWZk8ngTlO3IvtGHYgO0nmS+4e7PDikHFbaiHfe/1P/8 PkBAYFcTLuwAU/G6+BT6qhySHK2SG6ItFFH1s7ASaxcr8i/XCd1DZubJ4QnzR7U45VsE BHRBklFvwCnFdgui6BZ4LBK7v+eMqV4nyRjXo0ZIunf7CiqC0DadduisK1xMtbtxmi8l gTTjtoUZfz5cqV7/L6TrdSPJP1HgLuiA3MEKu4BvhKqljJORmrgkBf+G/HCWz6DKl8vw ZxZckH0qzY03B8ynZ92dbY6Du7PezAja6vPR48ERGq8PSOJ7ClDUJb+RGB6oZsSZQMg+ /dgg== X-Gm-Message-State: AOUpUlHlTqq5lhFANTiopReOLtY3SJPjIXnsH8kngJb9X7vhgn98KA5E Jat2CoTRAtYAWampGq/Lfo4JaeXs4g0= X-Google-Smtp-Source: AA+uWPyTz8xDKtCv5456ImjjS+FSTMVUjLQfjr2caxCTmgLuprZebpGEiDKNl0A24/jZnoLsobu8Rw== X-Received: by 2002:a17:902:864b:: with SMTP id y11-v6mr2952519plt.335.1533837022854; Thu, 09 Aug 2018 10:50:22 -0700 (PDT) Received: from xeon-e3.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id n22-v6sm14993873pfj.68.2018.08.09.10.50.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Aug 2018 10:50:22 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Stephen Hemminger Date: Thu, 9 Aug 2018 10:50:08 -0700 Message-Id: <20180809175008.5787-5-stephen@networkplumber.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180809175008.5787-1-stephen@networkplumber.org> References: <20180809175008.5787-1-stephen@networkplumber.org> Subject: [dpdk-dev] [PATCH 4/4] netvsc: implement tx_done_cleanup 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 tx_done_cleanup ethdev hook to allow application to control if/when it wants completions to be handled. Signed-off-by: Stephen Hemminger --- drivers/net/netvsc/hn_ethdev.c | 1 + drivers/net/netvsc/hn_rndis.c | 2 +- drivers/net/netvsc/hn_rxtx.c | 26 +++++++++++++++++++++----- drivers/net/netvsc/hn_var.h | 4 +++- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c index 148e6a33d682..2200ee319f98 100644 --- a/drivers/net/netvsc/hn_ethdev.c +++ b/drivers/net/netvsc/hn_ethdev.c @@ -547,6 +547,7 @@ static const struct eth_dev_ops hn_eth_dev_ops = { .allmulticast_disable = hn_dev_allmulticast_disable, .tx_queue_setup = hn_dev_tx_queue_setup, .tx_queue_release = hn_dev_tx_queue_release, + .tx_done_cleanup = hn_dev_tx_done_cleanup, .rx_queue_setup = hn_dev_rx_queue_setup, .rx_queue_release = hn_dev_rx_queue_release, .link_update = hn_dev_link_update, diff --git a/drivers/net/netvsc/hn_rndis.c b/drivers/net/netvsc/hn_rndis.c index bde33969331e..f44add726b91 100644 --- a/drivers/net/netvsc/hn_rndis.c +++ b/drivers/net/netvsc/hn_rndis.c @@ -382,7 +382,7 @@ static int hn_rndis_exec1(struct hn_data *hv, if (comp) { /* Poll primary channel until response received */ while (hv->rndis_pending == rid) - hn_process_events(hv, 0); + hn_process_events(hv, 0, 1); memcpy(comp, hv->rndis_resp, comp_len); } diff --git a/drivers/net/netvsc/hn_rxtx.c b/drivers/net/netvsc/hn_rxtx.c index 02ef27e363cc..24abc2a91cea 100644 --- a/drivers/net/netvsc/hn_rxtx.c +++ b/drivers/net/netvsc/hn_rxtx.c @@ -801,6 +801,14 @@ hn_dev_rx_queue_release(void *arg) } } +int +hn_dev_tx_done_cleanup(void *arg, uint32_t free_cnt) +{ + struct hn_tx_queue *txq = arg; + + return hn_process_events(txq->hv, txq->queue_id, free_cnt); +} + void hn_dev_rx_queue_info(struct rte_eth_dev *dev, uint16_t queue_idx, struct rte_eth_rxq_info *qinfo) @@ -831,25 +839,27 @@ hn_nvs_handle_notify(const struct vmbus_chanpkt_hdr *pkthdr, * Process pending events on the channel. * Called from both Rx queue poll and Tx cleanup */ -void hn_process_events(struct hn_data *hv, uint16_t queue_id) +uint32_t hn_process_events(struct hn_data *hv, uint16_t queue_id, + uint32_t tx_limit) { struct rte_eth_dev *dev = &rte_eth_devices[hv->port_id]; struct hn_rx_queue *rxq; uint32_t bytes_read = 0; + uint32_t tx_done = 0; int ret = 0; rxq = queue_id == 0 ? hv->primary : dev->data->rx_queues[queue_id]; /* If no pending data then nothing to do */ if (rte_vmbus_chan_rx_empty(rxq->chan)) - return; + return 0; /* * Since channel is shared between Rx and TX queue need to have a lock * since DPDK does not force same CPU to be used for Rx/Tx. */ if (unlikely(!rte_spinlock_trylock(&rxq->ring_lock))) - return; + return 0; for (;;) { const struct vmbus_chanpkt_hdr *pkt; @@ -873,6 +883,7 @@ void hn_process_events(struct hn_data *hv, uint16_t queue_id) switch (pkt->type) { case VMBUS_CHANPKT_TYPE_COMP: + ++tx_done; hn_nvs_handle_comp(dev, queue_id, pkt, data); break; @@ -889,6 +900,9 @@ void hn_process_events(struct hn_data *hv, uint16_t queue_id) break; } + if (tx_limit && tx_done >= tx_limit) + break; + if (rxq->rx_ring && rte_ring_full(rxq->rx_ring)) break; } @@ -897,6 +911,8 @@ void hn_process_events(struct hn_data *hv, uint16_t queue_id) rte_vmbus_chan_signal_read(rxq->chan, bytes_read); rte_spinlock_unlock(&rxq->ring_lock); + + return tx_done; } static void hn_append_to_chim(struct hn_tx_queue *txq, @@ -1244,7 +1260,7 @@ hn_xmit_pkts(void *ptxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) return 0; if (rte_mempool_avail_count(hv->tx_pool) <= txq->free_thresh) - hn_process_events(hv, txq->queue_id); + hn_process_events(hv, txq->queue_id, 0); for (nb_tx = 0; nb_tx < nb_pkts; nb_tx++) { struct rte_mbuf *m = tx_pkts[nb_tx]; @@ -1326,7 +1342,7 @@ hn_recv_pkts(void *prxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) /* If ring is empty then process more */ if (rte_ring_count(rxq->rx_ring) < nb_pkts) - hn_process_events(hv, rxq->queue_id); + hn_process_events(hv, rxq->queue_id, 0); /* Get mbufs off staging ring */ return rte_ring_sc_dequeue_burst(rxq->rx_ring, (void **)rx_pkts, diff --git a/drivers/net/netvsc/hn_var.h b/drivers/net/netvsc/hn_var.h index b3e0a93d45df..fec8d7c402a5 100644 --- a/drivers/net/netvsc/hn_var.h +++ b/drivers/net/netvsc/hn_var.h @@ -133,7 +133,8 @@ hn_primary_chan(const struct hn_data *hv) return hv->channels[0]; } -void hn_process_events(struct hn_data *hv, uint16_t queue_id); +uint32_t hn_process_events(struct hn_data *hv, uint16_t queue_id, + uint32_t tx_limit); uint16_t hn_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); @@ -147,6 +148,7 @@ int hn_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, void hn_dev_tx_queue_release(void *arg); void hn_dev_tx_queue_info(struct rte_eth_dev *dev, uint16_t queue_idx, struct rte_eth_txq_info *qinfo); +int hn_dev_tx_done_cleanup(void *arg, uint32_t free_cnt); struct hn_rx_queue *hn_rx_queue_alloc(struct hn_data *hv, uint16_t queue_id,