From patchwork Fri Sep 1 08:06:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrien Mazarguil X-Patchwork-Id: 28201 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 48FBF7CEC; Fri, 1 Sep 2017 10:07:29 +0200 (CEST) Received: from mail-wr0-f176.google.com (mail-wr0-f176.google.com [209.85.128.176]) by dpdk.org (Postfix) with ESMTP id 69C417CD9 for ; Fri, 1 Sep 2017 10:07:27 +0200 (CEST) Received: by mail-wr0-f176.google.com with SMTP id k94so4561446wrc.0 for ; Fri, 01 Sep 2017 01:07:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=jQqmQNiT4w3n/FEbTQ9g6naF7sDAl3iH6ekHyBfC+F8=; b=rDptuUAH5169NYXHaCnclpiE+xtx/4GBDhKnMCWasLMJ3Gv7ZVgUhk1GKZoa+ojT4+ jM8wv10u2yjSrzgNK/VjM4KrsHjQJtZhpb2ZBQFesYC3N+WxY64eaA46YpL6K+uQIDhe ZCT9uMtuQMIlQHq7//etlOBlaMh1MPOXcM9un/HE645v4S/x3PvxLbl+rtrTdg8q2Upc ykb1cTgf6+R0XMQd+szsBoerx+aLjkgM5tZ376CjMOaiNuGnbmN1midjlgRvocqziFQ+ Vbr6ZWvyaeH2fwymXAAYYqg4arKwgBf7l99JlYKh8Ti8qnh3qy/b7EmJyIGe6THFal2x cbxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=jQqmQNiT4w3n/FEbTQ9g6naF7sDAl3iH6ekHyBfC+F8=; b=pLu1UiG+EMfnwJuDQOBQTS5eETP7Wd5Im+gkU8+M1y/MCNC3Vp+gbbvfwCDLw2qlxn LFmZedDYkvTnKUPXZUyBqtL2m2L7r4krkeCbG+cX5Ml8jI/2yI+umZnev96DsLeaghPZ Q7dO1s2tJCWzoVM0c9qA1T91+GsY1N4F3+k1ARTsQ2kASfkd0I2B2beMY1tkDPlJwEdq Fwpu0nOCwVwZCQeRcj63duXUBvTkt09uTZmIuzsdLYHbbRLzw0dqEpcq10OuCoEmNl2G 1PCrnqXUUuaO8PtASw8bIkmYS6frg/rdaUWLqGqkUMkWeqyz0ZTyvzal8Q/JIQdL7tr1 aaJg== X-Gm-Message-State: AHPjjUjXkiCn+PrEltdsySE52dw9kCCwath117yVpl0f3SchJThuwELr 4U2WMI9JZUOHVDj91qE= X-Google-Smtp-Source: ADKCNb4fuFCs+zHDewJ6VVT7LGP8H3up+73WOV1FHtgR0SohZ+H9a7cUg3mrMarE2ksdITWkZPHXjg== X-Received: by 10.223.158.198 with SMTP id b6mr700701wrf.123.1504253246572; Fri, 01 Sep 2017 01:07:26 -0700 (PDT) Received: from 6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id m27sm1655813wmc.3.2017.09.01.01.07.25 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Sep 2017 01:07:25 -0700 (PDT) From: Adrien Mazarguil To: dev@dpdk.org Date: Fri, 1 Sep 2017 10:06:17 +0200 Message-Id: <4ee2c0c1ed8d22ce7422c9bc810ccc18d8961c74.1504252977.git.adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2 02/51] net/mlx4: remove limitation on number of instances 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" The seemingly artificial limitation on the maximum number of instances for this PMD is an historical leftover that predates its first public release. It was used as a workaround to support multiple physical ports on a PCI device exposing a single bus address when mlx4 was implemented directly as an Ethernet device driver instead of a PCI driver spawning Ethernet devices. Getting rid of it simplifies device initialization. Signed-off-by: Adrien Mazarguil --- drivers/net/mlx4/mlx4.c | 57 +++----------------------------------------- 1 file changed, 3 insertions(+), 54 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index b5a7607..0ae78e0 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -5444,40 +5444,6 @@ priv_get_mac(struct priv *priv, uint8_t (*mac)[ETHER_ADDR_LEN]) return 0; } -/* Support up to 32 adapters. */ -static struct { - struct rte_pci_addr pci_addr; /* associated PCI address */ - uint32_t ports; /* physical ports bitfield. */ -} mlx4_dev[32]; - -/** - * Get device index in mlx4_dev[] from PCI bus address. - * - * @param[in] pci_addr - * PCI bus address to look for. - * - * @return - * mlx4_dev[] index on success, -1 on failure. - */ -static int -mlx4_dev_idx(struct rte_pci_addr *pci_addr) -{ - unsigned int i; - int ret = -1; - - assert(pci_addr != NULL); - for (i = 0; (i != elemof(mlx4_dev)); ++i) { - if ((mlx4_dev[i].pci_addr.domain == pci_addr->domain) && - (mlx4_dev[i].pci_addr.bus == pci_addr->bus) && - (mlx4_dev[i].pci_addr.devid == pci_addr->devid) && - (mlx4_dev[i].pci_addr.function == pci_addr->function)) - return i; - if ((mlx4_dev[i].ports == 0) && (ret == -1)) - ret = i; - } - return ret; -} - /** * Retrieve integer value from environment variable. * @@ -6060,21 +6026,11 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) .active_ports = 0, }; unsigned int vf; - int idx; int i; (void)pci_drv; assert(pci_drv == &mlx4_driver); - /* Get mlx4_dev[] index. */ - idx = mlx4_dev_idx(&pci_dev->addr); - if (idx == -1) { - ERROR("this driver cannot support any more adapters"); - return -ENOMEM; - } - DEBUG("using driver device index %d", idx); - /* Save PCI address. */ - mlx4_dev[idx].pci_addr = pci_dev->addr; list = ibv_get_device_list(&i); if (list == NULL) { assert(errno); @@ -6141,7 +6097,6 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) } for (i = 0; i < device_attr.phys_port_cnt; i++) { uint32_t port = i + 1; /* ports are indexed from one */ - uint32_t test = (1 << i); struct ibv_context *ctx = NULL; struct ibv_port_attr port_attr; struct ibv_pd *pd = NULL; @@ -6162,7 +6117,7 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) #endif /* RSS_SUPPORT */ #endif /* HAVE_EXP_QUERY_DEVICE */ - DEBUG("using port %u (%08" PRIx32 ")", port, test); + DEBUG("using port %u", port); ctx = ibv_open_device(ibv_dev); if (ctx == NULL) { @@ -6198,8 +6153,6 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) goto port_error; } - mlx4_dev[idx].ports |= test; - /* from rte_ethdev.c */ priv = rte_zmalloc("ethdev private structure", sizeof(*priv), @@ -6405,6 +6358,8 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) rte_eth_dev_release_port(eth_dev); break; } + if (i == device_attr.phys_port_cnt) + return 0; /* * XXX if something went wrong in the loop above, there is a resource @@ -6413,12 +6368,6 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) * way to enumerate the registered ethdevs to free the previous ones. */ - /* no port found, complain */ - if (!mlx4_dev[idx].ports) { - err = ENODEV; - goto error; - } - error: if (attr_ctx) claim_zero(ibv_close_device(attr_ctx));