From patchwork Wed Aug 7 14:37:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Herbelot X-Patchwork-Id: 57524 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 4B0432BF3; Wed, 7 Aug 2019 16:37:56 +0200 (CEST) Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by dpdk.org (Postfix) with ESMTP id DAEE41D9E for ; Wed, 7 Aug 2019 16:37:52 +0200 (CEST) Received: by mail-wm1-f66.google.com with SMTP id f17so294315wme.2 for ; Wed, 07 Aug 2019 07:37:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=YAMdscZwW/7ziVKICBq95Vg5MVMQb+M895gf1t1BSlU=; b=GvH14bGgrUP54qD+GZbPg3I6wC0sq0eRy8KAccSmP2jWChSgErzDoDr8Icixqxa6+y YCgSdjL5pDr/TxMrgu/NEjO+vwm4uA1kgXIk/vMENcBKU3OCqI85nChJmnLL4htZqnVX Nsp57SpNdmeQ5x2h+mQc7OBru6isPMSzPg8xv9L2L2ElixlHx0vWHowAQHL469M3WEZg pNo4ZHYAGVbRlo0oF7i4ATdAT/DT4MoGjzZiCtrcx8eqN85SiPpbQ8GTPKL37ItBOzBL a+lq4sTcUv3aYtmHybYX+ezTJ4VrUF8tW+aBLOiFnGIbdvnw/d43s3oTY3NPPeys/b+i kLNg== 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:in-reply-to:references; bh=YAMdscZwW/7ziVKICBq95Vg5MVMQb+M895gf1t1BSlU=; b=YyYz+FJhIDaZTL+pteHu5535uH1Rmdb9nSR9oQLxd53nFh8Ez0JKWdYAEhVCxPkcga Y5wfWj/x9DDGDhHNQMTu1UWcxgFF6v7Ou+hiSouerPRGPab28EqBwyblEmDvFNpOhatw HiRQJePMKnrNdnp5he6aYLLZIs3nwF6i8uswbRET9VXOT2ka0oh1j4av2Fe4C5LFYrCG cTnORkBiIm8wJbi+M/D5/lyWDShZDtDFZhFnJ4RPpVmRHpm2GgsLUCnDCE4WzU1YPftu r1mkxnVECDoD4E+WEsddPb88LP2on+xv2ejXpLs9LXHspXa/nav/0ZGns7HYvrMM4t4I Yo6w== X-Gm-Message-State: APjAAAX8Qjbwt5ll8mc9gwCiUVBpWr9QBOze0wVJ3oxBLNivAFDPATf6 PblrWsLIFUlFmdwjgoO1d1JTPpbVwg== X-Google-Smtp-Source: APXvYqxu1Ul9Dx4BnaF4J9sKMHxDInkXB1GRPGPGkwptuVOOIEXbMR2tiwG3MoyaGGboAqOVRGFQdw== X-Received: by 2002:a1c:968c:: with SMTP id y134mr288149wmd.122.1565188672346; Wed, 07 Aug 2019 07:37:52 -0700 (PDT) Received: from ascain.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 2sm133441211wrn.29.2019.08.07.07.37.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Aug 2019 07:37:51 -0700 (PDT) From: Thierry Herbelot To: dev@dpdk.org Cc: Guo Fengtian , stable@dpdk.org, Thomas Monjalon Date: Wed, 7 Aug 2019 16:37:20 +0200 Message-Id: <33c9e6014e6f4ebd5c980b1ab9c411cde1d61671.1565188248.git.thierry.herbelot@6wind.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH 19.11 01/12] net/ixgbevf: fix stats update after a PF reset 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" From: Guo Fengtian When PF is set down, in VF, the value of stats register is zero. So only increase stats when it's non zero. Fixes: af75078fece3 ('first public release') Cc: stable at dpdk.org Signed-off-by: Guo Fengtian --- drivers/net/ixgbe/ixgbe_ethdev.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 03fc1f71799c..57f5bfa219c1 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -385,7 +385,8 @@ static void ixgbe_l2_tunnel_conf(struct rte_eth_dev *dev); #define UPDATE_VF_STAT(reg, last, cur) \ { \ uint32_t latest = IXGBE_READ_REG(hw, reg); \ - cur += (latest - last) & UINT_MAX; \ + if (latest) \ + cur += (latest - last) & UINT_MAX; \ last = latest; \ } @@ -394,7 +395,8 @@ static void ixgbe_l2_tunnel_conf(struct rte_eth_dev *dev); u64 new_lsb = IXGBE_READ_REG(hw, lsb); \ u64 new_msb = IXGBE_READ_REG(hw, msb); \ u64 latest = ((new_msb << 32) | new_lsb); \ - cur += (0x1000000000LL + latest - last) & 0xFFFFFFFFFLL; \ + if (latest) \ + cur += (0x1000000000LL + latest - last) & 0xFFFFFFFFFLL;\ last = latest; \ } From patchwork Wed Aug 7 14:37:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Herbelot X-Patchwork-Id: 57525 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 93D282C60; Wed, 7 Aug 2019 16:38:00 +0200 (CEST) Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by dpdk.org (Postfix) with ESMTP id BC21D2BAC for ; Wed, 7 Aug 2019 16:37:53 +0200 (CEST) Received: by mail-wm1-f65.google.com with SMTP id 10so298022wmp.3 for ; Wed, 07 Aug 2019 07:37:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=7ZxEjhw/bmoK1I4BmNcWYAsV922TR89fUvEXg0tSQBE=; b=ODvbmApr4QxxeSRQKE5VQzyY9qJDMWZdDdlNFLQxTvOmqzlqSSlB34VHURnhskirQN 6OrzD8IWORzHQEaxz3/lCH4x/M3o1jsqIyFJgfGraUzVSa9ElUJf1aZVWoQhRohY3p+O aJ91Nw4NioGUpMwvDk2WtEMZPs3fhLyCwA6FG0PExZmbnyNuczRxi6mGMkusGeZaj0jP W3h+qqvEF2Un8YvIjJmvFMmGY7bYE8FYozipkWDyTisuwNOUaBsBdz/1jgsc7bDFNVlD RdgkA6S7cvQCf6hUNW2C4bqjCEkD7MsocJs69ywJ7SCmnu9hIh4EmxgjIn6waUA++jqN rQ6g== 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:in-reply-to:references; bh=7ZxEjhw/bmoK1I4BmNcWYAsV922TR89fUvEXg0tSQBE=; b=Jd23Dp0ksV/h0ONYNqQmM51hJcQRkelmhOUadXvma+foTGezDP8q1QGjJsLnhqBFAE yz9CFOK6QZvE7nbV6TxveqcagtjK+KT9RaV93nXSSZC8zx8X5+3kgGLmlQGKY/bIsmEr JrehPk9ltYOPHWsyisBFbMHg7qjGEC1L4U2lT4KJQEZtBzaRkpFUh6zxhqBtB1hIQuLN WCTr2ZwRXLj5N8mv5sooomvpdXK4wMPdwFR2cy4Y3s/V04Wz4ZAHTxmM99on6IjpBjvM 9J46agVxxwsLLaqXBjSScHIDX2NoDtQmys2foQkN8LfP1ZciP+seaefxBAir3xr0gmgo d/+w== X-Gm-Message-State: APjAAAVqcQfk6/8xxYQbXJYnK91AQdyC7mmRV2hnkE8nAsgYm749ItUb UtkJkj9ggxrqAnVe7kH5IBpgTrLV0w== X-Google-Smtp-Source: APXvYqy+GOlSt644HiKl4Qw/7RFIbVwVCwusl1wXA5voQAdsHMGLascT5x1IyaUeiinsulOfD65Sqw== X-Received: by 2002:a05:600c:225a:: with SMTP id a26mr287822wmm.81.1565188673326; Wed, 07 Aug 2019 07:37:53 -0700 (PDT) Received: from ascain.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 2sm133441211wrn.29.2019.08.07.07.37.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Aug 2019 07:37:52 -0700 (PDT) From: Thierry Herbelot To: dev@dpdk.org Cc: Olivier Matz , stable@dpdk.org, Thomas Monjalon Date: Wed, 7 Aug 2019 16:37:21 +0200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH 19.11 02/12] ethdev: fix description of tx descriptor status 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" From: Olivier Matz The API comment of rte_eth_tx_descriptor_status() was incorrect. The reference descriptor (when offset = 0) is not where the next packet will be sent, but where the latest packet has been enqueued. Fixes: 52f5cdd2e897 ("ethdev: add descriptor status API") Cc: stable at dpdk.org Signed-off-by: Olivier Matz --- lib/librte_ethdev/rte_ethdev.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h index dc6596bc93b4..b423e71050e9 100644 --- a/lib/librte_ethdev/rte_ethdev.h +++ b/lib/librte_ethdev/rte_ethdev.h @@ -4245,8 +4245,8 @@ rte_eth_rx_descriptor_status(uint16_t port_id, uint16_t queue_id, * @param queue_id * A valid Tx queue identifier on this port. * @param offset - * The offset of the descriptor starting from tail (0 is the place where - * the next packet will be send). + * The offset of the descriptor starting from tail (0 is the last written + * descriptor). * * @return * - (RTE_ETH_TX_DESC_FULL) Descriptor is being processed by the hw, i.e. From patchwork Wed Aug 7 14:37:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Herbelot X-Patchwork-Id: 57526 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 C05473256; Wed, 7 Aug 2019 16:38:04 +0200 (CEST) Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by dpdk.org (Postfix) with ESMTP id ADF122BCE for ; Wed, 7 Aug 2019 16:37:54 +0200 (CEST) Received: by mail-wm1-f66.google.com with SMTP id f17so294414wme.2 for ; Wed, 07 Aug 2019 07:37:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=aZmqPYsu57sWBTWUEE89iHO5N4VAKUs0E1rkakVYswo=; b=DmQJLSTv4/hnSs58bcrlCFsTpubwtW+fiRQ915ILlQ37Q4YUTERGEP5ufeJ2nwu1h3 ORhJ1QUMTFkL97BVf6T/ro7AoXOISWUrhCfHJkWnso7+Dxz8YCOY6iaMwwDt5rox98KA 9YCQy746PyKWy3iII0k8DnqG08OxU11IRLA9CYdKB7T9B/PonWntQRs1nL7x4ioiywNe jRl92LZokfrrmkmxmjsJFJfM7WPpXtFd+TwmiUGwOfQ2oDgoNTpJ5428hDjCiSjHkNRK 0zRlNTNG8mIIJckWBnT3pRc/av3/qGbWLRxvqv83Ys29NneFTS1KYw+CL3A442RUHwrL KSuw== 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:in-reply-to:references; bh=aZmqPYsu57sWBTWUEE89iHO5N4VAKUs0E1rkakVYswo=; b=fA5s5t8OyMJ++fTMqoCzcg7YAmTjQskz4GOA+snsQaojKIZbw7kwJetUJuM25Db3wh FAT7xsArIkz3qixvClbIC9klkH7hG4Qv3ENW4/gBThxxxVw3WWFIYjL4yq6gzMUxd3+M zCCGhyBNyN3cgMayNo5zvbr3RL7EQz32jbJPb+qOVPGgtdSWYUXwQ/bi6JeKOMBPynLX mEZrC+HeZlv6/YusAbV2SogHs0B6gfV2o04wai2oq+PLlc61/sDkqFSBZ1ULb0rc7iRo YzMmZkR0cnFauHme4PP8Eu0/ghWm8InX7Xy5iDTQbX3fGOvWKOAl2nFzxGtMMiOJ04PI NpoQ== X-Gm-Message-State: APjAAAWbrOK93BiQExPFlUeYJn915CfL9yoDAIU1Lq7jhpHTtPrsmUz0 /hDymN74/eWdW3Wupf1fqGyia2GHsA== X-Google-Smtp-Source: APXvYqxUPv/FKVcoaTSBhx80MB+k7WO1GLPc3MwXFMrXxb+mYCaz31IRd20Ivlg/V1niK7OtKF3Fog== X-Received: by 2002:a1c:6c14:: with SMTP id h20mr314226wmc.168.1565188674253; Wed, 07 Aug 2019 07:37:54 -0700 (PDT) Received: from ascain.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 2sm133441211wrn.29.2019.08.07.07.37.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Aug 2019 07:37:53 -0700 (PDT) From: Thierry Herbelot To: dev@dpdk.org Cc: Olivier Matz , stable@dpdk.org, Thomas Monjalon Date: Wed, 7 Aug 2019 16:37:22 +0200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH 19.11 03/12] net/e1000: fix Tx descriptor status api (igb) 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" From: Olivier Matz The Tx descriptor status api was not behaving as expected. This API is used to inspect the content of the descriptors in the Tx ring to determine the length of the Tx queue. Since the software advances the tail pointer and the hardware advances the head pointer, the Tx queue is located before txq->tx_tail in the ring. Therefore, a call to rte_eth_tx_descriptor_status(..., offset=20) should inspect the 20th descriptor before the tail, not after. Fixes: 978f8eea1719 ("net/e1000: implement descriptor status API (igb)") Cc: stable at dpdk.org Signed-off-by: Olivier Matz --- drivers/net/e1000/igb_rxtx.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/net/e1000/igb_rxtx.c b/drivers/net/e1000/igb_rxtx.c index c5606de5d7a0..c22118e59a21 100644 --- a/drivers/net/e1000/igb_rxtx.c +++ b/drivers/net/e1000/igb_rxtx.c @@ -1835,14 +1835,15 @@ eth_igb_tx_descriptor_status(void *tx_queue, uint16_t offset) { struct igb_tx_queue *txq = tx_queue; volatile uint32_t *status; - uint32_t desc; + int32_t desc; if (unlikely(offset >= txq->nb_tx_desc)) return -EINVAL; - desc = txq->tx_tail + offset; - if (desc >= txq->nb_tx_desc) - desc -= txq->nb_tx_desc; + desc = txq->tx_tail - offset - 1; + if (desc < 0) + desc += txq->nb_tx_desc; + desc = txq->sw_ring[desc].last_id; status = &txq->tx_ring[desc].wb.status; if (*status & rte_cpu_to_le_32(E1000_TXD_STAT_DD)) From patchwork Wed Aug 7 14:37:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Herbelot X-Patchwork-Id: 57527 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 269084C80; Wed, 7 Aug 2019 16:38:08 +0200 (CEST) Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by dpdk.org (Postfix) with ESMTP id 9D9AB2BD3 for ; Wed, 7 Aug 2019 16:37:55 +0200 (CEST) Received: by mail-wr1-f65.google.com with SMTP id q12so1367841wrj.12 for ; Wed, 07 Aug 2019 07:37:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=+dQK5r3hE/LlmUpr0euGBUpPqnR9PVPnHXAgKqYV2IU=; b=Wrv9UcHYljPUM4Y2PYy0KkVi8Q3vTO3ZZk7VSU9uGrXCtti8vSd5rNQjt+DYdPTi9u e6ptiinLqVkDXM7iMsaett4HUOqt03+oZ2A+x1lR50PbwmEscF3GSVKeEOhDMgfAvrZq 403W6vRQci+61CiP9b2WF+EzgagHAR+IA722zMP4esoaNbDGPBWMVwfk2l8ljKVTpQKI 2Gc001u0RPAJktnYOIhTKO1zcMBun7XCYzvfsl3chciMUdR/s80DiWKm4mooLpniJLvH B7C3/8+CnAKgGPXaA2F2Czcq1iZvmtMV6jC4jUwUiHdxO0Un1u/nU+r7Wc0ZIi7b4reE 82/w== 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:in-reply-to:references; bh=+dQK5r3hE/LlmUpr0euGBUpPqnR9PVPnHXAgKqYV2IU=; b=JHRxT4x3BC6KV5b1U4VGmT34FUFKO795DBBzl+XJDw1lfgoXj4erxdazuw2ED2ICFR yuTVwrTbtU2NOj+e0triR3pC3Z0q5RnRqiumYSNRThCALtAkSLZDHDrbl8BSes3rNPIB mMcXGWOzHu+WPG5eN4Qy0jONlfYA/G/9bJIV0vg7QfpJn7jo6DBDl92/UFhNI6eBbdy+ pRwlSJStfb5qCVxPIX+uaOhPFhy0zCqqN7kVNjmg0Ua4ImVttn6OTGr/dkNKZ5T6KIy9 CaWm8eoL+pRRO+L3FxwI/b6j1zJHuHKgoLf9aU/iDe2BFZcjYn/IEY9wOoXXPT/WlPcQ 1Y1A== X-Gm-Message-State: APjAAAWx11DajEBbmLfFCPkov7LCLavyDZcgtUVU/xaSqQMZ6Scryu6l EfM0OOXEXGDWFLPnXJotuzXG31x8/A== X-Google-Smtp-Source: APXvYqxp2O3CFzgjPt3O9/ZEN6XKIB60XwVWBxZCcYodXiJnkq8nrGDv6znpeFuNSYGfQn+Ul8ZbaQ== X-Received: by 2002:adf:de8e:: with SMTP id w14mr11302047wrl.79.1565188675102; Wed, 07 Aug 2019 07:37:55 -0700 (PDT) Received: from ascain.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 2sm133441211wrn.29.2019.08.07.07.37.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Aug 2019 07:37:54 -0700 (PDT) From: Thierry Herbelot To: dev@dpdk.org Cc: Olivier Matz , stable@dpdk.org, Thomas Monjalon Date: Wed, 7 Aug 2019 16:37:23 +0200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH 19.11 04/12] net/e1000: fix Tx descriptor status api (em) 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" From: Olivier Matz The Tx descriptor status api was not behaving as expected. This API is used to inspect the content of the descriptors in the Tx ring to determine the length of the Tx queue. Since the software advances the tail pointer and the hardware advances the head pointer, the Tx queue is located before txq->tx_tail in the ring. Therefore, a call to rte_eth_tx_descriptor_status(..., offset=20) should inspect the 20th descriptor before the tail, not after. As before, we still need to take care about only checking descriptors that have the RS bit. Additionally, we can avoid an access to the ring if offset is greater or equal to nb_tx_desc - nb_tx_free. Fixes: b9082317cab3 ("net/e1000: implement descriptor status API (em)") Cc: stable at dpdk.org Signed-off-by: Olivier Matz --- drivers/net/e1000/em_rxtx.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/drivers/net/e1000/em_rxtx.c b/drivers/net/e1000/em_rxtx.c index 5925e490641b..3061998c7768 100644 --- a/drivers/net/e1000/em_rxtx.c +++ b/drivers/net/e1000/em_rxtx.c @@ -152,6 +152,7 @@ struct em_tx_queue { uint64_t tx_ring_phys_addr; /**< TX ring DMA address. */ struct em_tx_entry *sw_ring; /**< virtual address of SW ring. */ volatile uint32_t *tdt_reg_addr; /**< Address of TDT register. */ + volatile uint32_t *tdh_reg_addr; /**< Address of TDH register. */ uint16_t nb_tx_desc; /**< number of TX descriptors. */ uint16_t tx_tail; /**< Current value of TDT register. */ /**< Start freeing TX buffers if there are less free descriptors than @@ -1304,6 +1305,7 @@ eth_em_tx_queue_setup(struct rte_eth_dev *dev, txq->port_id = dev->data->port_id; txq->tdt_reg_addr = E1000_PCI_REG_ADDR(hw, E1000_TDT(queue_idx)); + txq->tdh_reg_addr = E1000_PCI_REG_ADDR(hw, E1000_TDH(queue_idx)); txq->tx_ring_phys_addr = tz->iova; txq->tx_ring = (struct e1000_data_desc *) tz->addr; @@ -1557,22 +1559,33 @@ eth_em_tx_descriptor_status(void *tx_queue, uint16_t offset) { struct em_tx_queue *txq = tx_queue; volatile uint8_t *status; - uint32_t desc; + int32_t desc, dd; if (unlikely(offset >= txq->nb_tx_desc)) return -EINVAL; + if (offset >= txq->nb_tx_desc - txq->nb_tx_free) + return RTE_ETH_TX_DESC_DONE; - desc = txq->tx_tail + offset; - /* go to next desc that has the RS bit */ - desc = ((desc + txq->tx_rs_thresh - 1) / txq->tx_rs_thresh) * - txq->tx_rs_thresh; - if (desc >= txq->nb_tx_desc) { - desc -= txq->nb_tx_desc; - if (desc >= txq->nb_tx_desc) - desc -= txq->nb_tx_desc; + desc = txq->tx_tail - offset - 1; + if (desc < 0) + desc += txq->nb_tx_desc; + + /* offset is too small, no other way than reading PCI reg */ + if (unlikely(offset < txq->tx_rs_thresh)) { + int16_t tx_head, queue_size; + tx_head = e1000_read_addr(txq->tdh_reg_addr); + queue_size = txq->tx_tail - tx_head; + if (queue_size < 0) + queue_size += txq->nb_tx_desc; + return queue_size > offset ? RTE_ETH_TX_DESC_FULL : + RTE_ETH_TX_DESC_DONE; } - status = &txq->tx_ring[desc].upper.fields.status; + /* index of the dd bit to look at */ + dd = (desc / txq->tx_rs_thresh + 1) * txq->tx_rs_thresh - 1; + dd = txq->sw_ring[dd].last_id; + + status = &txq->tx_ring[dd].upper.fields.status; if (*status & E1000_TXD_STAT_DD) return RTE_ETH_TX_DESC_DONE; From patchwork Wed Aug 7 14:37:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Herbelot X-Patchwork-Id: 57528 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 019594C96; Wed, 7 Aug 2019 16:38:11 +0200 (CEST) Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by dpdk.org (Postfix) with ESMTP id 992382C16 for ; Wed, 7 Aug 2019 16:37:56 +0200 (CEST) Received: by mail-wr1-f68.google.com with SMTP id c2so88414105wrm.8 for ; Wed, 07 Aug 2019 07:37:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=N4CpN3tGndVgg11SLlCEe0CaLeJ68B+1/ALyNfPrBro=; b=OwkBR4JGH8xGawjAAA2eWr1FXSLA9yqWKnt+z06+ghgYtKpuoAZsWjtqnXA8crkrKa amg51o9Q4wnO8oObAOaoBhDIt4Mkh+JpZ7ZRxNGWgIXekwNLPai8OxKVcqHXHiUTY6uq 2oJp/ixP646skLG8yH7BtuhK9w5ZyKj1hQZ8B8EWlS7u8qhliPTeqgM9I31HbzORar/R cP06UT5fiUixyZfNeRCqZadFkZZqK4UqBfR0jD8n0wvL74IWlTWikeOlupDyx0CCV2Lf U6NI5HidiAEcQZLLsdzDAGqZbjpa2Sp+5/afDcDgY7PFXvhXZPAGhLzqmuXK08KVyLM4 Dyug== 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:in-reply-to:references; bh=N4CpN3tGndVgg11SLlCEe0CaLeJ68B+1/ALyNfPrBro=; b=irtvcwu6oMyb6g7UcdY9sHd8qqUAazN9QA67n3L3TyXEnPnEzSZ6w/LLCexW4yzfNG mam4KsmF9gtkdCWKYbVeRq3Kpdv0JMY0MsSHxjZl08HW+J43TxDPLh3EzXQHCS7yzcrn jvW5Pp1R5In3zx8VGu3KL96pFqA5o0j6p+TxG8f7kCfM+GJtYYYaF1lNlAWK7tesXSRp Fo9v8Ey1nllCCVLCTqE6a2SxZAv/e6iuGQtirM6PgPMo0zk8Y9KwQRxDupLf++2A8vTN XBmubx09mvSkRGHLRHQIshMsPaM7iROYS6CmwN8KENah8llvk1he/IByPeiOpfFkoMyP ma0A== X-Gm-Message-State: APjAAAUi4QpHq7lo9Mc5hhGTpzQN8cIyGFsvEDHLDKiLBxjsa4b0TjZO mKbkKzc256Ts6aeIystzV4jLMsQ7pQ== X-Google-Smtp-Source: APXvYqygPA6CWs4mQyjC7ltthCVyR2sOtuy0MAe6J3ShjTp/tFaSdJw0lczXIVLVg/LBul4SyYmfaQ== X-Received: by 2002:a5d:4a4e:: with SMTP id v14mr10746080wrs.200.1565188676035; Wed, 07 Aug 2019 07:37:56 -0700 (PDT) Received: from ascain.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 2sm133441211wrn.29.2019.08.07.07.37.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Aug 2019 07:37:55 -0700 (PDT) From: Thierry Herbelot To: dev@dpdk.org Cc: Olivier Matz , stable@dpdk.org, Thomas Monjalon Date: Wed, 7 Aug 2019 16:37:24 +0200 Message-Id: <09ef3a984386ade27828e549c542e290825c3c13.1565188248.git.thierry.herbelot@6wind.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH 19.11 05/12] net/ixgbe: fix Tx descriptor status api 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" From: Olivier Matz The Tx descriptor status api was not behaving as expected. This API is used to inspect the content of the descriptors in the Tx ring to determine the length of the Tx queue. Since the software advances the tail pointer and the hardware advances the head pointer, the Tx queue is located before txq->tx_tail in the ring. Therefore, a call to rte_eth_tx_descriptor_status(..., offset=20) should inspect the 20th descriptor before the tail, not after. As before, we still need to take care about only checking descriptors that have the RS bit. Additionally, we can avoid an access to the ring if offset is greater or equal to nb_tx_desc - nb_tx_free. Fixes: 5da8b8814178 ("net/ixgbe: implement descriptor status API") Cc: stable at dpdk.org Signed-off-by: Olivier Matz --- drivers/net/ixgbe/ixgbe_rxtx.c | 45 +++++++++++++++++++++++++++++++----------- drivers/net/ixgbe/ixgbe_rxtx.h | 1 + 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c index edcfa60cec98..68e3aea5ed46 100644 --- a/drivers/net/ixgbe/ixgbe_rxtx.c +++ b/drivers/net/ixgbe/ixgbe_rxtx.c @@ -2627,10 +2627,15 @@ ixgbe_dev_tx_queue_setup(struct rte_eth_dev *dev, hw->mac.type == ixgbe_mac_X540_vf || hw->mac.type == ixgbe_mac_X550_vf || hw->mac.type == ixgbe_mac_X550EM_x_vf || - hw->mac.type == ixgbe_mac_X550EM_a_vf) + hw->mac.type == ixgbe_mac_X550EM_a_vf) { txq->tdt_reg_addr = IXGBE_PCI_REG_ADDR(hw, IXGBE_VFTDT(queue_idx)); - else + txq->tdh_reg_addr = IXGBE_PCI_REG_ADDR(hw, + IXGBE_VFTDH(queue_idx)); + } else { txq->tdt_reg_addr = IXGBE_PCI_REG_ADDR(hw, IXGBE_TDT(txq->reg_idx)); + txq->tdh_reg_addr = IXGBE_PCI_REG_ADDR(hw, + IXGBE_TDH(txq->reg_idx)); + } txq->tx_ring_phys_addr = tz->iova; txq->tx_ring = (union ixgbe_adv_tx_desc *) tz->addr; @@ -3163,22 +3168,38 @@ ixgbe_dev_tx_descriptor_status(void *tx_queue, uint16_t offset) { struct ixgbe_tx_queue *txq = tx_queue; volatile uint32_t *status; - uint32_t desc; + int32_t desc, dd; if (unlikely(offset >= txq->nb_tx_desc)) return -EINVAL; + if (offset >= txq->nb_tx_desc - txq->nb_tx_free) + return RTE_ETH_TX_DESC_DONE; + + desc = txq->tx_tail - offset - 1; + if (desc < 0) + desc += txq->nb_tx_desc; - desc = txq->tx_tail + offset; - /* go to next desc that has the RS bit */ - desc = ((desc + txq->tx_rs_thresh - 1) / txq->tx_rs_thresh) * - txq->tx_rs_thresh; - if (desc >= txq->nb_tx_desc) { - desc -= txq->nb_tx_desc; - if (desc >= txq->nb_tx_desc) - desc -= txq->nb_tx_desc; + /* offset is too small, no other way than reading PCI reg */ + if (unlikely(offset < txq->tx_rs_thresh)) { + int16_t tx_head, queue_size; + tx_head = ixgbe_read_addr(txq->tdh_reg_addr); + queue_size = txq->tx_tail - tx_head; + if (queue_size < 0) + queue_size += txq->nb_tx_desc; + return queue_size > offset ? RTE_ETH_TX_DESC_FULL : + RTE_ETH_TX_DESC_DONE; } - status = &txq->tx_ring[desc].wb.status; + /* index of the dd bit to look at */ + dd = (desc / txq->tx_rs_thresh + 1) * txq->tx_rs_thresh - 1; + + /* In full featured mode, RS bit is only set in the last descriptor */ + /* of a multisegments packet */ + if (!((txq->offloads == 0) && + (txq->tx_rs_thresh >= RTE_PMD_IXGBE_TX_MAX_BURST))) + dd = txq->sw_ring[dd].last_id; + + status = &txq->tx_ring[dd].wb.status; if (*status & rte_cpu_to_le_32(IXGBE_ADVTXD_STAT_DD)) return RTE_ETH_TX_DESC_DONE; diff --git a/drivers/net/ixgbe/ixgbe_rxtx.h b/drivers/net/ixgbe/ixgbe_rxtx.h index 505d344b9cee..05fd4167576c 100644 --- a/drivers/net/ixgbe/ixgbe_rxtx.h +++ b/drivers/net/ixgbe/ixgbe_rxtx.h @@ -201,6 +201,7 @@ struct ixgbe_tx_queue { struct ixgbe_tx_entry_v *sw_ring_v; /**< address of SW ring for vector PMD */ }; volatile uint32_t *tdt_reg_addr; /**< Address of TDT register. */ + volatile uint32_t *tdh_reg_addr; /**< Address of TDH register. */ uint16_t nb_tx_desc; /**< number of TX descriptors. */ uint16_t tx_tail; /**< current value of TDT reg. */ /**< Start freeing TX buffers if there are less free descriptors than From patchwork Wed Aug 7 14:37:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Herbelot X-Patchwork-Id: 57529 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 AC0164CAF; Wed, 7 Aug 2019 16:38:13 +0200 (CEST) Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by dpdk.org (Postfix) with ESMTP id A4E252C18 for ; Wed, 7 Aug 2019 16:37:57 +0200 (CEST) Received: by mail-wr1-f68.google.com with SMTP id k2so5781606wrq.2 for ; Wed, 07 Aug 2019 07:37:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=DiNaj7bCpueaIXVSQoi3gGNIfDeDl3LZhYADJ5kq8W8=; b=aW21NVj2ICeC5Ih1MGmCGFjsDBEhLacPjmkBY8IJfofu39Hun9dOnooZSSKSqDX/Y7 kSRIyIGDLIDQ8mPLVN6btS/5+7XPZBO9zANNFRclRtJSZOQz7S8WsnBF+xMItgVbEA8h ve0rH9mXWzymusHIoafjtDwWhfAtb19418FP+ZKOeFtcBNdmCGGxhJmR2edxb0kSPz1d o5Cf57lf52KP36EjrVdSXf99pFyQOP9rEmkblZnUsCX4613gYl2jsDStqZ1EcVu4ZH60 M8S7C/oAoRV/0uhbP1afWgQie9hoCG6dfd2hxcOo4bR2VnXRHhbxDQ7b3zt1lkgkGNSj jOTQ== 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:in-reply-to:references; bh=DiNaj7bCpueaIXVSQoi3gGNIfDeDl3LZhYADJ5kq8W8=; b=eUmzDo9l9kOfZ3/GWvqTeqbon4QqJ7568d+bmFpDVqxeWzNTx0CZEmMQkoCMa91/rd ZyCi6LzftUITsuwMdcx14vtdWDuspprp2e7e/nVyV3af57tHvo2ueRmU5rHKoHn6QleH 9qrkPCQxjrdvYuTxX5vFHnpc7cba1Fj0uU5Z48r/IbwxSbYDZN2wRzA+ilJEmehbc5Q7 lOf0i2NJmtOpxUW+2Y/151S2Vr5HZEEpgezQcUv4b1RuEmYeYUwe+XTAG2zPLl4IxG3V y8T+hstz9GCtgcT6/YQAwSLJlktcFAFuHLFO0QSNGHFbUj3LfAzaWMm3deT3KrChLzoz fYrw== X-Gm-Message-State: APjAAAVscQwabx8+iM3GLDvJJi15nVqe+bsJ9wa4G3Z7hNyro9AVK0Jl 54B1VANbencZdqI82gfQDw9WMqz/+g== X-Google-Smtp-Source: APXvYqzGErF4ySbiLrW6p4NjfQXRXYbFK+IRe3oqw4OhpG7LT9W4+qSYYvZB+LnO2Ypi3Tryq1E4Iw== X-Received: by 2002:a5d:4804:: with SMTP id l4mr194917wrq.111.1565188677167; Wed, 07 Aug 2019 07:37:57 -0700 (PDT) Received: from ascain.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 2sm133441211wrn.29.2019.08.07.07.37.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Aug 2019 07:37:56 -0700 (PDT) From: Thierry Herbelot To: dev@dpdk.org Cc: Olivier Matz , stable@dpdk.org, Thomas Monjalon Date: Wed, 7 Aug 2019 16:37:25 +0200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH 19.11 06/12] net/i40e: fix Tx descriptor status api 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" From: Olivier Matz The Tx descriptor status api was not behaving as expected. This API is used to inspect the content of the descriptors in the Tx ring to determine the length of the Tx queue. Since the software advances the tail pointer and the hardware advances the head pointer, the Tx queue is located before txq->tx_tail in the ring. Therefore, a call to rte_eth_tx_descriptor_status(..., offset=20) should inspect the 20th descriptor before the tail, not after. As before, we still need to take care about only checking descriptors that have the RS bit. Additionally, we can avoid an access to the ring if offset is greater or equal to nb_tx_desc - nb_tx_free. Fixes: a9dd9af6f38e ("net/i40e: implement descriptor status API") Cc: stable at dpdk.org Signed-off-by: Olivier Matz --- drivers/net/i40e/i40e_rxtx.c | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c index 692c3bab4b5f..4fbbc097ed4f 100644 --- a/drivers/net/i40e/i40e_rxtx.c +++ b/drivers/net/i40e/i40e_rxtx.c @@ -2031,22 +2031,39 @@ i40e_dev_tx_descriptor_status(void *tx_queue, uint16_t offset) struct i40e_tx_queue *txq = tx_queue; volatile uint64_t *status; uint64_t mask, expect; - uint32_t desc; + int32_t desc, dd; if (unlikely(offset >= txq->nb_tx_desc)) return -EINVAL; + if (offset >= txq->nb_tx_desc - txq->nb_tx_free) + return RTE_ETH_TX_DESC_DONE; + + desc = txq->tx_tail - offset - 1; + if (desc < 0) + desc += txq->nb_tx_desc; - desc = txq->tx_tail + offset; - /* go to next desc that has the RS bit */ - desc = ((desc + txq->tx_rs_thresh - 1) / txq->tx_rs_thresh) * - txq->tx_rs_thresh; - if (desc >= txq->nb_tx_desc) { - desc -= txq->nb_tx_desc; - if (desc >= txq->nb_tx_desc) - desc -= txq->nb_tx_desc; + /* offset is too small, no other way than reading PCI reg */ + if (unlikely(offset < txq->tx_rs_thresh)) { + int16_t tx_head, queue_size; + tx_head = I40E_READ_REG(I40E_VSI_TO_HW(txq->vsi), + I40E_QTX_HEAD(txq->reg_idx)); + queue_size = txq->tx_tail - tx_head; + if (queue_size < 0) + queue_size += txq->nb_tx_desc; + return queue_size > offset ? RTE_ETH_TX_DESC_FULL : + RTE_ETH_TX_DESC_DONE; } - status = &txq->tx_ring[desc].cmd_type_offset_bsz; + /* index of the dd bit to look at */ + dd = (desc / txq->tx_rs_thresh + 1) * txq->tx_rs_thresh - 1; + + /* In full featured mode, RS bit is only set in the last descriptor */ + /* of a multisegments packet */ + if (!((txq->offloads == 0) && + (txq->tx_rs_thresh >= RTE_PMD_I40E_TX_MAX_BURST))) + dd = txq->sw_ring[dd].last_id; + + status = &txq->tx_ring[dd].cmd_type_offset_bsz; mask = rte_le_to_cpu_64(I40E_TXD_QW1_DTYPE_MASK); expect = rte_cpu_to_le_64( I40E_TX_DESC_DTYPE_DESC_DONE << I40E_TXD_QW1_DTYPE_SHIFT); From patchwork Wed Aug 7 14:37:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Herbelot X-Patchwork-Id: 57530 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 A90A15B34; Wed, 7 Aug 2019 16:38:15 +0200 (CEST) Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by dpdk.org (Postfix) with ESMTP id 6BFCE2BA8 for ; Wed, 7 Aug 2019 16:37:58 +0200 (CEST) Received: by mail-wr1-f65.google.com with SMTP id p17so91618363wrf.11 for ; Wed, 07 Aug 2019 07:37:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=aluXQhFqKHvSpt/J7FslVOSjArgfppvuj0QkxyHz2OI=; b=QYbwziTFQzyDQBKUjpTdh9CuEOUOrqadUlq+6BQyzuSrZNsOBQ2nVmoyNSL7O8az+x rzbTZMlSy9DPgpC0fyqzFcuIEsi+YuFceCNvs+lo6Fa09Qc9id56Gi2YjvcZh804iR5e e8esFZTEfQEmJfbdgoS5HyB0WMlGjfKL1GeiL7rFZJBzb6G1Jo0FEAU5o2We5Vu5Q2zO SFA2SbfG0U8JOIX6IpSckKzQb6PHyEM57BUo7DPsQm1eGpwHj+QjMVLFba1P3kYE8sG0 Y5nnuO4kCuxumhl3nh0DnENGbINY6gjTn+d5k+axwCr8mu+WkvAaHexJuMAER+aVTlnr 8/rg== 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:in-reply-to:references; bh=aluXQhFqKHvSpt/J7FslVOSjArgfppvuj0QkxyHz2OI=; b=uflhRZhb4bi06pLLLGqIdKQZBzk3cYoN6yMBxVifxdRj1b4CoCjS+PL1x6AReKmz8g 2I5AMFhYkGeaDCIP5vkjdTUKho5DClGhYJjyJM70I5PE9N1/SAiuh2DBK+UT+yMvTg87 S8bK9w6FWNo5o1aYndllvfLLbwHvnJOXcN9V8a74dwMB4Uc9d54328JPkzwWhsilaBww G4HypVPoJ2khExiaFWeNw7tlYbx2RuUcJh8gqIPh8LnNxv1W8eRADxjnDId+7mamz84H 3WCjh7anMOlMTEalnz3UocMaGRafAe/rM6KdHr1diidPrMCj2eRYbM4YG/Xjj1cS7ueJ GrlQ== X-Gm-Message-State: APjAAAUSZxgTbq9BlUpBtV8U6ElT3t3PxKVhZck8ifeEynD32qANrVpT fE4Ar79yN+fLn66iYdkvP4oJFO8Vlg== X-Google-Smtp-Source: APXvYqzFkmU/UX6W7DtuMuATASrecyq/8UX1iIHhAQlZLSpp+j2Pqi/0bUgkdcPsHu21HuIR1CwjsA== X-Received: by 2002:adf:f646:: with SMTP id x6mr12051850wrp.18.1565188677981; Wed, 07 Aug 2019 07:37:57 -0700 (PDT) Received: from ascain.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 2sm133441211wrn.29.2019.08.07.07.37.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Aug 2019 07:37:57 -0700 (PDT) From: Thierry Herbelot To: dev@dpdk.org Cc: Laurent Hardy , stable@dpdk.org, Thomas Monjalon Date: Wed, 7 Aug 2019 16:37:26 +0200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH 19.11 07/12] net/i40e: set speed to undefined for default case in link update 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" From: Laurent Hardy During PF/VF link update, a default speed value of 100M will be set if get_link_info has failed or speed is unknown. Consequently if PF is put in no-carrier state, VFs will switch to "in carrier" state due to a link up + a link speed set to 100M (default value if no speed detected). To be consistent with linux drivers on which PF and VFs are in same carrier state, sets default speed to undefined (instead of 100M) and updates a link status of VF only if link is up and speed is different from undefined. Fixes: 4861cde46116 ('i40e: new poll mode driver') Cc: stable at dpdk.org Signed-off-by: Laurent Hardy --- drivers/net/i40e/i40e_ethdev.c | 4 ++-- drivers/net/i40e/i40e_ethdev_vf.c | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 4e40b7ab5250..76abe8209a10 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -2743,7 +2743,7 @@ update_link_aq(struct i40e_hw *hw, struct rte_eth_link *link, status = i40e_aq_get_link_info(hw, enable_lse, &link_status, NULL); if (unlikely(status != I40E_SUCCESS)) { - link->link_speed = ETH_SPEED_NUM_100M; + link->link_speed = ETH_SPEED_NUM_NONE; link->link_duplex = ETH_LINK_FULL_DUPLEX; PMD_DRV_LOG(ERR, "Failed to get link info"); return; @@ -2777,7 +2777,7 @@ update_link_aq(struct i40e_hw *hw, struct rte_eth_link *link, link->link_speed = ETH_SPEED_NUM_40G; break; default: - link->link_speed = ETH_SPEED_NUM_100M; + link->link_speed = ETH_SPEED_NUM_NONE; break; } } diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index 308fb9835ab1..9ba351710b7a 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -2143,13 +2143,15 @@ i40evf_dev_link_update(struct rte_eth_dev *dev, new_link.link_speed = ETH_SPEED_NUM_40G; break; default: - new_link.link_speed = ETH_SPEED_NUM_100M; + new_link.link_speed = ETH_SPEED_NUM_NONE; break; } /* full duplex only */ new_link.link_duplex = ETH_LINK_FULL_DUPLEX; - new_link.link_status = vf->link_up ? ETH_LINK_UP : - ETH_LINK_DOWN; + new_link.link_status = vf->link_up + && new_link.link_speed != ETH_SPEED_NUM_NONE + ? ETH_LINK_UP + : ETH_LINK_DOWN; new_link.link_autoneg = !(dev->data->dev_conf.link_speeds & ETH_LINK_SPEED_FIXED); From patchwork Wed Aug 7 14:37:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Herbelot X-Patchwork-Id: 57531 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 AA8701B957; Wed, 7 Aug 2019 16:38:17 +0200 (CEST) Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by dpdk.org (Postfix) with ESMTP id 5942B2C02 for ; Wed, 7 Aug 2019 16:37:59 +0200 (CEST) Received: by mail-wm1-f68.google.com with SMTP id s15so284932wmj.3 for ; Wed, 07 Aug 2019 07:37:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=NZH3GcJKdzDfO7jK2vjY1yf+BFeXzaz2yLSDIletMW4=; b=M22ZRP7VC7l8Fbpv0GGBfLcUxAvlj4zEeJw4FbTGAGGa4wDRY6uZY2j5zdmF+GNBL+ gfui28Q6Vn1O+HjVBQQhkybHPTNtPYcb0w7bVHHyod+u03VLF1dGo6MfNYsJOOvFIMqb zhTecWP7MBcyNDqkqa55Wdg/CfJtyjtXbNmN57TqbH+RL3FitdwPSlBEjQ56iqbCQ5JV Kmw05NsFshnVia5Ujer+De+tcdnphyLYjiZ/CZXDfqMetmhrPXhAd5i7URtor8qonGAB Nq8T5vNCHOFZdX1d8mxojq8j1mW9uDhO9hs9PjjbaDKwxNqkyam6hjSKwgIbV6XI+nOH LV4Q== 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:in-reply-to:references; bh=NZH3GcJKdzDfO7jK2vjY1yf+BFeXzaz2yLSDIletMW4=; b=Do1STrLMa436Rl0NbJSxTdhlb28ZAjb3s1/+5Fj080lOU80MyT8nQdz109a4ngn+6f 3qn5rRPGWmS10SVtrqocoNV2FJtao0z8UbqYrbsWO+r3XqKuM/p5HKEolMyzaa73E6LG 9hlxG8dH7darBJddMuqNw8ZNXDiNgRQZvsoR8UQezRU6zvOl7fGBOk84RrxzeZ56/W6H gQLyB8uv6zNimCD9i8zd1/amYqnb1yy0YGuaGsZx1fphGin/SMTz3SEI2wbJTpswMGxY DVvrJmetmmc0eFscvJsjJoAMFeUyyosUoteISsKcRevEemD+MorGgRjHjgKcodGQvaqe i1EA== X-Gm-Message-State: APjAAAUmpXcanTe5/UMFBHkTM4AWiX+R5sUDbPIxGU8WzddBXj6FFo9R 5Du8t10XIGfooY/NlUOTDV2idGpwHg== X-Google-Smtp-Source: APXvYqz4YoNJyl+FB/43B4I5o1E9aDNlvaAHFzwPkpOzXBZLmaeiS3LJn4hWQ6Szth8mYyvYlZCZTQ== X-Received: by 2002:a1c:ca14:: with SMTP id a20mr268839wmg.71.1565188678845; Wed, 07 Aug 2019 07:37:58 -0700 (PDT) Received: from ascain.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 2sm133441211wrn.29.2019.08.07.07.37.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Aug 2019 07:37:58 -0700 (PDT) From: Thierry Herbelot To: dev@dpdk.org Cc: Thibaut Collet , stable@dpdk.org, Thomas Monjalon Date: Wed, 7 Aug 2019 16:37:27 +0200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH 19.11 08/12] virtio: fix rx stats with vectorized functions 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" From: Thibaut Collet With vectorized functions, only the rx stats for number of packets is incremented. Update also the other statistics. Performance impact is about 2% Fixes: fc3d66212fed ("virtio: add vector Rx") Cc: stable at dpdk.org Signed-off-by: Thibaut Collet --- drivers/net/virtio/virtio_rxtx.c | 2 +- drivers/net/virtio/virtio_rxtx.h | 2 ++ drivers/net/virtio/virtio_rxtx_simple_neon.c | 6 ++++++ drivers/net/virtio/virtio_rxtx_simple_sse.c | 6 ++++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c index 27ead19fbe81..6dd62bf51863 100644 --- a/drivers/net/virtio/virtio_rxtx.c +++ b/drivers/net/virtio/virtio_rxtx.c @@ -1083,7 +1083,7 @@ virtio_discard_rxbuf_inorder(struct virtqueue *vq, struct rte_mbuf *m) } } -static inline void +void virtio_update_packet_stats(struct virtnet_stats *stats, struct rte_mbuf *mbuf) { uint32_t s = mbuf->pkt_len; diff --git a/drivers/net/virtio/virtio_rxtx.h b/drivers/net/virtio/virtio_rxtx.h index 685cc4f8104c..1eb8dae227ee 100644 --- a/drivers/net/virtio/virtio_rxtx.h +++ b/drivers/net/virtio/virtio_rxtx.h @@ -59,5 +59,7 @@ struct virtnet_ctl { }; int virtio_rxq_vec_setup(struct virtnet_rx *rxvq); +void virtio_update_packet_stats(struct virtnet_stats *stats, + struct rte_mbuf *mbuf); #endif /* _VIRTIO_RXTX_H_ */ diff --git a/drivers/net/virtio/virtio_rxtx_simple_neon.c b/drivers/net/virtio/virtio_rxtx_simple_neon.c index cdc2a4d28ed5..e4b18cba0ce5 100644 --- a/drivers/net/virtio/virtio_rxtx_simple_neon.c +++ b/drivers/net/virtio/virtio_rxtx_simple_neon.c @@ -47,6 +47,7 @@ virtio_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts, struct vring_used_elem *rused; struct rte_mbuf **sw_ring; struct rte_mbuf **sw_ring_end; + struct rte_mbuf **ref_rx_pkts; uint16_t nb_pkts_received = 0; uint8x16_t shuf_msk1 = { @@ -105,6 +106,7 @@ virtio_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts, virtqueue_notify(vq); } + ref_rx_pkts = rx_pkts; for (nb_pkts_received = 0; nb_pkts_received < nb_used;) { uint64x2_t desc[RTE_VIRTIO_DESC_PER_LOOP / 2]; @@ -204,5 +206,9 @@ virtio_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts, vq->vq_used_cons_idx += nb_pkts_received; vq->vq_free_cnt += nb_pkts_received; rxvq->stats.packets += nb_pkts_received; + for (nb_used = 0; nb_used < nb_pkts_received; nb_used++) { + rxvq->stats.bytes += ref_rx_pkts[nb_used]->pkt_len; + virtio_update_packet_stats(&rxvq->stats, ref_rx_pkts[nb_used]); + } return nb_pkts_received; } diff --git a/drivers/net/virtio/virtio_rxtx_simple_sse.c b/drivers/net/virtio/virtio_rxtx_simple_sse.c index af76708d66ae..c757e8c9d601 100644 --- a/drivers/net/virtio/virtio_rxtx_simple_sse.c +++ b/drivers/net/virtio/virtio_rxtx_simple_sse.c @@ -48,6 +48,7 @@ virtio_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts, struct vring_used_elem *rused; struct rte_mbuf **sw_ring; struct rte_mbuf **sw_ring_end; + struct rte_mbuf **ref_rx_pkts; uint16_t nb_pkts_received = 0; __m128i shuf_msk1, shuf_msk2, len_adjust; @@ -107,6 +108,7 @@ virtio_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts, virtqueue_notify(vq); } + ref_rx_pkts = rx_pkts; for (nb_pkts_received = 0; nb_pkts_received < nb_used;) { __m128i desc[RTE_VIRTIO_DESC_PER_LOOP / 2]; @@ -190,5 +192,9 @@ virtio_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts, vq->vq_used_cons_idx += nb_pkts_received; vq->vq_free_cnt += nb_pkts_received; rxvq->stats.packets += nb_pkts_received; + for (nb_used = 0; nb_used < nb_pkts_received; nb_used++) { + rxvq->stats.bytes += ref_rx_pkts[nb_used]->pkt_len; + virtio_update_packet_stats(&rxvq->stats, ref_rx_pkts[nb_used]); + } return nb_pkts_received; } From patchwork Wed Aug 7 14:37:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Herbelot X-Patchwork-Id: 57532 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 3615A1B970; Wed, 7 Aug 2019 16:38:19 +0200 (CEST) Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by dpdk.org (Postfix) with ESMTP id 138EA2C02 for ; Wed, 7 Aug 2019 16:38:00 +0200 (CEST) Received: by mail-wr1-f66.google.com with SMTP id t16so1520634wra.6 for ; Wed, 07 Aug 2019 07:38:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=4AA75z0k2YLTMG07EUslwT4j6faGfzjKPl2dPIEQc+8=; b=Pa/Vux9GnMvq1KD2HnkSFGZHUFf4SSL90rNVA53DkJUHZiAb4+E1G3nvHUR4kZJ4VH McGHxvZRtH8mIKzIHZRICx4FR8VKjuiIYCK80hNkwkCu1X/CWcmbojehaAfQIwBnZt3H lW/iXT7DB1XLFZUGD3MQv0EO1qlFEsHXT2r/C4mbnrbffXrbeKQiRrdasPUFUEQ/nbu5 5IijOCQ/INzA6zD9G+pgmY1THWnyo1y7tz0Rnrfb/IjGYDFDxUaq+Jdb85j/jxh3wBzU 4nMT98OuCc55S4xnoV6zW/IShr1XWgwO9szAophXc6iTNgdqh+CW7XXyeKZLMvHbUL2t agsQ== 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:in-reply-to:references; bh=4AA75z0k2YLTMG07EUslwT4j6faGfzjKPl2dPIEQc+8=; b=nQTKoOSkpv36+JQs+ldJwkeErGVzT+DCmUuZ6qD2MPbCCDEemjdWGC+pyLOS6QUZTa hVB1tSSnvDfnBp+AUec3pofWeCuJGaHKhKtHHgg9qNnJRY1waGPt81EsND7P5b5mREqU lXr6gT813CkxhfSW0O55SmqMP71O/JJyH9KN4EkTCVj35TgIVxzanO+LWcyp9HrJtXXB VUqa3NrMQtBWOoJJPPkq9RY6V7khWSC/biI2F+hCLHmNw5B25Up33oDRRf8u2YjljQM3 87rkKa19cKIcOOiy4EHIDUkXe7SWb6/ay+phZRwwmhqniHamqM57bTX8xWcrafWQ0sMk wNbw== X-Gm-Message-State: APjAAAX0aAPZjBq0OwlCPRG/cmc6aD+/N2p/oKdAq2rgBJiCyTqftrHF K1jSPJtcEtwVSAUOUJ7rafsN+kNtDA== X-Google-Smtp-Source: APXvYqwVIz0CcMepYnW86v/z/6XZIvxDJ2NWv2+h0gr42npToMrYgXYynO1cfSGOuzE5AYHQIl/mQQ== X-Received: by 2002:a5d:4e90:: with SMTP id e16mr11233670wru.339.1565188679657; Wed, 07 Aug 2019 07:37:59 -0700 (PDT) Received: from ascain.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 2sm133441211wrn.29.2019.08.07.07.37.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Aug 2019 07:37:59 -0700 (PDT) From: Thierry Herbelot To: dev@dpdk.org Cc: Thibaut Collet , stable@dpdk.org, Thomas Monjalon Date: Wed, 7 Aug 2019 16:37:28 +0200 Message-Id: <3afc75c18d194c49bdc647eb3787f04a1c788c3e.1565188248.git.thierry.herbelot@6wind.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH 19.11 09/12] virtio: get all pending rx packets with vectorized functions 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" From: Thibaut Collet The loop to read packets does not take all packets as the number of available packets (nb_used) is decremented in the loop. Take all available packets provides a performance improvement of 3%. Fixes: fc3d66212fed ("virtio: add vector Rx") Cc: stable at dpdk.org Signed-off-by: Thibaut Collet --- drivers/net/virtio/virtio_rxtx_simple_neon.c | 5 +++-- drivers/net/virtio/virtio_rxtx_simple_sse.c | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/virtio/virtio_rxtx_simple_neon.c b/drivers/net/virtio/virtio_rxtx_simple_neon.c index e4b18cba0ce5..66bdaa00e01f 100644 --- a/drivers/net/virtio/virtio_rxtx_simple_neon.c +++ b/drivers/net/virtio/virtio_rxtx_simple_neon.c @@ -42,7 +42,7 @@ virtio_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts, struct virtnet_rx *rxvq = rx_queue; struct virtqueue *vq = rxvq->vq; struct virtio_hw *hw = vq->hw; - uint16_t nb_used; + uint16_t nb_used, nb_total; uint16_t desc_idx; struct vring_used_elem *rused; struct rte_mbuf **sw_ring; @@ -106,9 +106,10 @@ virtio_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts, virtqueue_notify(vq); } + nb_total = nb_used; ref_rx_pkts = rx_pkts; for (nb_pkts_received = 0; - nb_pkts_received < nb_used;) { + nb_pkts_received < nb_total;) { uint64x2_t desc[RTE_VIRTIO_DESC_PER_LOOP / 2]; uint64x2_t mbp[RTE_VIRTIO_DESC_PER_LOOP / 2]; uint64x2_t pkt_mb[RTE_VIRTIO_DESC_PER_LOOP]; diff --git a/drivers/net/virtio/virtio_rxtx_simple_sse.c b/drivers/net/virtio/virtio_rxtx_simple_sse.c index c757e8c9d601..811b416755e7 100644 --- a/drivers/net/virtio/virtio_rxtx_simple_sse.c +++ b/drivers/net/virtio/virtio_rxtx_simple_sse.c @@ -43,7 +43,7 @@ virtio_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts, struct virtnet_rx *rxvq = rx_queue; struct virtqueue *vq = rxvq->vq; struct virtio_hw *hw = vq->hw; - uint16_t nb_used; + uint16_t nb_used, nb_total; uint16_t desc_idx; struct vring_used_elem *rused; struct rte_mbuf **sw_ring; @@ -108,9 +108,10 @@ virtio_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts, virtqueue_notify(vq); } + nb_total = nb_used; ref_rx_pkts = rx_pkts; for (nb_pkts_received = 0; - nb_pkts_received < nb_used;) { + nb_pkts_received < nb_total;) { __m128i desc[RTE_VIRTIO_DESC_PER_LOOP / 2]; __m128i mbp[RTE_VIRTIO_DESC_PER_LOOP / 2]; __m128i pkt_mb[RTE_VIRTIO_DESC_PER_LOOP]; From patchwork Wed Aug 7 14:37:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Herbelot X-Patchwork-Id: 57533 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 011FC1B9A0; Wed, 7 Aug 2019 16:38:21 +0200 (CEST) Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by dpdk.org (Postfix) with ESMTP id 23D6E2B9E for ; Wed, 7 Aug 2019 16:38:01 +0200 (CEST) Received: by mail-wr1-f68.google.com with SMTP id r1so91598995wrl.7 for ; Wed, 07 Aug 2019 07:38:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=FVzZjSZCwjtSjhN39Ardbr6yKifb6QHpQkNIuBKoh2Q=; b=hEFT+/qvcpnYk6VEF1UCYyL6fJmF/86rmXAxJ3GCx1Crrih8O0E3+auSeY2wSLkEcL AxvDvGEE/Thq5lSW5GZAMrPfduCx1Ui/JpeK0tvTNsmuLiqE+FR0WbhXP/83e+RVaaLD 8aD6i51M+8T+xeg7iq6HjDlbH9xCj6jbs6C1++61yJDRhz9WrcZrp4vwyUvgon0V2eiM 2m5fYwW5oT4hgwjNwJaj+bSkbprEEYiqRSQDixrdCgTS6a3wvjim+5qrnFglyeQso/ok 5pcjOzt/HQtaVe1SsmYjgnV9kiLp9cjuKZGw6oGJI+LGwlcvA7WA1IGpuvc3noY43C6y FGmA== 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:in-reply-to:references; bh=FVzZjSZCwjtSjhN39Ardbr6yKifb6QHpQkNIuBKoh2Q=; b=G69quTDJTUp3kH1pCETxsGJi/BlKtdtMMgKyueXujAr59Soqkm+jvd0/OnY0Apn3k7 85cQ8S/IG4VrJCJgA9ePyHiEs/c51JL0SLlN3nX8r2M3nzE2fEn5Y72tWPFpRLtqHW48 67p+GcA5YASQv+2BmO76DB48O8yU5I3XIjsu+Jf/64YLhHyCasODf/nQepCDTfMp7Dqe v6qWOdgJG4ga1u5Ly9/G5pmUUukDjzyXAEh3/Id5uBIh3UM6eoL9QcNLST4LNXix2zKq h7XhMq0TnEc77guRO54MyT35KS/jak64sXG0Nv90ezh4t47CwY3owmu1CbpJPuz6Njvi 3O1Q== X-Gm-Message-State: APjAAAWTmlP/Yje3yCOYh6YvzOfG1ELx7iGnVqvc8/S53Y2FsvoyTrru hgc7lqr2+MEEJcBwRn1ARluae/7Zjw== X-Google-Smtp-Source: APXvYqxWfoeibiwRsJAQbvEaxjLQlXcV6GWaiiv5zipZGROsBtgX1AHPDO9/scZvqpuYBRos8jZLyQ== X-Received: by 2002:adf:e691:: with SMTP id r17mr11541284wrm.67.1565188680467; Wed, 07 Aug 2019 07:38:00 -0700 (PDT) Received: from ascain.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 2sm133441211wrn.29.2019.08.07.07.37.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Aug 2019 07:37:59 -0700 (PDT) From: Thierry Herbelot To: dev@dpdk.org Cc: stable@dpdk.org, Thomas Monjalon Date: Wed, 7 Aug 2019 16:37:29 +0200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH 19.11 10/12] drivers/crypto/openssl: use a local copy for the session contexts 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" Session contexts are used for temporary storage when processing a packet. If packets for the same session are to be processed simultaneously on multiple cores, separate contexts must be used. Note: with openssl 1.1.1 EVP_CIPHER_CTX can no longer be defined as a variable on the stack: it must be allocated. This in turn reduces the performance. Fixes: d61f70b4c918 ('crypto/libcrypto: add driver for OpenSSL library') Cc: stable at dpdk.org Signed-off-by: Thierry Herbelot --- drivers/crypto/openssl/rte_openssl_pmd.c | 34 +++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/drivers/crypto/openssl/rte_openssl_pmd.c b/drivers/crypto/openssl/rte_openssl_pmd.c index 2f5552840741..ce2d12347737 100644 --- a/drivers/crypto/openssl/rte_openssl_pmd.c +++ b/drivers/crypto/openssl/rte_openssl_pmd.c @@ -1290,6 +1290,7 @@ process_openssl_combined_op int srclen, aadlen, status = -1; uint32_t offset; uint8_t taglen; + EVP_CIPHER_CTX *ctx_copy; /* * Segmented destination buffer is not supported for @@ -1326,6 +1327,8 @@ process_openssl_combined_op } taglen = sess->auth.digest_length; + ctx_copy = EVP_CIPHER_CTX_new(); + EVP_CIPHER_CTX_copy(ctx_copy, sess->cipher.ctx); if (sess->cipher.direction == RTE_CRYPTO_CIPHER_OP_ENCRYPT) { if (sess->auth.algo == RTE_CRYPTO_AUTH_AES_GMAC || @@ -1333,12 +1336,12 @@ process_openssl_combined_op status = process_openssl_auth_encryption_gcm( mbuf_src, offset, srclen, aad, aadlen, iv, - dst, tag, sess->cipher.ctx); + dst, tag, ctx_copy); else status = process_openssl_auth_encryption_ccm( mbuf_src, offset, srclen, aad, aadlen, iv, - dst, tag, taglen, sess->cipher.ctx); + dst, tag, taglen, ctx_copy); } else { if (sess->auth.algo == RTE_CRYPTO_AUTH_AES_GMAC || @@ -1346,14 +1349,15 @@ process_openssl_combined_op status = process_openssl_auth_decryption_gcm( mbuf_src, offset, srclen, aad, aadlen, iv, - dst, tag, sess->cipher.ctx); + dst, tag, ctx_copy); else status = process_openssl_auth_decryption_ccm( mbuf_src, offset, srclen, aad, aadlen, iv, - dst, tag, taglen, sess->cipher.ctx); + dst, tag, taglen, ctx_copy); } + EVP_CIPHER_CTX_free(ctx_copy); if (status != 0) { if (status == (-EFAULT) && sess->auth.operation == @@ -1372,6 +1376,7 @@ process_openssl_cipher_op { uint8_t *dst, *iv; int srclen, status; + EVP_CIPHER_CTX *ctx_copy; /* * Segmented destination buffer is not supported for @@ -1388,22 +1393,25 @@ process_openssl_cipher_op iv = rte_crypto_op_ctod_offset(op, uint8_t *, sess->iv.offset); + ctx_copy = EVP_CIPHER_CTX_new(); + EVP_CIPHER_CTX_copy(ctx_copy, sess->cipher.ctx); if (sess->cipher.mode == OPENSSL_CIPHER_LIB) if (sess->cipher.direction == RTE_CRYPTO_CIPHER_OP_ENCRYPT) status = process_openssl_cipher_encrypt(mbuf_src, dst, op->sym->cipher.data.offset, iv, - srclen, sess->cipher.ctx); + srclen, ctx_copy); else status = process_openssl_cipher_decrypt(mbuf_src, dst, op->sym->cipher.data.offset, iv, - srclen, sess->cipher.ctx); + srclen, ctx_copy); else status = process_openssl_cipher_des3ctr(mbuf_src, dst, op->sym->cipher.data.offset, iv, sess->cipher.key.data, srclen, - sess->cipher.ctx); + ctx_copy); + EVP_CIPHER_CTX_free(ctx_copy); if (status != 0) op->status = RTE_CRYPTO_OP_STATUS_ERROR; } @@ -1507,6 +1515,8 @@ process_openssl_auth_op(struct openssl_qp *qp, struct rte_crypto_op *op, { uint8_t *dst; int srclen, status; + EVP_MD_CTX *ctx_a; + HMAC_CTX *ctx_h; srclen = op->sym->auth.data.length; @@ -1514,14 +1524,20 @@ process_openssl_auth_op(struct openssl_qp *qp, struct rte_crypto_op *op, switch (sess->auth.mode) { case OPENSSL_AUTH_AS_AUTH: + ctx_a = EVP_MD_CTX_create(); + EVP_MD_CTX_copy_ex(ctx_a, sess->auth.auth.ctx); status = process_openssl_auth(mbuf_src, dst, op->sym->auth.data.offset, NULL, NULL, srclen, - sess->auth.auth.ctx, sess->auth.auth.evp_algo); + ctx_a, sess->auth.auth.evp_algo); + EVP_MD_CTX_destroy(ctx_a); break; case OPENSSL_AUTH_AS_HMAC: + ctx_h = HMAC_CTX_new(); + HMAC_CTX_copy(ctx_h, sess->auth.hmac.ctx); status = process_openssl_auth_hmac(mbuf_src, dst, op->sym->auth.data.offset, srclen, - sess->auth.hmac.ctx); + ctx_h); + HMAC_CTX_free(ctx_h); break; default: status = -1; From patchwork Wed Aug 7 14:37:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Herbelot X-Patchwork-Id: 57534 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 742C61B9DF; Wed, 7 Aug 2019 16:38:22 +0200 (CEST) Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by dpdk.org (Postfix) with ESMTP id 62D012F42 for ; Wed, 7 Aug 2019 16:38:02 +0200 (CEST) Received: by mail-wr1-f66.google.com with SMTP id t16so1520779wra.6 for ; Wed, 07 Aug 2019 07:38:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=0KkrHrniPVrFgJyYqqRxhR3IH+801XMnfyuDrBVVu/I=; b=UAq7wNxLzJRFO4J36i2DdB1zquQXvEEtGhL00Ppi8wl/qbNgvRl1LJUqLTVEh+zQ5Y 0Z/QFSSl/NTaxdEKu6p4R7TJ3tmE52XJnl5gn8EgPVMIKdL1rYJpEZGTaJPDwNulci8g 153Ptv0MwWEyYFOmJR7zyIHiXj/QS1GtuKmyW8wPcB6zMDgtmTy04+tFC/mVewXQODsn swNXG8/57oexDWjez8QP0/fQ4Yp9ntZEzuRireaOhSOyGXlJxI7AlEWzE8j1ThfiTNkD 1YpPAAGRHm8ChiR4wpIQEHsHA1qy/YQ6GWxQYpjIcdWbW/wbnGqgyiPx7Kd+mf20tFwZ SH2A== 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:in-reply-to:references; bh=0KkrHrniPVrFgJyYqqRxhR3IH+801XMnfyuDrBVVu/I=; b=R52yziENLUhvh+wn2fciy0+OL7v+kJU4a+ZXWUCLVRqRfQKf8gezIpVJFRmGAIY5zf yU9ggJUje1jHqPrmJY4fzj5IPlsnuOE5CRo8OS4X6MRAFboLFXOCR4Ct9A5rN8WS95mt qsTya4RH8LCkgquc8Eny3wa7D6LorMTG5mtwLqqbPWQ7f4VBpwngFgP0DZtdCnlFBsYD ghcCc8DDIez9pPi8IdvpAEqNnfAkvdxlms/p0ruHfT4BDOWMXEOmtw3dXy3IOgbPu9IG nFrDMcveI0Ha/qsXErNbU7RIdj24X4fLymhXVDmlP3IxwaS5XZAwx5waT8pNiZ5ZXu3q lL6A== X-Gm-Message-State: APjAAAVKda4A0uL10XhFyYCp3M2sVRE14/zlbMMZr+DTy+/eS7MnqLn3 xtHfIIoBNkHXu41UFdPUoeraNSLAxA== X-Google-Smtp-Source: APXvYqzNBemR/SARTibc0hVAUM9QV8XVsq8R9DiS3WDOgYGq9RJ/XtycJPjXPcaTU7Btp2l/qA/1lg== X-Received: by 2002:adf:e94e:: with SMTP id m14mr8495777wrn.230.1565188681989; Wed, 07 Aug 2019 07:38:01 -0700 (PDT) Received: from ascain.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 2sm133441211wrn.29.2019.08.07.07.38.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Aug 2019 07:38:00 -0700 (PDT) From: Thierry Herbelot To: dev@dpdk.org Cc: stable@dpdk.org, Thomas Monjalon Date: Wed, 7 Aug 2019 16:37:30 +0200 Message-Id: <0cfc91749bb6fe10493ecdf13994d873bbe2ce57.1565188248.git.thierry.herbelot@6wind.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH 19.11 11/12] drivers/crypto/dpaa_sec: update DPAA iova table in dpaa_mem_vtop 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" dpaa_sec needs translations between physical and virtual addresses. V to P translation is relatively fast, as memory is managed in contiguous segments. The result of each V to P translation is used to update the DPAA iova table, which should be updated by a Mem event callback, but is not. Then the DPAA iova table has entries for all needed memory ranges. With this patch, dpaa_mem_ptov will always use dpaax_iova_table_get_va, which ensures optimal performance. Fixes: 5a7dbb934d75 ('dpaa: enable dpaax library') Cc: stable at dpdk.org Signed-off-by: Thierry Herbelot --- drivers/crypto/dpaa_sec/dpaa_sec.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c index 122c80a072ff..22b8b1d63ce0 100644 --- a/drivers/crypto/dpaa_sec/dpaa_sec.c +++ b/drivers/crypto/dpaa_sec/dpaa_sec.c @@ -38,6 +38,7 @@ #include #include #include +#include enum rta_sec_era rta_sec_era; @@ -100,8 +101,10 @@ dpaa_mem_vtop(void *vaddr) const struct rte_memseg *ms; ms = rte_mem_virt2memseg(vaddr, NULL); - if (ms) + if (ms) { + dpaax_iova_table_update(ms->iova, (void *)ms->addr_64, ms->len); return ms->iova + RTE_PTR_DIFF(vaddr, ms->addr); + } return (size_t)NULL; } From patchwork Wed Aug 7 14:37:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Herbelot X-Patchwork-Id: 57535 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 28F741BCB8; Wed, 7 Aug 2019 16:38:24 +0200 (CEST) Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by dpdk.org (Postfix) with ESMTP id 794982C02 for ; Wed, 7 Aug 2019 16:38:03 +0200 (CEST) Received: by mail-wr1-f66.google.com with SMTP id r1so91599117wrl.7 for ; Wed, 07 Aug 2019 07:38:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=satS4hxUN2zPnmYzDpx1LKPLkpEIBC0SjQL1LOh+cRM=; b=D1ciuojbfYtdkaVkPUpUzOBEUqHOZMAdBs8qv+43TsiZHubTVP6w6q4w0KJr61358a Lo3zt+WehQPnykyx/HgxkFDN8xkvRxuL0MlNLIrvTwBIiEvGpjbkSBsTueGRrwDjbNOS ZlGeUWw2P1onfPOOnwbOsOwffCqWMrykHQkE4rtbD4qozGM4cTiO6Od/uW7H0pvR7ltM YjdUDOv2mWyuzYqIzuRKrqxWMqcJOW5Dy8LdLTgyyQaj5rGZ61JRSS6jOj9kdDuSBtkC Pnp2y/3xzDKXoT1VDIBftP2mxMl3C0wpPZTY7gpSd5ipvt7af4U7SE5WgRjTN7/hU0pz pLrw== 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:in-reply-to:references; bh=satS4hxUN2zPnmYzDpx1LKPLkpEIBC0SjQL1LOh+cRM=; b=XHW8OQi4Fgp5LUZInohCjJtny3UVCYGFnmTkp5wA5HEDtO3eDvoYHFIXOg1Mntg8Yh pJRjAtf80GeyB0EMGxS+H8vdTjAgpn3rKy2R+uuBDzk0lvVKM8O1h2geI1OYj+QE71NN S8gpXmesmIteoKQfMHWOgks9wTwEbFzabBitwim3WtlltG18LIKwxUhAQOEfWPP/xY9c 0zOv8UWkX+mEKT9tz8foVQUAG75GIZWm0cxGfLJw9M5rHdb85/H4GRGoy36sko1Wi+X7 CP8aqYcoPPEu5H4Fq67RePV02FPykMTYIVu37gkU11drRiBIKQ0Dz2txVdw7NGD4L+Vp 7xlg== X-Gm-Message-State: APjAAAUAR90jYrnuOz6wf4G8r+a1vnnUWE2piwwK/923COHe8xDwkm2E qFfZRCkWDbQtMFEbKu4xQU83p2sn4g== X-Google-Smtp-Source: APXvYqzk6ITJeAq+VUArA5e6Nu0qBeG7yzDPoZeXmXA0q3EKiaXj/hf4Gptacyz5lqC/uceFfxPpNA== X-Received: by 2002:a5d:5348:: with SMTP id t8mr11014147wrv.159.1565188683065; Wed, 07 Aug 2019 07:38:03 -0700 (PDT) Received: from ascain.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 2sm133441211wrn.29.2019.08.07.07.38.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Aug 2019 07:38:02 -0700 (PDT) From: Thierry Herbelot To: dev@dpdk.org Cc: stable@dpdk.org, Thomas Monjalon Date: Wed, 7 Aug 2019 16:37:31 +0200 Message-Id: <49b8c2c3caea4785b19f4ef2308abaf670c080cf.1565188248.git.thierry.herbelot@6wind.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH 19.11 12/12] drivers/crypto/octeontx: enable unbinding for the OcteonTx crypto engines 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" Like for Ethernet ports, the OcteonTx crypto engines must first be unbound from their kernel module, then rebound to vfio-pci, before being usable in DPDK. As this capability is detected at runtime by dpdk-pmdinfo, add the info in the PMD registering directives. Then an external script can be used for bind and unbind. Fixes: bfe2ae495ee268 ('crypto/octeontx: add PMD skeleton') Cc: stable at dpdk.org Signed-off-by: Thierry Herbelot --- drivers/crypto/octeontx/otx_cryptodev.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/crypto/octeontx/otx_cryptodev.c b/drivers/crypto/octeontx/otx_cryptodev.c index fc64a5f3041f..16f1909966d0 100644 --- a/drivers/crypto/octeontx/otx_cryptodev.c +++ b/drivers/crypto/octeontx/otx_cryptodev.c @@ -118,6 +118,7 @@ static struct cryptodev_driver otx_cryptodev_drv; RTE_PMD_REGISTER_PCI(CRYPTODEV_NAME_OCTEONTX_PMD, otx_cryptodev_pmd); RTE_PMD_REGISTER_PCI_TABLE(CRYPTODEV_NAME_OCTEONTX_PMD, pci_id_cpt_table); +RTE_PMD_REGISTER_KMOD_DEP(CRYPTODEV_NAME_OCTEONTX_PMD, "* igb_uio | uio_pci_generic | vfio-pci"); RTE_PMD_REGISTER_CRYPTO_DRIVER(otx_cryptodev_drv, otx_cryptodev_pmd.driver, otx_cryptodev_driver_id);