* [PATCH 0/4] x86 ioport fixes
@ 2016-03-15 6:29 David Marchand
2016-03-15 6:29 ` [PATCH 1/4] pci: explicitly call ioport handlers for uio_pci_generic David Marchand
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: David Marchand @ 2016-03-15 6:29 UTC (permalink / raw)
To: dev; +Cc: mauricio.vasquezbernal, yuanhan.liu, huawei.xie
Here is a patchset for little cleanups and a fix on newly introduced pci
ioport api.
The last patch fixes a regression reported by Mauricio V. [1].
[1]: http://dpdk.org/ml/archives/dev/2016-February/033922.html
--
David Marchand
David Marchand (4):
pci: explicitly call ioport handlers for uio_pci_generic
pci: align ioport unmap error handling to ioport map
pci: align ioport special case for x86 in read/write/unmap
pci: fix ioport support for uio_pci_generic on x86
lib/librte_eal/linuxapp/eal/eal_pci.c | 36 +++++++++++++++++++++++++----------
1 file changed, 26 insertions(+), 10 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/4] pci: explicitly call ioport handlers for uio_pci_generic
2016-03-15 6:29 [PATCH 0/4] x86 ioport fixes David Marchand
@ 2016-03-15 6:29 ` David Marchand
2016-03-15 6:29 ` [PATCH 2/4] pci: align ioport unmap error handling to ioport map David Marchand
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: David Marchand @ 2016-03-15 6:29 UTC (permalink / raw)
To: dev; +Cc: mauricio.vasquezbernal, yuanhan.liu, huawei.xie
Prepare for fixes on x86 by separating igb_uio and uio_pci_generic cases.
Signed-off-by: David Marchand <david.marchand@6wind.com>
---
lib/librte_eal/linuxapp/eal/eal_pci.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c
index 9f75252..e2af371 100644
--- a/lib/librte_eal/linuxapp/eal/eal_pci.c
+++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
@@ -617,6 +617,8 @@ rte_eal_pci_ioport_map(struct rte_pci_device *dev, int bar,
break;
#endif
case RTE_KDRV_IGB_UIO:
+ ret = pci_uio_ioport_map(dev, bar, p);
+ break;
case RTE_KDRV_UIO_GENERIC:
ret = pci_uio_ioport_map(dev, bar, p);
break;
@@ -646,6 +648,8 @@ rte_eal_pci_ioport_read(struct rte_pci_ioport *p,
break;
#endif
case RTE_KDRV_IGB_UIO:
+ pci_uio_ioport_read(p, data, len, offset);
+ break;
case RTE_KDRV_UIO_GENERIC:
pci_uio_ioport_read(p, data, len, offset);
break;
@@ -669,6 +673,8 @@ rte_eal_pci_ioport_write(struct rte_pci_ioport *p,
break;
#endif
case RTE_KDRV_IGB_UIO:
+ pci_uio_ioport_write(p, data, len, offset);
+ break;
case RTE_KDRV_UIO_GENERIC:
pci_uio_ioport_write(p, data, len, offset);
break;
@@ -695,6 +701,8 @@ rte_eal_pci_ioport_unmap(struct rte_pci_ioport *p)
break;
#endif
case RTE_KDRV_IGB_UIO:
+ ret = pci_uio_ioport_unmap(p);
+ break;
case RTE_KDRV_UIO_GENERIC:
ret = pci_uio_ioport_unmap(p);
break;
--
1.9.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/4] pci: align ioport unmap error handling to ioport map
2016-03-15 6:29 [PATCH 0/4] x86 ioport fixes David Marchand
2016-03-15 6:29 ` [PATCH 1/4] pci: explicitly call ioport handlers for uio_pci_generic David Marchand
@ 2016-03-15 6:29 ` David Marchand
2016-03-15 6:29 ` [PATCH 3/4] pci: align ioport special case for x86 in read/write/unmap David Marchand
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: David Marchand @ 2016-03-15 6:29 UTC (permalink / raw)
To: dev; +Cc: mauricio.vasquezbernal, yuanhan.liu, huawei.xie
Same idea as commit bd80d4730aca ("pci: rework ioport map error handling").
Signed-off-by: David Marchand <david.marchand@6wind.com>
---
lib/librte_eal/linuxapp/eal/eal_pci.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c
index e2af371..7707292 100644
--- a/lib/librte_eal/linuxapp/eal/eal_pci.c
+++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
@@ -690,12 +690,11 @@ rte_eal_pci_ioport_write(struct rte_pci_ioport *p,
int
rte_eal_pci_ioport_unmap(struct rte_pci_ioport *p)
{
- int ret;
+ int ret = -1;
switch (p->dev->kdrv) {
#ifdef VFIO_PRESENT
case RTE_KDRV_VFIO:
- ret = -1;
if (pci_vfio_is_enabled())
ret = pci_vfio_ioport_unmap(p);
break;
@@ -710,8 +709,6 @@ rte_eal_pci_ioport_unmap(struct rte_pci_ioport *p)
#if defined(RTE_ARCH_X86)
/* special case for x86 ... nothing to do */
ret = 0;
-#else
- ret = -1;
#endif
break;
}
--
1.9.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/4] pci: align ioport special case for x86 in read/write/unmap
2016-03-15 6:29 [PATCH 0/4] x86 ioport fixes David Marchand
2016-03-15 6:29 ` [PATCH 1/4] pci: explicitly call ioport handlers for uio_pci_generic David Marchand
2016-03-15 6:29 ` [PATCH 2/4] pci: align ioport unmap error handling to ioport map David Marchand
@ 2016-03-15 6:29 ` David Marchand
2016-03-15 6:29 ` [PATCH 4/4] pci: fix ioport support for uio_pci_generic on x86 David Marchand
2016-03-16 20:21 ` [PATCH 0/4] x86 ioport fixes Thomas Monjalon
4 siblings, 0 replies; 6+ messages in thread
From: David Marchand @ 2016-03-15 6:29 UTC (permalink / raw)
To: dev; +Cc: mauricio.vasquezbernal, yuanhan.liu, huawei.xie
Commit b8eb345378bd ("pci: ignore devices already managed in Linux when
mapping x86 ioport") did not update other parts of the ioport api.
The application is not supposed to call these read/write/unmap ioport
functions if map call failed but I prefer aligning the code for the sake
of consistency.
Signed-off-by: David Marchand <david.marchand@6wind.com>
---
lib/librte_eal/linuxapp/eal/eal_pci.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c
index 7707292..74c6919 100644
--- a/lib/librte_eal/linuxapp/eal/eal_pci.c
+++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
@@ -653,12 +653,13 @@ rte_eal_pci_ioport_read(struct rte_pci_ioport *p,
case RTE_KDRV_UIO_GENERIC:
pci_uio_ioport_read(p, data, len, offset);
break;
- default:
+ case RTE_KDRV_NONE:
#if defined(RTE_ARCH_X86)
- /* special case for x86 ... */
pci_uio_ioport_read(p, data, len, offset);
#endif
break;
+ default:
+ break;
}
}
@@ -678,12 +679,13 @@ rte_eal_pci_ioport_write(struct rte_pci_ioport *p,
case RTE_KDRV_UIO_GENERIC:
pci_uio_ioport_write(p, data, len, offset);
break;
- default:
+ case RTE_KDRV_NONE:
#if defined(RTE_ARCH_X86)
- /* special case for x86 ... */
pci_uio_ioport_write(p, data, len, offset);
#endif
break;
+ default:
+ break;
}
}
@@ -705,12 +707,13 @@ rte_eal_pci_ioport_unmap(struct rte_pci_ioport *p)
case RTE_KDRV_UIO_GENERIC:
ret = pci_uio_ioport_unmap(p);
break;
- default:
+ case RTE_KDRV_NONE:
#if defined(RTE_ARCH_X86)
- /* special case for x86 ... nothing to do */
ret = 0;
#endif
break;
+ default:
+ break;
}
return ret;
--
1.9.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 4/4] pci: fix ioport support for uio_pci_generic on x86
2016-03-15 6:29 [PATCH 0/4] x86 ioport fixes David Marchand
` (2 preceding siblings ...)
2016-03-15 6:29 ` [PATCH 3/4] pci: align ioport special case for x86 in read/write/unmap David Marchand
@ 2016-03-15 6:29 ` David Marchand
2016-03-16 20:21 ` [PATCH 0/4] x86 ioport fixes Thomas Monjalon
4 siblings, 0 replies; 6+ messages in thread
From: David Marchand @ 2016-03-15 6:29 UTC (permalink / raw)
To: dev; +Cc: mauricio.vasquezbernal, yuanhan.liu, huawei.xie
uio_pci_generic does not offer the same sysfs helpers as igb_uio.
In this case, ioport number can only be retrieved by parsing /proc/ioports.
Fixes: 756ce64b1ecd ("eal: introduce PCI ioport API")
Reported-by: Mauricio Vásquez <mauricio.vasquezbernal@studenti.polito.it>
Signed-off-by: David Marchand <david.marchand@6wind.com>
---
lib/librte_eal/linuxapp/eal/eal_pci.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/lib/librte_eal/linuxapp/eal/eal_pci.c b/lib/librte_eal/linuxapp/eal/eal_pci.c
index 74c6919..dbf12a8 100644
--- a/lib/librte_eal/linuxapp/eal/eal_pci.c
+++ b/lib/librte_eal/linuxapp/eal/eal_pci.c
@@ -620,7 +620,11 @@ rte_eal_pci_ioport_map(struct rte_pci_device *dev, int bar,
ret = pci_uio_ioport_map(dev, bar, p);
break;
case RTE_KDRV_UIO_GENERIC:
+#if defined(RTE_ARCH_X86)
+ ret = pci_ioport_map(dev, bar, p);
+#else
ret = pci_uio_ioport_map(dev, bar, p);
+#endif
break;
case RTE_KDRV_NONE:
#if defined(RTE_ARCH_X86)
@@ -705,7 +709,11 @@ rte_eal_pci_ioport_unmap(struct rte_pci_ioport *p)
ret = pci_uio_ioport_unmap(p);
break;
case RTE_KDRV_UIO_GENERIC:
+#if defined(RTE_ARCH_X86)
+ ret = 0;
+#else
ret = pci_uio_ioport_unmap(p);
+#endif
break;
case RTE_KDRV_NONE:
#if defined(RTE_ARCH_X86)
--
1.9.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 0/4] x86 ioport fixes
2016-03-15 6:29 [PATCH 0/4] x86 ioport fixes David Marchand
` (3 preceding siblings ...)
2016-03-15 6:29 ` [PATCH 4/4] pci: fix ioport support for uio_pci_generic on x86 David Marchand
@ 2016-03-16 20:21 ` Thomas Monjalon
4 siblings, 0 replies; 6+ messages in thread
From: Thomas Monjalon @ 2016-03-16 20:21 UTC (permalink / raw)
To: David Marchand; +Cc: dev, mauricio.vasquezbernal, yuanhan.liu, huawei.xie
2016-03-15 07:29, David Marchand:
> Here is a patchset for little cleanups and a fix on newly introduced pci
> ioport api.
> The last patch fixes a regression reported by Mauricio V. [1].
>
> [1]: http://dpdk.org/ml/archives/dev/2016-February/033922.html
Applied, thanks
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-03-16 20:23 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-15 6:29 [PATCH 0/4] x86 ioport fixes David Marchand
2016-03-15 6:29 ` [PATCH 1/4] pci: explicitly call ioport handlers for uio_pci_generic David Marchand
2016-03-15 6:29 ` [PATCH 2/4] pci: align ioport unmap error handling to ioport map David Marchand
2016-03-15 6:29 ` [PATCH 3/4] pci: align ioport special case for x86 in read/write/unmap David Marchand
2016-03-15 6:29 ` [PATCH 4/4] pci: fix ioport support for uio_pci_generic on x86 David Marchand
2016-03-16 20:21 ` [PATCH 0/4] x86 ioport fixes Thomas Monjalon
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.