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 DD4FBA054F for ; Mon, 15 Feb 2021 13:21:19 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9D3C040FDF; Mon, 15 Feb 2021 13:21:19 +0100 (CET) Received: from youngberry.canonical.com (youngberry.canonical.com [91.189.89.112]) by mails.dpdk.org (Postfix) with ESMTP id 187ED40FDF for ; Mon, 15 Feb 2021 13:21:18 +0100 (CET) Received: from mail-qk1-f200.google.com ([209.85.222.200]) by youngberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1lBcsP-0007L7-NV for stable@dpdk.org; Mon, 15 Feb 2021 12:21:17 +0000 Received: by mail-qk1-f200.google.com with SMTP id p27so5381744qkp.8 for ; Mon, 15 Feb 2021 04:21:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Ugelb2GDx6gY8OYMXIQEOdouZAhVPLNmBRkzA88ogcs=; b=p8d6tK/5iH5QC8uy7SnrfQ6quoyrqwAt40wU2acteNupP/aKGi5OuzvIDLqnKPlRcJ ELv/Nj++RmM/FMtiVX6s7KGNStIcHamExGx3FMrtfyUbh1QCVQ5lh6gTb2JghBosEkKd mNbSN8YaHRS4nUYCVm0TYjUJ5+cGsX5DbcOLjyq1j291GgxXKm6VDQCLnO4R7sJQP/8y kD2zSvvyflzEojhp/snl/7gwBe2QLaoisrdqWZoJqV+DYMAnObap7H/nBApNkTd4zc3B c+JjVl7+Rdo50ecDwxNiSkmbjcAlKXHU0CcDSudavo2kIgq9QTmi91UClrRW04xjUYcr ZoLA== X-Gm-Message-State: AOAM533VNfQ9g9sRP48jnZ4YrMRtUbQLjlT0CDmJnlnmekQ0y33VRD8V XbzhIwrJJiWwaKW/f1T43vMF3w1wEaPAc7I4o/5ASF49sJZj2Q1rGVhUMrHh7ZyFRrkwjBQ2guI 8onUuT9fRCpejms5hKgGQzk6AJnm0A2kp/HRzJrE6 X-Received: by 2002:a37:9c48:: with SMTP id f69mr12739603qke.114.1613391676823; Mon, 15 Feb 2021 04:21:16 -0800 (PST) X-Google-Smtp-Source: ABdhPJybn+AIyTSYOGqydhcRqJWQJ6eK8z4MZKycMih6BqnSBmN5yVBtx7uckxC9SJvutWrJjmXSiuYupjgOXwwmJqs= X-Received: by 2002:a37:9c48:: with SMTP id f69mr12739584qke.114.1613391676488; Mon, 15 Feb 2021 04:21:16 -0800 (PST) MIME-Version: 1.0 References: <20210212143259.18712-1-viacheslavo@nvidia.com> In-Reply-To: <20210212143259.18712-1-viacheslavo@nvidia.com> From: Christian Ehrhardt Date: Mon, 15 Feb 2021 13:20:50 +0100 Message-ID: To: Viacheslav Ovsiienko Cc: dpdk stable , Michael Baum Content-Type: text/plain; charset="UTF-8" Subject: Re: [dpdk-stable] [PATCH 19.11] net/mlx4: fix device detach 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" On Fri, Feb 12, 2021 at 3:33 PM Viacheslav Ovsiienko wrote: > > From: Michael Baum > > [ upstream commit 8e1630e0f1985beb7e48429e3a7614f4732b0e68 ] Thanks, added > When mlx4 device is probed, 2 different ethdev ports may be created for > the 2 physical ports of the device. > > Wrongly, when the device is removed, the created ports are not released. > > Close and release the ethdev ports in remove process. > > Bugzilla ID: 488 > Fixes: 7fae69eeff13 ("mlx4: new poll mode driver") > Cc: stable@dpdk.org > > Reported-by: David Marchand > Signed-off-by: Michael Baum > Acked-by: Matan Azrad > Tested-by: David Marchand > --- > drivers/net/mlx4/mlx4.c | 35 +++++++++++++++++++++++++++++++++++ > 1 file changed, 35 insertions(+) > > diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c > index 4479022a4..3d2cef335 100644 > --- a/drivers/net/mlx4/mlx4.c > +++ b/drivers/net/mlx4/mlx4.c > @@ -376,6 +376,10 @@ mlx4_dev_close(struct rte_eth_dev *dev) > struct mlx4_priv *priv = dev->data->dev_private; > unsigned int i; > > + if (rte_eal_process_type() == RTE_PROC_SECONDARY) { > + rte_eth_dev_release_port(dev); > + return 0; > + } > DEBUG("%p: closing device \"%s\"", > (void *)dev, > ((priv->ctx != NULL) ? priv->ctx->device->name : "")); > @@ -1131,6 +1135,36 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) > return -err; > } > > +/** > + * DPDK callback to remove a PCI device. > + * > + * This function removes all Ethernet devices belong to a given PCI device. > + * > + * @param[in] pci_dev > + * Pointer to the PCI device. > + * > + * @return > + * 0 on success, the function cannot fail. > + */ > +static int > +mlx4_pci_remove(struct rte_pci_device *pci_dev) > +{ > + uint16_t port_id; > + int ret = 0; > + > + RTE_ETH_FOREACH_DEV_OF(port_id, &pci_dev->device) { > + /* > + * mlx4_dev_close() is not registered to secondary process, > + * call the close function explicitly for secondary process. > + */ > + if (rte_eal_process_type() == RTE_PROC_SECONDARY) > + ret |= mlx4_dev_close(&rte_eth_devices[port_id]); > + else > + ret |= rte_eth_dev_close(port_id); > + } > + return ret == 0 ? 0 : -EIO; > +} > + > static const struct rte_pci_id mlx4_pci_id_map[] = { > { > RTE_PCI_DEVICE(PCI_VENDOR_ID_MELLANOX, > @@ -1155,6 +1189,7 @@ static struct rte_pci_driver mlx4_driver = { > }, > .id_table = mlx4_pci_id_map, > .probe = mlx4_pci_probe, > + .remove = mlx4_pci_remove, > .drv_flags = RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_INTR_RMV, > }; > > -- > 2.18.1 > -- Christian Ehrhardt Staff Engineer, Ubuntu Server Canonical Ltd