All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rafal Kozik <rk@semihalf.com>
To: dev@dpdk.org
Cc: mw@semihalf.com, mk@semihalf.com, gtzalik@amazon.com,
	evgenys@amazon.com, matua@amazon.com, igorch@amazon.com,
	ferruh.yigit@intel.com, Rafal Kozik <rk@semihalf.com>
Subject: [PATCH 3/4] eal: enable WC during resources mapping
Date: Wed, 11 Apr 2018 16:07:16 +0200	[thread overview]
Message-ID: <1523455637-31719-4-git-send-email-rk@semihalf.com> (raw)
In-Reply-To: <1523455637-31719-1-git-send-email-rk@semihalf.com>

Write combining (wc) increase NIC performenca by making better
utilization of PCI bus, but cannot be used by all PMD.

It will be enable only if RTE_PCI_DRV_WC_ACTIVATE will be set in
drivers flags. For proper work also igb driver must be loaded with
wc_activate set to 1.

When mapping PCI resources firstly try to us wc.
If it is not supported it will fallback to normal mode.

Signed-off-by: Rafal Kozik <rk@semihalf.com>
---
 drivers/bus/pci/linux/pci_uio.c | 39 ++++++++++++++++++++++++++++-----------
 drivers/bus/pci/rte_bus_pci.h   |  2 ++
 2 files changed, 30 insertions(+), 11 deletions(-)

diff --git a/drivers/bus/pci/linux/pci_uio.c b/drivers/bus/pci/linux/pci_uio.c
index d423e4b..a1570c9 100644
--- a/drivers/bus/pci/linux/pci_uio.c
+++ b/drivers/bus/pci/linux/pci_uio.c
@@ -287,17 +287,14 @@ pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx,
 	void *mapaddr;
 	struct rte_pci_addr *loc;
 	struct pci_map *maps;
+	int wc_activate = 0;
+
+	if (dev->driver != NULL)
+		wc_activate = dev->driver->drv_flags & RTE_PCI_DRV_WC_ACTIVATE;
 
 	loc = &dev->addr;
 	maps = uio_res->maps;
 
