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 9ACF9A0A03; Mon, 18 Jan 2021 16:16:58 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0FFD5140F2F; Mon, 18 Jan 2021 16:16:54 +0100 (CET) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by mails.dpdk.org (Postfix) with ESMTP id BA36B140F2D for ; Mon, 18 Jan 2021 16:16:50 +0100 (CET) Received: from Internal Mail-Server by MTLPINE1 (envelope-from xuemingl@nvidia.com) with SMTP; 18 Jan 2021 17:16:49 +0200 Received: from nvidia.com (pegasus05.mtr.labs.mlnx [10.210.16.100]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 10IFGmBp002238; Mon, 18 Jan 2021 17:16:49 +0200 From: Xueming Li To: Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko , Olivier Matz Cc: dev@dpdk.org, Viacheslav Ovsiienko , xuemingl@nvidia.com, Asaf Penso Date: Mon, 18 Jan 2021 15:16:41 +0000 Message-Id: <1610983002-7630-5-git-send-email-xuemingl@nvidia.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1610983002-7630-1-git-send-email-xuemingl@nvidia.com> References: <1610983002-7630-1-git-send-email-xuemingl@nvidia.com> In-Reply-To: <1608304614-13908-2-git-send-email-xuemingl@nvidia.com> References: <1608304614-13908-2-git-send-email-xuemingl@nvidia.com> Subject: [dpdk-dev] [PATCH v2 4/5] devargs: parse name from global device syntax 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 Sender: "dev" To use Global Device Syntax as devarg, name is required for device management. This patch adds global device syntax name resolving by using same strategy as function rte_eth_iterator_init(), parses from "addr" bus parameter for PCI bus, from "name" bus parameter for vdev bus. Example: -a bus=pci,addr=83:00.0/class=eth/driver=mlx5,... name: 03:00.0 -a bus=vdev,name=pcap0/class=eth/driver=pcap,... name:pcap0 Signed-off-by: Xueming Li --- lib/librte_eal/common/eal_common_devargs.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/librte_eal/common/eal_common_devargs.c index 9c7a7de30e..27af4cc0e3 100644 --- a/lib/librte_eal/common/eal_common_devargs.c +++ b/lib/librte_eal/common/eal_common_devargs.c @@ -57,6 +57,7 @@ rte_devargs_layers_parse(struct rte_devargs *devargs, struct rte_class *cls = NULL; struct rte_bus *bus = NULL; const char *s = devstr; + const char *name = NULL; size_t nblayer; size_t i = 0; int ret = 0; @@ -116,6 +117,8 @@ rte_devargs_layers_parse(struct rte_devargs *devargs, if (layers[i].kvlist == NULL) continue; kv = &layers[i].kvlist->pairs[0]; + if (!kv->key) + continue; if (strcmp(kv->key, "bus") == 0) { bus = rte_bus_find_by_name(kv->value); if (bus == NULL) { @@ -146,6 +149,16 @@ rte_devargs_layers_parse(struct rte_devargs *devargs, devargs->cls = cls; devargs->src = devstr; + /* Parse device name. */ + if (bus) { + if (strcmp(bus->name, "vdev") == 0) + name = rte_kvargs_get(layers[0].kvlist, "name"); + else if (strcmp(bus->name, "pci") == 0) + name = rte_kvargs_get(layers[0].kvlist, "addr"); + if (name != NULL) + strncpy(devargs->name, name, sizeof(devargs->name) - 1); + } + /* If we own the data, clean up a bit * the several layers string, to ease * their parsing afterward. -- 2.25.1