From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg0-f45.google.com (mail-pg0-f45.google.com [74.125.83.45]) by dpdk.org (Postfix) with ESMTP id 98B1B7D22 for ; Mon, 21 Aug 2017 11:33:33 +0200 (CEST) Received: by mail-pg0-f45.google.com with SMTP id t3so68802128pgt.0 for ; Mon, 21 Aug 2017 02:33:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fridaylinux-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=pPJNPvzK63EhAVz4W0nRo5RxtoL9Hj11tPTpAsauj58=; b=QwP9l/uzzaOZ4l3k+aIniGKiiy2UeqaKGgUKI86uz35wACmT7V/4vDC5iJkUDeyE4h GkC9L9joXpjJQ16p40mDKAQr6HUFZCkqTdEhsTS5K6qlnxVGk5aP+vdeyyfQ7lGDrk5s F3NTmTgqW895oQX4pMMv8nee4TWSaRAGDp3CJ+IgE5La07ZSJpqxoS2c35GVfx0erdZ0 iHoWzzfqHOH8k3aAH1j1veO8FssS7w1TaaZaYk/UT/YXT0vq38AqSauKo9nUwHh07Opn ECUMaFZCBGTeUHpQhXNTWMoRxXs6d5YyKdA/ITt5MG+oBsr4PFvzi/fAyAzLOfaDc10T 6HMA== 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; bh=pPJNPvzK63EhAVz4W0nRo5RxtoL9Hj11tPTpAsauj58=; b=e4mBB6qWu0RWUzRVFGZRzTdGsMgH4LZ8nuJ3fR9FIz3WSGnC4ms4bpjK+Im1dEo0UO hPc2eBkGQudx98sCFxV7UA9P+YKJUPAo3L4/TcBWeejCQTkZ8ScaI7+oGdtrxN1fO1mQ gxkT4Afi/a2u7Q3pIU8k+6laqMFDAKQLMZomXB5sRolsEwoq35MLI0XxrXqHiqMdsM21 JFsJWV1v7rWbNcVhamqulCaNTpEieLdv+Fybae99XKHK4lyJlJ5EzodmiQwnSclC27fR P8J7nWlLbC3pTygeskM7jpmMuL9veAXcaoD99KSrwPoHjq+xV0tvuACCd5yTGxJ2gdi1 TeQQ== X-Gm-Message-State: AHYfb5g2o/OALKfgBh5lJWbTcx7+FjTv9+mWjSk+m2BG44ihboads4r3 SWiQ5HhU5f4wnuOq X-Received: by 10.99.97.207 with SMTP id v198mr12779929pgb.346.1503308012890; Mon, 21 Aug 2017 02:33:32 -0700 (PDT) Received: from localhost.localdomain ([45.63.61.64]) by smtp.gmail.com with ESMTPSA id 69sm23355087pfh.186.2017.08.21.02.33.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 21 Aug 2017 02:33:31 -0700 (PDT) From: Yuanhan Liu To: Gaetan Rivet Cc: dpdk stable , Yuanhan Liu Date: Mon, 21 Aug 2017 17:30:20 +0800 Message-Id: <1503307878-16728-6-git-send-email-yliu@fridaylinux.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1503307878-16728-1-git-send-email-yliu@fridaylinux.org> References: <1503307878-16728-1-git-send-email-yliu@fridaylinux.org> Subject: [dpdk-stable] patch 'bus/pci: use given name as generic name' has been queued to stable release 17.05.2 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Aug 2017 09:33:34 -0000 Hi, FYI, your patch has been queued to stable release 17.05.2 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 08/24/17. So please shout if anyone has objections. Thanks. --yliu --- >>From abbdc42771b8999624afe375b4d5d8e036d7ab71 Mon Sep 17 00:00:00 2001 From: Gaetan Rivet Date: Sat, 15 Jul 2017 19:56:39 +0200 Subject: [PATCH] bus/pci: use given name as generic name [ upstream commit 23eaa9059ec24e95e32361f333ed0686f82bea74 ] When an application requests the use of a PCI device, it can currently interchangeably use either the longform DomBDF format (0000:00:00.0) or the shorter BDF format (00:00.0). When a device is inserted via the hotplug API, it must first be scanned and then will be identified by its name using `find_device`. The name of the device must match the name given by the user to be found and then probed. A new function sets the expected name for a scanned PCI device. It was previously generated from parsing the PCI address. This canonical name is superseded when an rte_devargs exists describing the device. In such case, the device takes the given name found within the rte_devargs. As the rte_devargs is linked to the rte_pci_device during scanning, it can be avoided during the probe. Additionally, this fixes the issue of the rte_devargs lookup not being done within rte_pci_probe_one. Fixes: beec692c5157 ("eal: add name field to generic device") Signed-off-by: Gaetan Rivet --- lib/librte_eal/bsdapp/eal/eal_pci.c | 4 ++-- lib/librte_eal/common/eal_common_pci.c | 29 ++++++++++++++++++++++++----- lib/librte_eal/common/eal_private.h | 5 +++++ lib/librte_eal/linuxapp/eal/eal_pci.c | 4 ++-- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/lib/librte_eal/bsdapp/eal/eal_pci.c b/lib/librte_eal/bsdapp/eal/eal_pci.c index e321461..97a88ec 100644 --- a/lib/librte_eal/bsdapp/eal/eal_pci.c +++ b/lib/librte_eal/bsdapp/eal/eal_pci.c @@ -282,8 +282,7 @@ pci_scan_one(int dev_pci_fd, struct pci_conf *conf) /* FreeBSD has no NUMA support (yet) */ dev->device.numa_node = 0; - rte_pci_device_name(&dev->addr, dev->name, sizeof(dev->name)); - dev->device.name = dev->name; + pci_name_set(dev); /* FreeBSD has only one pass through driver */ dev->kdrv = RTE_KDRV_NIC_UIO; @@ -334,6 +333,7 @@ pci_scan_one(int dev_pci_fd, struct pci_conf *conf) } else { /* already registered */ dev2->kdrv = dev->kdrv; dev2->max_vfs = dev->max_vfs; + pci_name_set(dev2); memmove(dev2->mem_resource, dev->mem_resource, sizeof(dev->mem_resource)); diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c index b749991..8f8627e 100644 --- a/lib/librte_eal/common/eal_common_pci.c +++ b/lib/librte_eal/common/eal_common_pci.c @@ -113,6 +113,29 @@ static struct rte_devargs *pci_devargs_lookup(struct rte_pci_device *dev) return NULL; } +void +pci_name_set(struct rte_pci_device *dev) +{ + struct rte_devargs *devargs; + + /* Each device has its internal, canonical name set. */ + rte_pci_device_name(&dev->addr, + dev->name, sizeof(dev->name)); + devargs = pci_devargs_lookup(dev); + dev->device.devargs = devargs; + /* In blacklist mode, if the device is not blacklisted, no + * rte_devargs exists for it. + */ + if (devargs != NULL) + /* If an rte_devargs exists, the generic rte_device uses the + * given name as its namea + */ + dev->device.name = dev->device.devargs->name; + else + /* Otherwise, it uses the internal, canonical form. */ + dev->device.name = dev->name; +} + /* map a particular resource from a file */ void * pci_map_resource(void *requested_addr, int fd, off_t offset, size_t size, @@ -419,11 +442,7 @@ rte_pci_probe(void) FOREACH_DEVICE_ON_PCIBUS(dev) { probed++; - /* set devargs in PCI structure */ - devargs = pci_devargs_lookup(dev); - if (devargs != NULL) - dev->device.devargs = devargs; - + devargs = dev->device.devargs; /* probe all or only whitelisted devices */ if (probe_all) ret = pci_probe_all_drivers(dev); diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h index 6cacce0..0a1c3a7 100644 --- a/lib/librte_eal/common/eal_private.h +++ b/lib/librte_eal/common/eal_private.h @@ -113,6 +113,11 @@ struct rte_pci_driver; struct rte_pci_device; /** + * Find the name of a PCI device. + */ +void pci_name_set(struct rte_pci_device *dev); + +/** * Add a PCI device to the PCI Bus (append to PCI Device list). This function * also updates the bus references of the PCI Device (and the generic device * object embedded within. diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c index 595622b..816b19d 100644 --- a/lib/librte_eal/linuxapp/eal/eal_pci.c +++ b/lib/librte_eal/linuxapp/eal/eal_pci.c @@ -324,8 +324,7 @@ pci_scan_one(const char *dirname, const struct rte_pci_addr *addr) dev->device.numa_node = tmp; } - rte_pci_device_name(addr, dev->name, sizeof(dev->name)); - dev->device.name = dev->name; + pci_name_set(dev); /* parse resources */ snprintf(filename, sizeof(filename), "%s/resource", dirname); @@ -373,6 +372,7 @@ pci_scan_one(const char *dirname, const struct rte_pci_addr *addr) } else { /* already registered */ dev2->kdrv = dev->kdrv; dev2->max_vfs = dev->max_vfs; + pci_name_set(dev2); memmove(dev2->mem_resource, dev->mem_resource, sizeof(dev->mem_resource)); free(dev); -- 2.7.4