From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8CBF1A0524 for ; Fri, 5 Feb 2021 12:22:34 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8655C1606C3; Fri, 5 Feb 2021 12:22:34 +0100 (CET) Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) by mails.dpdk.org (Postfix) with ESMTP id 7F87C1606C3 for ; Fri, 5 Feb 2021 12:22:33 +0100 (CET) Received: by mail-wr1-f52.google.com with SMTP id z6so7232197wrq.10 for ; Fri, 05 Feb 2021 03:22:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IrM0xDWbjuC1AA3SNyCG9k3oTAW8UvhjvB2j3nGEsjE=; b=KQ/SIrWLGhhsxzwyVD9TO9kctJsh3e1VowYRB8L4P7PEUZ4POH4aM5N0z6l4d8j1vk 7LHYiyBH9JpDEXh9LMxRXQduWqF9J9S5xEr0BUvClLb9kMZQALJbIeP7GZAH/2WouHES bld2mArAuOf9G4HB+YpeIjc70lnnL+/r5sa7xxbAO/JeVHgtN12grTwX8JJKV3CBYBD6 lOszuda5MiLCczFZoVRRHfEyOvFJJQ8t+M0mQ3JFd6imCNTJ4KFxujY4CT+D2r6FwVh0 oQ8f7bo8KqAJUbmJfnGVNu3T93q94cj784OwTczvitTrwsCf8u3xcL5Zo+gv+BzqZ7mj TR7w== 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:mime-version:content-transfer-encoding; bh=IrM0xDWbjuC1AA3SNyCG9k3oTAW8UvhjvB2j3nGEsjE=; b=mIfqTnP0sm+C4U4Qwuuz8e8op4MDsg1PwBFq0ozYsyb2Mo261AoHLGE0+4C/0HsxpQ PJzjYSS7coOHyulv6Nzdd9BAJIld9ImVJ5rOGIGfR6pZcUVKtYtmqGLO1MYbUucYbxT7 /X4WZXlbKRANokZ8ImqXNOrDLL0u7Xqpt93MhEbSyJb4LOz09J7WmRrBqsSAVdO4wQt3 dE3QngQCLDC5DPBAYngU8iRHV3Ia5sz3R2d0O/KcY8D9BzFQE8oSNCbyck5t8wyaSA18 LmAfJFkqK0nvVasekXnnWAXp+5sSthqlKCHY5r49/utyZt5khRv/hmyfS6RJd4VZI5I+ GRig== X-Gm-Message-State: AOAM532MPRNmHLA+CRLThWorgqef5mxRv0k7v44t6HqyvWJEOErSDdoA P1EiOKq9eNfP2CsuGiu0dYc= X-Google-Smtp-Source: ABdhPJxtpDkd0O9YAVlAkMLy71MQbIVsFZth4EYj3Yg+2+Qm6YIpkSMoYVSYjV7GhEVRccazg9Soyg== X-Received: by 2002:a5d:55c6:: with SMTP id i6mr4590344wrw.145.1612524153300; Fri, 05 Feb 2021 03:22:33 -0800 (PST) Received: from localhost ([88.98.246.218]) by smtp.gmail.com with ESMTPSA id o13sm5136124wmh.2.2021.02.05.03.22.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Feb 2021 03:22:32 -0800 (PST) From: luca.boccassi@gmail.com To: Gaetan Rivet Cc: Min Hu , dpdk stable Date: Fri, 5 Feb 2021 11:15:43 +0000 Message-Id: <20210205111920.1272063-57-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210205111920.1272063-1-luca.boccassi@gmail.com> References: <20210205111920.1272063-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'net/bonding: fix PCI address comparison on non-PCI ports' has been queued to stable release 20.11.1 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to stable release 20.11.1 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 02/07/21. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/a58c0ccd1bd9f7f0ca09524903fb6f2847b76421 Thanks. Luca Boccassi --- >From a58c0ccd1bd9f7f0ca09524903fb6f2847b76421 Mon Sep 17 00:00:00 2001 From: Gaetan Rivet Date: Fri, 17 Apr 2020 18:42:07 +0200 Subject: [PATCH] net/bonding: fix PCI address comparison on non-PCI ports [ upstream commit 3b37cc0c28f3d01ced424e72641aa63f494899b1 ] The bonding PMD will iterate over all available ETH ports and for each, compare a chunk of bytes at an offset that would correspond to the PCI address in an rte_pci_device. This is incorrect and unsafe. Also, the rte_device using this PCI address is already found, no need to compare again the PCI address of all eth devices. Refactoring the code to fix this, the initial check to find the PCI bus is out of scope. Fixes: c848b518bbc7 ("net/bonding: support bifurcated driver in eal") Signed-off-by: Gaetan Rivet Acked-by: Min Hu (Connor) --- drivers/net/bonding/rte_eth_bond_args.c | 58 +++++++++++-------------- 1 file changed, 25 insertions(+), 33 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_args.c b/drivers/net/bonding/rte_eth_bond_args.c index 35616fb8bc..8c5f90dc63 100644 --- a/drivers/net/bonding/rte_eth_bond_args.c +++ b/drivers/net/bonding/rte_eth_bond_args.c @@ -22,23 +22,37 @@ const char *pmd_bond_init_valid_arguments[] = { NULL }; +static inline int +bond_pci_addr_cmp(const struct rte_device *dev, const void *_pci_addr) +{ + const struct rte_pci_device *pdev = RTE_DEV_TO_PCI_CONST(dev); + const struct rte_pci_addr *paddr = _pci_addr; + + return rte_pci_addr_cmp(&pdev->addr, paddr); +} + static inline int find_port_id_by_pci_addr(const struct rte_pci_addr *pci_addr) { - struct rte_pci_device *pci_dev; - struct rte_pci_addr *eth_pci_addr; + struct rte_bus *pci_bus; + struct rte_device *dev; unsigned i; - RTE_ETH_FOREACH_DEV(i) { - pci_dev = RTE_ETH_DEV_TO_PCI(&rte_eth_devices[i]); - eth_pci_addr = &pci_dev->addr; + pci_bus = rte_bus_find_by_name("pci"); + if (pci_bus == NULL) { + RTE_BOND_LOG(ERR, "No PCI bus found"); + return -1; + } - if (pci_addr->bus == eth_pci_addr->bus && - pci_addr->devid == eth_pci_addr->devid && - pci_addr->domain == eth_pci_addr->domain && - pci_addr->function == eth_pci_addr->function) + dev = pci_bus->find_device(NULL, bond_pci_addr_cmp, pci_addr); + if (dev == NULL) { + RTE_BOND_LOG(ERR, "unable to find PCI device"); + return -1; + } + + RTE_ETH_FOREACH_DEV(i) + if (rte_eth_devices[i].device == dev) return i; - } return -1; } @@ -57,15 +71,6 @@ find_port_id_by_dev_name(const char *name) return -1; } -static inline int -bond_pci_addr_cmp(const struct rte_device *dev, const void *_pci_addr) -{ - const struct rte_pci_device *pdev = RTE_DEV_TO_PCI_CONST(dev); - const struct rte_pci_addr *paddr = _pci_addr; - - return rte_pci_addr_cmp(&pdev->addr, paddr); -} - /** * Parses a port identifier string to a port id by pci address, then by name, * and finally port id. @@ -74,23 +79,10 @@ static inline int parse_port_id(const char *port_str) { struct rte_pci_addr dev_addr; - struct rte_bus *pci_bus; - struct rte_device *dev; int port_id; - pci_bus = rte_bus_find_by_name("pci"); - if (pci_bus == NULL) { - RTE_BOND_LOG(ERR, "unable to find PCI bus\n"); - return -1; - } - /* try parsing as pci address, physical devices */ - if (pci_bus->parse(port_str, &dev_addr) == 0) { - dev = pci_bus->find_device(NULL, bond_pci_addr_cmp, &dev_addr); - if (dev == NULL) { - RTE_BOND_LOG(ERR, "unable to find PCI device"); - return -1; - } + if (rte_pci_addr_parse(port_str, &dev_addr) == 0) { port_id = find_port_id_by_pci_addr(&dev_addr); if (port_id < 0) return -1; -- 2.29.2 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2021-02-05 11:18:31.839169226 +0000 +++ 0057-net-bonding-fix-PCI-address-comparison-on-non-PCI-po.patch 2021-02-05 11:18:28.794690883 +0000 @@ -1 +1 @@ -From 3b37cc0c28f3d01ced424e72641aa63f494899b1 Mon Sep 17 00:00:00 2001 +From a58c0ccd1bd9f7f0ca09524903fb6f2847b76421 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 3b37cc0c28f3d01ced424e72641aa63f494899b1 ] + @@ -18 +19,0 @@ -Cc: stable@dpdk.org