From patchwork Tue Aug 1 16:53:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Adrien Mazarguil X-Patchwork-Id: 27315 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 41BEF9B7D; Tue, 1 Aug 2017 18:55:01 +0200 (CEST) Received: from mail-wr0-f181.google.com (mail-wr0-f181.google.com [209.85.128.181]) by dpdk.org (Postfix) with ESMTP id 871CA9A04 for ; Tue, 1 Aug 2017 18:54:54 +0200 (CEST) Received: by mail-wr0-f181.google.com with SMTP id 33so9235442wrz.4 for ; Tue, 01 Aug 2017 09:54:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LTIlGa+ZM80Rn1hN0hVAQh5lD1dWdwnWvqluTrrDsDY=; b=Sv9b4weasiTXDnWhnGggQwiHVqaSM7qsyQPHDk/ldM8d/NC/ytRg6ybtKCLIiIZZtq FDBUwcWhdX1XVRTM0MAL51A0+0Qp9qz1hbYYkROdSOxuBz9I4KCF+4tuK3+QaU3OOxu2 Wna2wLVwddetF5asJXX5k0307mFqArRU27vnuMyeQ1raxWq5sSWDHfNeCLF7w48DaD0Z YbuiVVqf4VHgMzwvUr9aeMkgzUEgCGBhEG21zq74Nw270SgXSd63Lafn9LMoYXYiOum0 gE6LqK2XLVEIrgHYeMDQe0DTFGBxu0q++zTtXozndd1QI3iqYDO8dS14qCw9T0H/nQQh F2/A== 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=LTIlGa+ZM80Rn1hN0hVAQh5lD1dWdwnWvqluTrrDsDY=; b=TI5d76bXL+tKZoSjGkbqr0yBmGgLp7QjUuKWoHR9WQa/CG4fekpVOkgUqncXmrLrv7 oBL8Tu9MsRh6ksk0oA8+QVZT5RB+g1HAVEWgknl3+PUNkDu9tQk0McpO2g6Pm6zGGxKd qOfiw3JG0zttOckSz5lHoyHHmxy6pE63d4QkdjgABjeg0AciA3BEn/aQFVssm+JElZuQ w8Y+G/Om/UqM4Dbhh2nQNRQIwHKkVg7mWVSj5wOHuq8y1sF9peGaVpGaOf7BvdWTne28 9b7GdtJh9LZxYJI2A+2AC103krkCjPhXh1EpyMHNLKygUK+dZvaQiM3sLIMgvLHDP3jW AGxg== X-Gm-Message-State: AIVw11173ilCPpSPHY/eebI2ztpmvUQqFIEub52S/Q86deB4Q/apBSYr HZhFM1bg5woD1Wi3H88= X-Received: by 10.223.138.182 with SMTP id y51mr16050261wry.83.1501606493829; Tue, 01 Aug 2017 09:54:53 -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 n184sm1620841wme.33.2017.08.01.09.54.52 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Tue, 01 Aug 2017 09:54:53 -0700 (PDT) From: Adrien Mazarguil To: dev@dpdk.org Cc: =?utf-8?q?Ga=C3=ABtan_Rivet?= , Allain Legacy Date: Tue, 1 Aug 2017 18:53:50 +0200 Message-Id: <04ea7bf54d1ddba834fb187ae169b3de79b5aaa0.1501598384.git.adrien.mazarguil@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: References: MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v1 03/48] net/mlx4: check max number of ports dynamically 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" Use maximum number reported by hardware capabilities as replacement for the static check on MLX4_PMD_MAX_PHYS_PORTS. Cc: Gaƫtan Rivet Cc: Allain Legacy Signed-off-by: Adrien Mazarguil --- drivers/net/mlx4/mlx4.c | 43 +++++++++++++++++++++++++------------------ drivers/net/mlx4/mlx4.h | 3 --- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index 0ae78e0..e28928c 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -118,8 +118,12 @@ struct mlx4_secondary_data { rte_spinlock_t lock; /* Port configuration lock. */ } mlx4_secondary_data[RTE_MAX_ETHPORTS]; +/** Configuration structure for device arguments. */ struct mlx4_conf { - uint8_t active_ports; + struct { + uint32_t present; /**< Bit-field for existing ports. */ + uint32_t enabled; /**< Bit-field for user-enabled ports. */ + } ports; }; /* Available parameters list. */ @@ -5927,16 +5931,15 @@ mlx4_rx_intr_disable(struct rte_eth_dev *dev, uint16_t idx) * Key argument to verify. * @param[in] val * Value associated with key. - * @param out - * User data. + * @param[in, out] conf + * Shared configuration data. * * @return * 0 on success, negative errno value on failure. */ static int -mlx4_arg_parse(const char *key, const char *val, void *out) +mlx4_arg_parse(const char *key, const char *val, struct mlx4_conf *conf) { - struct mlx4_conf *conf = out; unsigned long tmp; errno = 0; @@ -5946,12 +5949,11 @@ mlx4_arg_parse(const char *key, const char *val, void *out) return -errno; } if (strcmp(MLX4_PMD_PORT_KVARG, key) == 0) { - if (tmp >= MLX4_PMD_MAX_PHYS_PORTS) { - ERROR("invalid port index %lu (max: %u)", - tmp, MLX4_PMD_MAX_PHYS_PORTS - 1); + if (!(conf->ports.present & (1 << tmp))) { + ERROR("invalid port index %lu", tmp); return -EINVAL; } - conf->active_ports |= 1 << tmp; + conf->ports.enabled |= 1 << tmp; } else { WARN("%s: unknown parameter", key); return -EINVAL; @@ -5987,8 +5989,13 @@ mlx4_args(struct rte_devargs *devargs, struct mlx4_conf *conf) for (i = 0; pmd_mlx4_init_params[i]; ++i) { arg_count = rte_kvargs_count(kvlist, MLX4_PMD_PORT_KVARG); while (arg_count-- > 0) { - ret = rte_kvargs_process(kvlist, MLX4_PMD_PORT_KVARG, - mlx4_arg_parse, conf); + ret = rte_kvargs_process(kvlist, + MLX4_PMD_PORT_KVARG, + (int (*)(const char *, + const char *, + void *)) + mlx4_arg_parse, + conf); if (ret != 0) goto free_kvlist; } @@ -6023,7 +6030,7 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) struct ibv_context *attr_ctx = NULL; struct ibv_device_attr device_attr; struct mlx4_conf conf = { - .active_ports = 0, + .ports.present = 0, }; unsigned int vf; int i; @@ -6085,16 +6092,16 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) } INFO("%u port(s) detected", device_attr.phys_port_cnt); + for (i = 0; i < device_attr.phys_port_cnt; ++i) + conf.ports.present |= 1 << i; if (mlx4_args(pci_dev->device.devargs, &conf)) { ERROR("failed to process device arguments"); err = EINVAL; goto error; } /* Use all ports when none are defined */ - if (conf.active_ports == 0) { - for (i = 0; i < MLX4_PMD_MAX_PHYS_PORTS; i++) - conf.active_ports |= 1 << i; - } + if (!conf.ports.enabled) + conf.ports.enabled = conf.ports.present; for (i = 0; i < device_attr.phys_port_cnt; i++) { uint32_t port = i + 1; /* ports are indexed from one */ struct ibv_context *ctx = NULL; @@ -6107,8 +6114,8 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) #endif /* HAVE_EXP_QUERY_DEVICE */ struct ether_addr mac; - /* If port is not active, skip. */ - if (!(conf.active_ports & (1 << i))) + /* If port is not enabled, skip. */ + if (!(conf.ports.enabled & (1 << i))) continue; #ifdef HAVE_EXP_QUERY_DEVICE exp_device_attr.comp_mask = IBV_EXP_DEVICE_ATTR_EXP_CAP_FLAGS; diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h index 6421c91..25a7212 100644 --- a/drivers/net/mlx4/mlx4.h +++ b/drivers/net/mlx4/mlx4.h @@ -81,9 +81,6 @@ /* Request send completion once in every 64 sends, might be less. */ #define MLX4_PMD_TX_PER_COMP_REQ 64 -/* Maximum number of physical ports. */ -#define MLX4_PMD_MAX_PHYS_PORTS 2 - /* Maximum number of Scatter/Gather Elements per Work Request. */ #ifndef MLX4_PMD_SGE_WR_N #define MLX4_PMD_SGE_WR_N 4