From patchwork Thu Nov 10 16:34:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Pelletier X-Patchwork-Id: 119732 X-Patchwork-Delegate: andrew.rybchenko@oktetlabs.ru Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id EBB08A0542; Thu, 10 Nov 2022 18:31:55 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6D03C40156; Thu, 10 Nov 2022 18:31:55 +0100 (CET) Received: from mail-qt1-f174.google.com (mail-qt1-f174.google.com [209.85.160.174]) by mails.dpdk.org (Postfix) with ESMTP id AB33F400EF; Thu, 10 Nov 2022 18:31:53 +0100 (CET) Received: by mail-qt1-f174.google.com with SMTP id hh9so1303240qtb.13; Thu, 10 Nov 2022 09:31:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=D+mqHyTA9FnXTqumn0MfjbVMpnngnpDxk14Kfx1ZjYs=; b=Fy/Yv3GV/tlRO6CEp5oitZpoDEMDKVnEjcW4Ks6uYomQccHnYmmjKyfCr5fQxXkrkt XQUcvhEGjhc9Wg6p2samAk9eoMKXaPFdC3e9o2ib3mdqriCjO2CDTb+8aSW4wPsdaYWZ mP1U/NhTV6XbMA990gq7gzfAbvwAf77km7kyv9aJxIs1Tocn1pQVZOLogwHLRWrjqm7/ oQSlaUZu47chZsxRPtdGSDXaTjUasuAUcmvSpv2j6TI5WYZgTG9uKrXFVpILq2DhQ4CI 8Ka/eRd6eAe9icSCDGI/hdZwvrS/KQz1X1xxvjhDd4zZEi/zKjnlCGBxB95TjCYm5ipb DSmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=D+mqHyTA9FnXTqumn0MfjbVMpnngnpDxk14Kfx1ZjYs=; b=PHrTM9+pI0J4OuLPt2Dfj4ckG927+A2a1EuWOdgTgq20bT2DZfBwnpDUIhjHu0FALJ thOkwpT+5fF1ixFGtfb64rQJ6HDla4ErHxoRps+sFvR4q7sDBH+FgnpUwfnKt1mzFO+m cYIjSBqM2+iER67nPm2wRqbCo3KiDO8HLDr+IquxPL+SW/+9wtwm+K0G+QtZEE9iP5VK 6xD2Kia3pyZgWD+AxeMxEi9OTwCQsaAqpZqUEUoy4un33rQLfi+Yixyk8y9vZ7NwASFk jMAN6P6VeuNgMxThDWP7PBXbXQYEcLZnoiF6xLxd2AEs3kDfgpmqkPFQlqCXUgvv3kjT OMZA== X-Gm-Message-State: ACrzQf1+bjC50ZhGmyQkFrk22IeORBpwak0csX4YCWmQ4bXrfKOE0pcw P2YCSSsnBAWCL4Jm3BEyG88= X-Google-Smtp-Source: AMsMyM5IDJmSW7i76k/flbSQMsnSjggKdVZYaWBHD652vXOFQnDl7UNi/O59i69nbZfF2fd6x0PFgQ== X-Received: by 2002:a05:622a:1aa2:b0:3a5:3046:c150 with SMTP id s34-20020a05622a1aa200b003a53046c150mr42672705qtc.286.1668101512829; Thu, 10 Nov 2022 09:31:52 -0800 (PST) Received: from localhost.localdomain (bras-base-hullpq2034w-grc-21-70-54-168-223.dsl.bell.ca. [70.54.168.223]) by smtp.gmail.com with ESMTPSA id d4-20020a05620a240400b006f87d28ea3asm13379724qkn.54.2022.11.10.09.31.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Nov 2022 09:31:52 -0800 (PST) From: Luc Pelletier To: grive@u256.net Cc: dev@dpdk.org, Luc Pelletier , Konstantin Ananyev , stable@dpdk.org Subject: [PATCH] failsafe: fix segfault on hotplug event Date: Thu, 10 Nov 2022 11:34:12 -0500 Message-Id: <20221110163410.12734-1-lucp.at.work@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org When the failsafe PMD encounters a hotplug event, it switches its rx/tx functions to "safe" ones that validate the sub-device's rx/tx functions before calling them. It switches the rx/tx functions by changing the function pointers in the rte_eth_dev structure. Following commit 7a0935239b, the rx/tx functions of PMDs are no longer called through the function pointers in the rte_eth_dev structure. They are rather called through a flat array named rte_eth_fp_ops. The function pointers in that array are initialized when the devices start and are initialized. When a hotplug event occurs, the function pointers in rte_eth_fp_ops still point to the "unsafe" rx/tx functions in the failsafe PMD since they haven't been updated. This results in a segmentation fault because it ends up using the "unsafe" functions, when the "safe" functions should have been used. To fix the problem, the failsafe PMD code was changed to update the function pointers in the rte_eth_fp_ops array when a hotplug event occurs. Fixes: 7a0935239b ("ethdev: make fast-path functions to use new flat array") Cc: Konstantin Ananyev Cc: stable@dpdk.org Signed-off-by: Luc Pelletier --- drivers/net/failsafe/failsafe_rxtx.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/net/failsafe/failsafe_rxtx.c b/drivers/net/failsafe/failsafe_rxtx.c index fe67293299..34d59dfbb1 100644 --- a/drivers/net/failsafe/failsafe_rxtx.c +++ b/drivers/net/failsafe/failsafe_rxtx.c @@ -5,6 +5,7 @@ #include #include +#include #include #include @@ -44,9 +45,13 @@ failsafe_set_burst_fn(struct rte_eth_dev *dev, int force_safe) DEBUG("Using safe RX bursts%s", (force_safe ? " (forced)" : "")); dev->rx_pkt_burst = &failsafe_rx_burst; + rte_eth_fp_ops[dev->data->port_id].rx_pkt_burst = + &failsafe_rx_burst; } else if (!need_safe && safe_set) { DEBUG("Using fast RX bursts"); dev->rx_pkt_burst = &failsafe_rx_burst_fast; + rte_eth_fp_ops[dev->data->port_id].rx_pkt_burst = + &failsafe_rx_burst_fast; } need_safe = force_safe || fs_tx_unsafe(TX_SUBDEV(dev)); safe_set = (dev->tx_pkt_burst == &failsafe_tx_burst); @@ -54,9 +59,13 @@ failsafe_set_burst_fn(struct rte_eth_dev *dev, int force_safe) DEBUG("Using safe TX bursts%s", (force_safe ? " (forced)" : "")); dev->tx_pkt_burst = &failsafe_tx_burst; + rte_eth_fp_ops[dev->data->port_id].tx_pkt_burst = + &failsafe_tx_burst; } else if (!need_safe && safe_set) { DEBUG("Using fast TX bursts"); dev->tx_pkt_burst = &failsafe_tx_burst_fast; + rte_eth_fp_ops[dev->data->port_id].tx_pkt_burst = + &failsafe_tx_burst_fast; } rte_wmb(); } From patchwork Tue Nov 29 14:48:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Pelletier X-Patchwork-Id: 120277 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5AEAFA00C3; Tue, 29 Nov 2022 15:50:42 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 405D742D1D; Tue, 29 Nov 2022 15:50:34 +0100 (CET) Received: from mail-qt1-f177.google.com (mail-qt1-f177.google.com [209.85.160.177]) by mails.dpdk.org (Postfix) with ESMTP id 1B55142B8C for ; Tue, 29 Nov 2022 15:50:31 +0100 (CET) Received: by mail-qt1-f177.google.com with SMTP id e15so9045126qts.1 for ; Tue, 29 Nov 2022 06:50:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Z5p1GQyxy51H5xtgKqyBGTQQpYvZ1l8Hxb5fLcjjpmU=; b=hNpJr0mrJXfmLxcVYUr5IP/ZAYeGLEdoJtkgIG1SQg+oJiIDkZk3nENH1BwfqvSjA+ 7fZv6nRnQtubeZ1a8uY10j6sa8WuPwDmSG46UQOpnS/ZxJaRbE4IPEamxF6z/29HLBIR kNuGEwrH+ls14jfFXlgWByb0GMgn5mQ6K2UhqpokUDMXlPBSgyA4jfm06oiZwQ4eQ+R7 M5QbE1/HWfs6F1KTjsVZtvlJ9ncnE+z5a2Bdz8OzMw29fUNoivFEAX+RyAdHjWFsM69s AXFtl2U3UDv0DHt64VKk3eQ4MIjC/MmYssudLRROj7HBqR+L2jvPncVFLtwris0EMQxp K/AA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Z5p1GQyxy51H5xtgKqyBGTQQpYvZ1l8Hxb5fLcjjpmU=; b=ynVBHZqcnt/cz+luWi6UWwEgP7jU/wCFfa/fw0HhQF+ILNT4pMcvVTZZH6k66+BLeE lrC7VZsz3AbL9UQBY21/fq3nsx/LieZWF6ZIiaPNX9wL8vR+H9hD5dXcd9Gt2mIsFNh3 6vsF7O9M0W8ku4qQNbFIhDkzcYXyBiK1MzAS5u01m3Y7kP48AnuPRevQlzKWmK2RabMm I3ophqwczi1ZNpjoWsxra0m8guVNz8qN8KIJ9EfXe35VM7suvNhr1jCc1QHln+h3RPlS jIwCkzSoIaYec+KfJIz/J8A+QsHCtIMSk7RO88aylKVr0hBh2BbPcl7+PLjXIXb5UWLG fLIA== X-Gm-Message-State: ANoB5pkQql5Z5ULHUgUVyET12BsJpmdU5TiV8VznvH6SJttyyBHShrlm ySC1qA9zk7VA2kdphSTWdDb+7xET7/w= X-Google-Smtp-Source: AA0mqf5byKqw2x/pblD0GWHO28zDNZMoKQvv6iFvmrzpVK1zmOuQMsVryiFP3AWwu6VIcK0j+lpmqg== X-Received: by 2002:a05:622a:1f0b:b0:3a6:8825:8c7b with SMTP id ca11-20020a05622a1f0b00b003a688258c7bmr1468965qtb.281.1669733430572; Tue, 29 Nov 2022 06:50:30 -0800 (PST) Received: from ubuntu.home (bras-base-hullpq2034w-grc-26-74-12-221-152.dsl.bell.ca. [74.12.221.152]) by smtp.gmail.com with ESMTPSA id y14-20020a05620a44ce00b006fb7c42e73asm11068836qkp.21.2022.11.29.06.50.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Nov 2022 06:50:30 -0800 (PST) From: Luc Pelletier To: grive@u256.net Cc: dev@dpdk.org, stephen@networkplumber.org, konstantin.ananyev@huawei.com, Luc Pelletier Subject: [PATCH v3 2/5] failsafe: use public rx/tx burst API Date: Tue, 29 Nov 2022 09:48:30 -0500 Message-Id: <20221129144832.2750-3-lucp.at.work@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221110163410.12734-1-lucp.at.work@gmail.com> References: <20221110163410.12734-1-lucp.at.work@gmail.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The failsafe rx/tx functions are calling the rx/tx functions of sub-devices via the function pointers stored in the rte_eth_dev structure rather than use the public APIs (rte_eth_rx/tx_burst). Use the public API rather than access structure internals which could change in the future. Signed-off-by: Luc Pelletier --- drivers/net/failsafe/failsafe_rxtx.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/drivers/net/failsafe/failsafe_rxtx.c b/drivers/net/failsafe/failsafe_rxtx.c index 707fe60a36..6d8ab0a6e7 100644 --- a/drivers/net/failsafe/failsafe_rxtx.c +++ b/drivers/net/failsafe/failsafe_rxtx.c @@ -50,7 +50,6 @@ failsafe_rx_burst(void *queue, { struct sub_device *sdev; struct rxq *rxq; - void *sub_rxq; uint16_t nb_rx; rxq = queue; @@ -61,10 +60,8 @@ failsafe_rx_burst(void *queue, sdev = sdev->next; continue; } - sub_rxq = ETH(sdev)->data->rx_queues[rxq->qid]; FS_ATOMIC_P(rxq->refcnt[sdev->sid]); - nb_rx = ETH(sdev)-> - rx_pkt_burst(sub_rxq, rx_pkts, nb_pkts); + nb_rx = rte_eth_rx_burst(PORT_ID(sdev), rxq->qid, rx_pkts, nb_pkts); FS_ATOMIC_V(rxq->refcnt[sdev->sid]); sdev = sdev->next; } while (nb_rx == 0 && sdev != rxq->sdev); @@ -82,16 +79,14 @@ failsafe_tx_burst(void *queue, { struct sub_device *sdev; struct txq *txq; - void *sub_txq; uint16_t nb_tx; txq = queue; sdev = TX_SUBDEV(&rte_eth_devices[txq->priv->data->port_id]); if (unlikely(fs_tx_unsafe(sdev))) return 0; - sub_txq = ETH(sdev)->data->tx_queues[txq->qid]; FS_ATOMIC_P(txq->refcnt[sdev->sid]); - nb_tx = ETH(sdev)->tx_pkt_burst(sub_txq, tx_pkts, nb_pkts); + nb_tx = rte_eth_tx_burst(PORT_ID(sdev), txq->qid, tx_pkts, nb_pkts); FS_ATOMIC_V(txq->refcnt[sdev->sid]); return nb_tx; } From patchwork Tue Nov 29 14:48:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Pelletier X-Patchwork-Id: 120278 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0012EA00C3; Tue, 29 Nov 2022 15:50:48 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 689DF42D14; Tue, 29 Nov 2022 15:50:37 +0100 (CET) Received: from mail-qt1-f177.google.com (mail-qt1-f177.google.com [209.85.160.177]) by mails.dpdk.org (Postfix) with ESMTP id 61E4442C4D; Tue, 29 Nov 2022 15:50:32 +0100 (CET) Received: by mail-qt1-f177.google.com with SMTP id fz10so9037262qtb.3; Tue, 29 Nov 2022 06:50:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yuv9u4Y9XEWQdiAFe8W75xu47E4T6ee6Br8A48gzXqI=; b=lSmubGUGYlsH9bBVKLeju5kGumZlAbavrJ9e8hUbsEHzbxNvhzimfBJwXCw/RODXiP GdC25PU69vMZsaOWdkfVL+w7zE0t03ViFRFen6l5XM0ONZAgsWoJrIxHZLn4C0+eXcOZ NcNapYpl7RqsxaAmqoh+BUhp4VG2DF84QFYXoHurFBw6aFy2PTFr7eOoFnOX6JwpCnDN 6mWP/QDsEs0Z4DMPh9hDycKv7oTLOGytgp9rgXW7dYDYPs1eJ7rQmZ7uXxvCxilo/uRq OOqEeON0oPiV3S8kFQEAVUH1mBcB3hZcaUzVk6xbXt4dH+1sSXNmX4JF3wEmQgPOmVcp Yapw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yuv9u4Y9XEWQdiAFe8W75xu47E4T6ee6Br8A48gzXqI=; b=pDDkJRB56Jj8WnEJ9Qhw4IAV7dptc5hX/TZUoXMnttMBGv8v9CSdhGeCPAfX8AkCOm PL/M/kyvNSESzYckQ7FtFfhjsmqyKeri/QlnrcKII8PdzZdJnjm4RLebDSMi2o3zATw/ p5CVHvoJI1Blc5iQFIAU2EsieVSgNznB4XeGDoZMdf5t9NbsHnkTWdIEROP10KxGYb1V Bz6zumT7rDEUWPsSoYEvxSRd1VPLbg4Gs/ZSOptt+FhOrcstOdUeg4xZZYlEeIqgMFFg P7yDetseFhlaFVzCd9BVAu8QTNXTpaqC2Wsro0CcvdkRl71avNcqsg6fsk/Gm35uE/14 g9iw== X-Gm-Message-State: ANoB5pm2OptXkxCvjf764iZx8OLfXBsQTOZH7p+uCU0JrGNDG/gxcbJC m2ybnOatXOBpeXF9MmBB3vc= X-Google-Smtp-Source: AA0mqf6uYxYptJ7eSZCNUStIArD3RJLH47GuZ/JRiuRyBfPdMg4geAJ12ondmrq/wXzb36B6qqhW6w== X-Received: by 2002:ac8:498a:0:b0:3a5:1c61:230c with SMTP id f10-20020ac8498a000000b003a51c61230cmr39613957qtq.29.1669733431818; Tue, 29 Nov 2022 06:50:31 -0800 (PST) Received: from ubuntu.home (bras-base-hullpq2034w-grc-26-74-12-221-152.dsl.bell.ca. [74.12.221.152]) by smtp.gmail.com with ESMTPSA id y14-20020a05620a44ce00b006fb7c42e73asm11068836qkp.21.2022.11.29.06.50.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Nov 2022 06:50:31 -0800 (PST) From: Luc Pelletier To: grive@u256.net Cc: dev@dpdk.org, stephen@networkplumber.org, konstantin.ananyev@huawei.com, Luc Pelletier , Matan Azrad , stable@dpdk.org Subject: [PATCH v3 3/5] failsafe: fix double release of port Date: Tue, 29 Nov 2022 09:48:31 -0500 Message-Id: <20221129144832.2750-4-lucp.at.work@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221110163410.12734-1-lucp.at.work@gmail.com> References: <20221110163410.12734-1-lucp.at.work@gmail.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org When a sub-device is hot-unplugged, rte_eth_dev_release_port is being called twice. Once indirectly via rte_eth_dev_close and once explicitly. Changed the code to remove the explicit call since it's not required and results in mistakenly releasing port 0 (due to zero'ing of memory being done in rte_eth_dev_release_port). Fixes: fac0ae546e5f ("net/failsafe: free port by dedicated function") Cc: Matan Azrad Cc: stable@dpdk.org Signed-off-by: Luc Pelletier --- drivers/net/failsafe/failsafe_ether.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/net/failsafe/failsafe_ether.c b/drivers/net/failsafe/failsafe_ether.c index 517126565f..3bfc446638 100644 --- a/drivers/net/failsafe/failsafe_ether.c +++ b/drivers/net/failsafe/failsafe_ether.c @@ -301,8 +301,6 @@ fs_dev_remove(struct sub_device *sdev) if (ret < 0) { ERROR("Bus detach failed for sub_device %u", SUB_ID(sdev)); - } else { - rte_eth_dev_release_port(ETH(sdev)); } sdev->state = DEV_PARSED; /* fallthrough */ From patchwork Tue Nov 29 14:48:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Pelletier X-Patchwork-Id: 120279 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BD505A00C3; Tue, 29 Nov 2022 15:50:54 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4216C42D29; Tue, 29 Nov 2022 15:50:38 +0100 (CET) Received: from mail-qk1-f170.google.com (mail-qk1-f170.google.com [209.85.222.170]) by mails.dpdk.org (Postfix) with ESMTP id 948B942D1C; Tue, 29 Nov 2022 15:50:33 +0100 (CET) Received: by mail-qk1-f170.google.com with SMTP id x18so9883464qki.4; Tue, 29 Nov 2022 06:50:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wlKSN034u7j20xmx/5+s+45ybNDOFXAMgBd7/exhE/A=; b=hIxV+bY83sl6FhsezWKLAwUkpntlj9FfEFaMEJR5GFKKdIRDFfZFeKkk8POrWuhNCW yUVQj9Q9Vwzk8YfEMrkaJhhx5eH24eupnslQCFRoT0tLS1AdcZdhE6G8D4RkUKq8o4gp XM7TfUgJ1LiDTDCm4ZD1A3sV5KgRwdr2Euj+JQLcNDwC3m6DN809CabsF2buoWL89yYc 957T/e2GaZulEAyI99p2m6/3WYt/q6gbjnkrbra0klv/vQX0glBEBhvZ4zmd2xrNJ7ZG rQRbXPUxPOtaQdQrdNodb2clvvNTUsSFMO4wBqeYhEcKvjAuv6nXfTytic9Ye48tiNQ2 8lOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wlKSN034u7j20xmx/5+s+45ybNDOFXAMgBd7/exhE/A=; b=R/30/J8TbXMRt9Yq0zwgWw4YzBAR0Q5DrMBYOI2Je8SBvgJPD5t1nJaES++Cdw4yxW GGQQwBSSdg0OakNMp23B3qEJ0OTwjxK7BNpRt7Tlasm7ReaNhOVDNs8hqWGoow4ahX1l iqbfMug8yoD54JZwHHY1/SvvGbZbk3rerNMxDL1jGafpfqOLQl/MGJVPU6N8GOd2IJ3I Miku76aycUbVghKB6xXokSXWKQdIbjO8oQeheUdy6S3syyTq/i4eiIZpnGKrzauVnm2r UMCpZeY5iAvcFNQKlejCCOGd5wzrelgqGVNJhw8lFpzTldkMhChkievzIT5SjOQHPcad qENw== X-Gm-Message-State: ANoB5plfh9V2VxhOtn3axpBlJmJy5eEkcq5EfQ+nbacepjR5gzQdn0hc YC1bzSkkqhhAPBskgKS7dgkYcY/3hCQ= X-Google-Smtp-Source: AA0mqf4u+uy46/7/O9BFtsKo3iDzaj4Ck9YFTu6lzX2PLiTZ7hSVu3haLIhxONF62Hmyeqq7DN/a6A== X-Received: by 2002:a37:43d4:0:b0:6fb:982e:a685 with SMTP id q203-20020a3743d4000000b006fb982ea685mr50594188qka.347.1669733433003; Tue, 29 Nov 2022 06:50:33 -0800 (PST) Received: from ubuntu.home (bras-base-hullpq2034w-grc-26-74-12-221-152.dsl.bell.ca. [74.12.221.152]) by smtp.gmail.com with ESMTPSA id y14-20020a05620a44ce00b006fb7c42e73asm11068836qkp.21.2022.11.29.06.50.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Nov 2022 06:50:32 -0800 (PST) From: Luc Pelletier To: grive@u256.net Cc: dev@dpdk.org, stephen@networkplumber.org, konstantin.ananyev@huawei.com, Luc Pelletier , Matan Azrad , stable@dpdk.org Subject: [PATCH v3 4/5] failsafe: use public APIs in fs_link_update Date: Tue, 29 Nov 2022 09:48:32 -0500 Message-Id: <20221129144832.2750-5-lucp.at.work@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221110163410.12734-1-lucp.at.work@gmail.com> References: <20221110163410.12734-1-lucp.at.work@gmail.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The link_update function pointer is called directly on a sub-device, via its rte_eth_dev structure. In addition, it assumes that if link_update returns a value other than 0 or -1, an error occurred. That's not accurate. For example, the mlx5 PMD returns a positive value to indicate that the link status was updated. This results in fs_link_update failing when it really should have succeeded. The code now uses the public APIs rte_eth_link_get and rte_eth_link_get_nowait to query the link status of each sub-device. It also uses rte_eth_linkstatus_set to set the link status of the failsafe device. Fixes: ae80146c5a1b ("net/failsafe: fix removed device handling") Cc: Matan Azrad Cc: stable@dpdk.org Signed-off-by: Luc Pelletier --- drivers/net/failsafe/failsafe_ops.c | 38 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c index d357e1bc83..7bd223af37 100644 --- a/drivers/net/failsafe/failsafe_ops.c +++ b/drivers/net/failsafe/failsafe_ops.c @@ -820,34 +820,32 @@ fs_link_update(struct rte_eth_dev *dev, { struct sub_device *sdev; uint8_t i; - int ret; + int ret = -1; + int sdev_link_ret; + struct rte_eth_link link_info; fs_lock(dev, 0); FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) { - DEBUG("Calling link_update on sub_device %d", i); - ret = (SUBOPS(sdev, link_update))(ETH(sdev), wait_to_complete); - if (ret && ret != -1 && sdev->remove == 0 && - rte_eth_dev_is_removed(PORT_ID(sdev)) == 0) { - ERROR("Link update failed for sub_device %d with error %d", - i, ret); - fs_unlock(dev, 0); - return ret; + DEBUG("Calling rte_eth_link_get on sub_device %d", i); + if (wait_to_complete) { + sdev_link_ret = rte_eth_link_get(PORT_ID(sdev), &link_info); + } else { + sdev_link_ret = rte_eth_link_get_nowait(PORT_ID(sdev), + &link_info); } - } - if (TX_SUBDEV(dev)) { - struct rte_eth_link *l1; - struct rte_eth_link *l2; - l1 = &dev->data->dev_link; - l2 = Ð(TX_SUBDEV(dev))->data->dev_link; - if (memcmp(l1, l2, sizeof(*l1))) { - *l1 = *l2; - fs_unlock(dev, 0); - return 0; + if (likely(sdev_link_ret == 0)) { + if (TX_SUBDEV(dev) == sdev) + ret = rte_eth_linkstatus_set(dev, &link_info); + } + else if (sdev->remove == 0 && + rte_eth_dev_is_removed(PORT_ID(sdev)) == 0) { + ERROR("Link get failed for sub_device %d with error %d", + i, sdev_link_ret); } } fs_unlock(dev, 0); - return -1; + return ret; } static int From patchwork Tue Nov 29 14:48:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Pelletier X-Patchwork-Id: 120280 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AAFD1A00C3; Tue, 29 Nov 2022 15:51:02 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4020142B8C; Tue, 29 Nov 2022 15:50:41 +0100 (CET) Received: from mail-qk1-f177.google.com (mail-qk1-f177.google.com [209.85.222.177]) by mails.dpdk.org (Postfix) with ESMTP id C429542C4D; Tue, 29 Nov 2022 15:50:34 +0100 (CET) Received: by mail-qk1-f177.google.com with SMTP id k4so9883522qkj.8; Tue, 29 Nov 2022 06:50:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=z08scHU6YsGW9fJPGihyWAEtBdpF8UbFlvJFRsIy3x0=; b=V8oX6RkZZK27smXvPIMWfcFKg4lJ2+taeslJS067brlmWuJ93PjFYqaGtwM63jKrRz F04qJhxxb0b/IfozBpk4+Pff7BChtQuEto8Af/su09w10QuWbglZbBHeLDnRN7nzQmXi kXKU+AsoeN0XMs3fUW1T7J7HE/bO9rLp0MNRfUeaxSiXEn67wkpMkK6FXXBSnoaAWK2X pXKWop/ylzT6U07sAbv2Ai5vghFO/hQ3UsHrmQgkQ67VO9fL2IDhkik+vKY3eUreB1w6 9mT1nVi0QYTz1P/ch6Gcv01fewNpmZD3ThRjEXcBe9ndVKaifBUiR38AFQGViQ/WNVge gDzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=z08scHU6YsGW9fJPGihyWAEtBdpF8UbFlvJFRsIy3x0=; b=eOXEzg0djAu1V9Fk6zmMXyR3C04bVy3kVEN0cl/Hr2sEPaDD6A76XRnDzPoUtECrwb taM0PSKTEghRZ3dNlOcuA1rk/wU/j3DupmeP/Sm4m2aVTf+po32nB36iHMJZvx/GxrsR yuTl9eJB0Znwo20R3Hhr/mAWc6vWWFUDlWlC2r/O1/QWFGo1L7otf+AyM0d14cLxltev rIH6pFMOaI4WfZz8Ss4vbDUs13wex/kFOS2EJy1tC5TufNJwbK0L0KbiFMtq5BAuj4kI J/NSYaIRHxySVqOwbwYEX8UoFDa86AkVtThPbJUDiAG+KMe/BEx75i8jJZaAnrijCjmM 1m7A== X-Gm-Message-State: ANoB5pl2voZqsTyIxzvTFpMqhxreDKJARXN7dZmxjHq++ANnZoBnwh5G 0JNWOi9w2axmL2nDmFuIwlY= X-Google-Smtp-Source: AA0mqf5WK1GPMD5//aJMLijZUKU5HRCMTPnPVU85Y1rJE31X49wGDshHOEvdrn8/LJ8suiwhwBdRlQ== X-Received: by 2002:a05:620a:1e9:b0:6b8:ec83:2922 with SMTP id x9-20020a05620a01e900b006b8ec832922mr51746860qkn.107.1669733434202; Tue, 29 Nov 2022 06:50:34 -0800 (PST) Received: from ubuntu.home (bras-base-hullpq2034w-grc-26-74-12-221-152.dsl.bell.ca. [74.12.221.152]) by smtp.gmail.com with ESMTPSA id y14-20020a05620a44ce00b006fb7c42e73asm11068836qkp.21.2022.11.29.06.50.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Nov 2022 06:50:33 -0800 (PST) From: Luc Pelletier To: grive@u256.net Cc: dev@dpdk.org, stephen@networkplumber.org, konstantin.ananyev@huawei.com, Luc Pelletier , stable@dpdk.org Subject: [PATCH v3 5/5] failsafe: make sub-device remove flag thread-safe Date: Tue, 29 Nov 2022 09:48:33 -0500 Message-Id: <20221129144832.2750-6-lucp.at.work@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221110163410.12734-1-lucp.at.work@gmail.com> References: <20221110163410.12734-1-lucp.at.work@gmail.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org For each sub-device, there's a remove flag that's used to indicate if the sub-device has been removed or not. This flag is currently a volatile bit field. Even if it's marked as volatile, a bit field is not thread-safe according to the C standard. The remove flag is now an unsigned int rather than a bit field. We also now use the atomic built-ins to read/write the value of the remove flag to ensure thread-safety. Fixes: 598fb8aec6f6 ("net/failsafe: support device removal") Cc: Gaetan Rivet Cc: stable@dpdk.org Signed-off-by: Luc Pelletier --- drivers/net/failsafe/failsafe_ether.c | 8 ++++---- drivers/net/failsafe/failsafe_ops.c | 2 +- drivers/net/failsafe/failsafe_private.h | 4 ++-- drivers/net/failsafe/failsafe_rxtx.c | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/net/failsafe/failsafe_ether.c b/drivers/net/failsafe/failsafe_ether.c index 3bfc446638..9014777e52 100644 --- a/drivers/net/failsafe/failsafe_ether.c +++ b/drivers/net/failsafe/failsafe_ether.c @@ -311,7 +311,7 @@ fs_dev_remove(struct sub_device *sdev) /* the end */ break; } - sdev->remove = 0; + __atomic_store_n(&sdev->remove, 0, __ATOMIC_RELEASE); failsafe_hotplug_alarm_install(fs_dev(sdev)); } @@ -388,7 +388,7 @@ failsafe_dev_remove(struct rte_eth_dev *dev) uint8_t i; FOREACH_SUBDEV(sdev, i, dev) { - if (!sdev->remove) + if (!__atomic_load_n(&sdev->remove, __ATOMIC_ACQUIRE)) continue; /* Active devices must have finished their burst and @@ -556,7 +556,7 @@ failsafe_eth_dev_state_sync(struct rte_eth_dev *dev) err_remove: FOREACH_SUBDEV(sdev, i, dev) if (sdev->state != PRIV(dev)->state) - sdev->remove = 1; + __atomic_store_n(&sdev->remove, 1, __ATOMIC_RELEASE); return ret; } @@ -597,7 +597,7 @@ failsafe_eth_rmv_event_callback(uint16_t port_id __rte_unused, * Async removal, the sub-PMD will try to unregister * the callback at the source of the current thread context. */ - sdev->remove = 1; + __atomic_store_n(&sdev->remove, 1, __ATOMIC_RELEASE); fs_unlock(fs_dev(sdev), 0); return 0; } diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c index 7bd223af37..86d97970bc 100644 --- a/drivers/net/failsafe/failsafe_ops.c +++ b/drivers/net/failsafe/failsafe_ops.c @@ -838,7 +838,7 @@ fs_link_update(struct rte_eth_dev *dev, if (TX_SUBDEV(dev) == sdev) ret = rte_eth_linkstatus_set(dev, &link_info); } - else if (sdev->remove == 0 && + else if (__atomic_load_n(&sdev->remove, __ATOMIC_ACQUIRE) == 0 && rte_eth_dev_is_removed(PORT_ID(sdev)) == 0) { ERROR("Link get failed for sub_device %d with error %d", i, sdev_link_ret); diff --git a/drivers/net/failsafe/failsafe_private.h b/drivers/net/failsafe/failsafe_private.h index 3865f2fc34..0577a62ab2 100644 --- a/drivers/net/failsafe/failsafe_private.h +++ b/drivers/net/failsafe/failsafe_private.h @@ -131,7 +131,7 @@ struct sub_device { /* sub device port id*/ uint16_t sdev_port_id; /* shared between processes */ /* flag calling for recollection */ - volatile unsigned int remove:1; + unsigned int remove; /* flow isolation state */ int flow_isolated:1; /* RMV callback registration state */ @@ -490,7 +490,7 @@ static inline int fs_err(struct sub_device *sdev, int err) { /* A device removal shouldn't be reported as an error. */ - if (sdev->remove == 1 || err == -EIO) + if (__atomic_load_n(&sdev->remove, __ATOMIC_ACQUIRE) == 1 || err == -EIO) return rte_errno = 0; return err; } diff --git a/drivers/net/failsafe/failsafe_rxtx.c b/drivers/net/failsafe/failsafe_rxtx.c index 6d8ab0a6e7..c5caab4204 100644 --- a/drivers/net/failsafe/failsafe_rxtx.c +++ b/drivers/net/failsafe/failsafe_rxtx.c @@ -16,7 +16,7 @@ fs_rx_unsafe(struct sub_device *sdev) return (ETH(sdev) == NULL) || (ETH(sdev)->rx_pkt_burst == NULL) || (sdev->state != DEV_STARTED) || - (sdev->remove != 0); + (__atomic_load_n(&sdev->remove, __ATOMIC_ACQUIRE) != 0); } static inline int