-	/* update devname for mmap  */
-	snprintf(devname, sizeof(devname),
-			"%s/" PCI_PRI_FMT "/resource%d",
-			rte_pci_get_sysfs_path(),
-			loc->domain, loc->bus, loc->devid,
-			loc->function, res_idx);
-
 	/* allocate memory to keep path */
 	maps[map_idx].path = rte_malloc(NULL, strlen(devname) + 1, 0);
 	if (maps[map_idx].path == NULL) {
@@ -309,11 +306,31 @@ pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx,
 	/*
 	 * open resource file, to mmap it
 	 */
-	fd = open(devname, O_RDWR);
-	if (fd < 0) {
-		RTE_LOG(ERR, EAL, "Cannot open %s: %s\n",
+	if (wc_activate) {
+		/* update devname for mmap  */
+		snprintf(devname, sizeof(devname),
+			"%s/" PCI_PRI_FMT "/resource%d_wc",
+			rte_pci_get_sysfs_path(),
+			loc->domain, loc->bus, loc->devid,
+			loc->function, res_idx);
+
+		fd = open(devname, O_RDWR);
+	}
+
+	if (!wc_activate || fd < 0) {
+		snprintf(devname, sizeof(devname),
+			"%s/" PCI_PRI_FMT "/resource%d",
+			rte_pci_get_sysfs_path(),
+			loc->domain, loc->bus, loc->devid,
+			loc->function, res_idx);
+
+		/* then try to map resource file */
+		fd = open(devname, O_RDWR);
+		if (fd < 0) {
+			RTE_LOG(ERR, EAL, "Cannot open %s: %s\n",
 				devname, strerror(errno));
-		goto error;
+			goto error;
+		}
 	}
 
 	/* try mapping somewhere close to the end of hugepages */
diff --git a/drivers/bus/pci/rte_bus_pci.h b/drivers/bus/pci/rte_bus_pci.h
index 357afb9..b7bcce3 100644
--- a/drivers/bus/pci/rte_bus_pci.h
+++ b/drivers/bus/pci/rte_bus_pci.h
@@ -132,6 +132,8 @@ struct rte_pci_bus {
 
 /** Device needs PCI BAR mapping (done with either IGB_UIO or VFIO) */
 #define RTE_PCI_DRV_NEED_MAPPING 0x0001
+/** Device needs PCI BAR mapping with enabled write combining (wc) */
+#define RTE_PCI_DRV_WC_ACTIVATE 0x0002
 /** Device driver supports link state interrupt */
 #define RTE_PCI_DRV_INTR_LSC	0x0008
 /** Device driver supports device removal interrupt */
-- 
2.7.4

  parent reply	other threads:[~2018-04-11 14:07 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-11 14:07 [PATCH 0/4] support for write combining Rafal Kozik
2018-04-11 14:07 ` [PATCH 1/4] igb_uio: add wc option Rafal Kozik
2018-06-27 16:34   ` Ferruh Yigit
2018-06-28 13:08     ` Rafał Kozik
2018-06-28 13:15       ` [PATCH v2 0/4] support for write combining Rafal Kozik
2018-06-28 13:15         ` [PATCH v2 1/4] igb_uio: add wc option Rafal Kozik
2018-06-28 14:32           ` Ferruh Yigit
2018-06-29  8:35             ` Rafał Kozik
2018-06-29 10:08               ` Ferruh Yigit
2018-06-29 10:24           ` [PATCH v3 0/4] support for write combining Rafal Kozik
2018-06-29 10:24             ` [PATCH v3 1/4] igb_uio: add wc option Rafal Kozik
2018-06-29 10:53               ` Ferruh Yigit
2018-06-29 12:17               ` [PATCH v4 0/4] Support for write combining Rafal Kozik
2018-06-29 12:17                 ` [PATCH v4 1/4] igb_uio: add wc option Rafal Kozik
2018-06-29 13:11                   ` Rafał Kozik
2018-06-29 13:20                   ` Ferruh Yigit
2018-06-29 13:40                   ` Ferruh Yigit
2018-06-29 12:17                 ` [PATCH v4 2/4] bus/pci: reference driver structure Rafal Kozik
2018-06-29 12:17                 ` [PATCH v4 3/4] eal: enable WC during resources mapping Rafal Kozik
2018-06-29 12:17                 ` [PATCH v4 4/4] net/ena: enable WC Rafal Kozik
2018-06-29 13:54               ` [PATCH v5 0/4] Support for write combining Rafal Kozik
2018-06-29 13:54                 ` [PATCH v5 1/4] igb_uio: add wc option Rafal Kozik
2018-06-29 13:54                 ` [PATCH v5 2/4] bus/pci: reference driver structure Rafal Kozik
2018-06-29 13:54                 ` [PATCH v5 3/4] eal: enable WC during resources mapping Rafal Kozik
2018-06-29 13:54                 ` [PATCH v5 4/4] net/ena: enable WC Rafal Kozik
2018-06-29 14:26                 ` [PATCH v5 0/4] Support for write combining Ferruh Yigit
2018-06-29 22:13                   ` Thomas Monjalon
2018-06-29 10:24             ` [PATCH v3 2/4] bus/pci: reference driver structure Rafal Kozik
2018-06-29 10:24             ` [PATCH v3 3/4] eal: enable WC during resources mapping Rafal Kozik
2018-06-29 10:24             ` [PATCH v3 4/4] net/ena: enable WC Rafal Kozik
2018-06-28 13:15         ` [PATCH v2 2/4] bus/pci: reference driver structure Rafal Kozik
2018-06-28 13:15         ` [PATCH v2 3/4] eal: enable WC during resources mapping Rafal Kozik
2018-06-28 14:50           ` Ferruh Yigit
2018-06-29  8:58             ` Rafał Kozik
2018-06-29  9:05               ` Ferruh Yigit
2018-06-29 10:28                 ` Rafał Kozik
2018-06-29 10:37                   ` Ferruh Yigit
2018-06-28 13:15         ` [PATCH v2 4/4] net/ena: enable WC Rafal Kozik
2018-07-02  6:52           ` Michał Krawczyk
2018-04-11 14:07 ` [PATCH 2/4] bus/pci: reference driver structure Rafal Kozik
2018-06-27 16:36   ` Ferruh Yigit
2018-06-28 13:05     ` Rafał Kozik
2018-04-11 14:07 ` Rafal Kozik [this message]
2018-06-27 16:41   ` [PATCH 3/4] eal: enable WC during resources mapping Ferruh Yigit
2018-06-28 13:06     ` Rafał Kozik
2018-04-11 14:07 ` [PATCH 4/4] net/ena: enable WC Rafal Kozik
2018-06-27 16:11   ` Thomas Monjalon
2018-06-28 13:04     ` Rafał Kozik
2018-04-11 14:42 ` [PATCH 0/4] support for write combining Bruce Richardson
2018-04-16 11:36   ` Rafał Kozik
2018-04-27  8:27     ` Rafał Kozik
2018-04-27 11:30       ` Bruce Richardson
2018-04-30  8:07         ` Rafał Kozik
2018-04-30  8:58           ` Bruce Richardson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1523455637-31719-4-git-send-email-rk@semihalf.com \
    --to=rk@semihalf.com \
    --cc=dev@dpdk.org \
    --cc=evgenys@amazon.com \
    --cc=ferruh.yigit@intel.com \
    --cc=gtzalik@amazon.com \
    --cc=igorch@amazon.com \
    --cc=matua@amazon.com \
    --cc=mk@semihalf.com \
    --cc=mw@semihalf.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.