* [PATCH v1 0/2] Bus find_device fixes
@ 2018-04-24 11:31 Gaetan Rivet
2018-04-24 11:31 ` [PATCH v1 1/2] bus/pci: fix find device implementation Gaetan Rivet
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Gaetan Rivet @ 2018-04-24 11:31 UTC (permalink / raw)
To: dev; +Cc: Gaetan Rivet
These patches are extracted from the device querying series [1]
for earlier integration.
[1]: https://dpdk.org/ml/archives/dev/2018-March/092891.html
Gaetan Rivet (2):
bus/pci: fix find device implementation
bus/vdev: fix find device implementation
drivers/bus/pci/pci_common.c | 21 ++++++++++++---------
drivers/bus/pci/rte_bus_pci.h | 3 +++
drivers/bus/vdev/rte_bus_vdev.h | 3 +++
drivers/bus/vdev/vdev.c | 14 +++++++++-----
4 files changed, 27 insertions(+), 14 deletions(-)
--
2.11.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v1 1/2] bus/pci: fix find device implementation
2018-04-24 11:31 [PATCH v1 0/2] Bus find_device fixes Gaetan Rivet
@ 2018-04-24 11:31 ` Gaetan Rivet
2018-04-24 11:31 ` [PATCH v1 2/2] bus/vdev: " Gaetan Rivet
2018-04-27 14:13 ` [PATCH v2 0/2] Bus find_device fixes Gaetan Rivet
2 siblings, 0 replies; 7+ messages in thread
From: Gaetan Rivet @ 2018-04-24 11:31 UTC (permalink / raw)
To: dev; +Cc: Gaetan Rivet, stable
If start is set, and a device before it matches the data
passed for comparison, then this first device is returned.
This induces potentially infinite loops.
Fixes: c7fe1eea8a74 ("bus: simplify finding starting point")
Cc: stable@dpdk.org
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
---
drivers/bus/pci/pci_common.c | 21 ++++++++++++---------
drivers/bus/pci/rte_bus_pci.h | 3 +++
2 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c
index 2a00f365a..2c45f8151 100644
--- a/drivers/bus/pci/pci_common.c
+++ b/drivers/bus/pci/pci_common.c
@@ -459,17 +459,20 @@ static struct rte_device *
pci_find_device(const struct rte_device *start, rte_dev_cmp_t cmp,
const void *data)
{
- struct rte_pci_device *dev;
+ const struct rte_pci_device *pstart;
+ struct rte_pci_device *pdev;
- FOREACH_DEVICE_ON_PCIBUS(dev) {
- if (start && &dev->device == start) {
- start = NULL; /* starting point found */
- continue;
- }
- if (cmp(&dev->device, data) == 0)
- return &dev->device;
+ if (start != NULL) {
+ pstart = RTE_DEV_TO_PCI_CONST(start);
+ pdev = TAILQ_NEXT(pstart, next);
+ } else {
+ pdev = TAILQ_FIRST(&rte_pci_bus.device_list);
+ }
+ while (pdev != NULL) {
+ if (cmp(&pdev->device, data) == 0)
+ return &pdev->device;
+ pdev = TAILQ_NEXT(pdev, next);
}
-
return NULL;
}
diff --git a/drivers/bus/pci/rte_bus_pci.h b/drivers/bus/pci/rte_bus_pci.h
index 357afb912..458e6d076 100644
--- a/drivers/bus/pci/rte_bus_pci.h
+++ b/drivers/bus/pci/rte_bus_pci.h
@@ -74,6 +74,9 @@ struct rte_pci_device {
*/
#define RTE_DEV_TO_PCI(ptr) container_of(ptr, struct rte_pci_device, device)
+#define RTE_DEV_TO_PCI_CONST(ptr) \
+ container_of(ptr, const struct rte_pci_device, device)
+
#define RTE_ETH_DEV_TO_PCI(eth_dev) RTE_DEV_TO_PCI((eth_dev)->device)
/** Any PCI device identifier (vendor, device, ...) */
--
2.11.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v1 2/2] bus/vdev: fix find device implementation
2018-04-24 11:31 [PATCH v1 0/2] Bus find_device fixes Gaetan Rivet
2018-04-24 11:31 ` [PATCH v1 1/2] bus/pci: fix find device implementation Gaetan Rivet
@ 2018-04-24 11:31 ` Gaetan Rivet
2018-04-27 14:13 ` [PATCH v2 0/2] Bus find_device fixes Gaetan Rivet
2 siblings, 0 replies; 7+ messages in thread
From: Gaetan Rivet @ 2018-04-24 11:31 UTC (permalink / raw)
To: dev; +Cc: Gaetan Rivet, stable
If start is set and a device before it matches the data,
this device is returned.
This induces potentially infinite loops.
Fixes: c7fe1eea8a74 ("bus: simplify finding starting point")
Cc: stable@dpdk.org
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
---
drivers/bus/vdev/rte_bus_vdev.h | 3 +++
drivers/bus/vdev/vdev.c | 14 +++++++++-----
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/drivers/bus/vdev/rte_bus_vdev.h b/drivers/bus/vdev/rte_bus_vdev.h
index 646d6c090..f9b5eb596 100644
--- a/drivers/bus/vdev/rte_bus_vdev.h
+++ b/drivers/bus/vdev/rte_bus_vdev.h
@@ -25,6 +25,9 @@ struct rte_vdev_device {
#define RTE_DEV_TO_VDEV(ptr) \
container_of(ptr, struct rte_vdev_device, device)
+#define RTE_DEV_TO_VDEV_CONST(ptr) \
+ container_of(ptr, const struct rte_vdev_device, device)
+
static inline const char *
rte_vdev_device_name(const struct rte_vdev_device *dev)
{
diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c
index f8dd1f5e6..c135554c0 100644
--- a/drivers/bus/vdev/vdev.c
+++ b/drivers/bus/vdev/vdev.c
@@ -358,15 +358,19 @@ static struct rte_device *
vdev_find_device(const struct rte_device *start, rte_dev_cmp_t cmp,
const void *data)
{
+ const struct rte_vdev_device *vstart;
struct rte_vdev_device *dev;
- TAILQ_FOREACH(dev, &vdev_device_list, next) {
- if (start && &dev->device == start) {
- start = NULL;
- continue;
- }
+ if (start != NULL) {
+ vstart = RTE_DEV_TO_VDEV_CONST(start);
+ dev = TAILQ_NEXT(vstart, next);
+ } else {
+ dev = TAILQ_FIRST(&vdev_device_list);
+ }
+ while (dev != NULL) {
if (cmp(&dev->device, data) == 0)
return &dev->device;
+ dev = TAILQ_NEXT(dev, next);
}
return NULL;
}
--
2.11.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 0/2] Bus find_device fixes
2018-04-24 11:31 [PATCH v1 0/2] Bus find_device fixes Gaetan Rivet
2018-04-24 11:31 ` [PATCH v1 1/2] bus/pci: fix find device implementation Gaetan Rivet
2018-04-24 11:31 ` [PATCH v1 2/2] bus/vdev: " Gaetan Rivet
@ 2018-04-27 14:13 ` Gaetan Rivet
2018-04-27 14:13 ` [PATCH v2 1/2] bus/pci: fix find device implementation Gaetan Rivet
` (2 more replies)
2 siblings, 3 replies; 7+ messages in thread
From: Gaetan Rivet @ 2018-04-27 14:13 UTC (permalink / raw)
To: dev; +Cc: Gaetan Rivet
These patches are extracted from the device querying series [1]
for earlier integration.
[1]: https://dpdk.org/ml/archives/dev/2018-March/092891.html
v2:
* Rebase on master
Gaetan Rivet (2):
bus/pci: fix find device implementation
bus/vdev: fix find device implementation
drivers/bus/pci/pci_common.c | 21 ++++++++++++---------
drivers/bus/pci/rte_bus_pci.h | 3 +++
drivers/bus/vdev/rte_bus_vdev.h | 3 +++
drivers/bus/vdev/vdev.c | 14 +++++++++-----
4 files changed, 27 insertions(+), 14 deletions(-)
--
2.11.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/2] bus/pci: fix find device implementation
2018-04-27 14:13 ` [PATCH v2 0/2] Bus find_device fixes Gaetan Rivet
@ 2018-04-27 14:13 ` Gaetan Rivet
2018-04-27 14:13 ` [PATCH v2 2/2] bus/vdev: " Gaetan Rivet
2018-04-27 14:36 ` [PATCH v2 0/2] Bus find_device fixes Thomas Monjalon
2 siblings, 0 replies; 7+ messages in thread
From: Gaetan Rivet @ 2018-04-27 14:13 UTC (permalink / raw)
To: dev; +Cc: Gaetan Rivet, stable
If start is set, and a device before it matches the data
passed for comparison, then this first device is returned.
This induces potentially infinite loops.
Fixes: c7fe1eea8a74 ("bus: simplify finding starting point")
Cc: stable@dpdk.org
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
---
drivers/bus/pci/pci_common.c | 21 ++++++++++++---------
drivers/bus/pci/rte_bus_pci.h | 3 +++
2 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c
index 6bed0bc9d..7215aaec3 100644
--- a/drivers/bus/pci/pci_common.c
+++ b/drivers/bus/pci/pci_common.c
@@ -455,17 +455,20 @@ static struct rte_device *
pci_find_device(const struct rte_device *start, rte_dev_cmp_t cmp,
const void *data)
{
- struct rte_pci_device *dev;
+ const struct rte_pci_device *pstart;
+ struct rte_pci_device *pdev;
- FOREACH_DEVICE_ON_PCIBUS(dev) {
- if (start && &dev->device == start) {
- start = NULL; /* starting point found */
- continue;
- }
- if (cmp(&dev->device, data) == 0)
- return &dev->device;
+ if (start != NULL) {
+ pstart = RTE_DEV_TO_PCI_CONST(start);
+ pdev = TAILQ_NEXT(pstart, next);
+ } else {
+ pdev = TAILQ_FIRST(&rte_pci_bus.device_list);
+ }
+ while (pdev != NULL) {
+ if (cmp(&pdev->device, data) == 0)
+ return &pdev->device;
+ pdev = TAILQ_NEXT(pdev, next);
}
-
return NULL;
}
diff --git a/drivers/bus/pci/rte_bus_pci.h b/drivers/bus/pci/rte_bus_pci.h
index 357afb912..458e6d076 100644
--- a/drivers/bus/pci/rte_bus_pci.h
+++ b/drivers/bus/pci/rte_bus_pci.h
@@ -74,6 +74,9 @@ struct rte_pci_device {
*/
#define RTE_DEV_TO_PCI(ptr) container_of(ptr, struct rte_pci_device, device)
+#define RTE_DEV_TO_PCI_CONST(ptr) \
+ container_of(ptr, const struct rte_pci_device, device)
+
#define RTE_ETH_DEV_TO_PCI(eth_dev) RTE_DEV_TO_PCI((eth_dev)->device)
/** Any PCI device identifier (vendor, device, ...) */
--
2.11.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 2/2] bus/vdev: fix find device implementation
2018-04-27 14:13 ` [PATCH v2 0/2] Bus find_device fixes Gaetan Rivet
2018-04-27 14:13 ` [PATCH v2 1/2] bus/pci: fix find device implementation Gaetan Rivet
@ 2018-04-27 14:13 ` Gaetan Rivet
2018-04-27 14:36 ` [PATCH v2 0/2] Bus find_device fixes Thomas Monjalon
2 siblings, 0 replies; 7+ messages in thread
From: Gaetan Rivet @ 2018-04-27 14:13 UTC (permalink / raw)
To: dev; +Cc: Gaetan Rivet, stable
If start is set and a device before it matches the data,
this device is returned.
This induces potentially infinite loops.
Fixes: c7fe1eea8a74 ("bus: simplify finding starting point")
Cc: stable@dpdk.org
Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
---
drivers/bus/vdev/rte_bus_vdev.h | 3 +++
drivers/bus/vdev/vdev.c | 14 +++++++++-----
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/drivers/bus/vdev/rte_bus_vdev.h b/drivers/bus/vdev/rte_bus_vdev.h
index 646d6c090..f9b5eb596 100644
--- a/drivers/bus/vdev/rte_bus_vdev.h
+++ b/drivers/bus/vdev/rte_bus_vdev.h
@@ -25,6 +25,9 @@ struct rte_vdev_device {
#define RTE_DEV_TO_VDEV(ptr) \
container_of(ptr, struct rte_vdev_device, device)
+#define RTE_DEV_TO_VDEV_CONST(ptr) \
+ container_of(ptr, const struct rte_vdev_device, device)
+
static inline const char *
rte_vdev_device_name(const struct rte_vdev_device *dev)
{
diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c
index 84fa51f98..9f576eb80 100644
--- a/drivers/bus/vdev/vdev.c
+++ b/drivers/bus/vdev/vdev.c
@@ -495,16 +495,20 @@ static struct rte_device *
vdev_find_device(const struct rte_device *start, rte_dev_cmp_t cmp,
const void *data)
{
+ const struct rte_vdev_device *vstart;
struct rte_vdev_device *dev;
rte_spinlock_lock(&vdev_device_list_lock);
- TAILQ_FOREACH(dev, &vdev_device_list, next) {
- if (start && &dev->device == start) {
- start = NULL;
- continue;
- }
+ if (start != NULL) {
+ vstart = RTE_DEV_TO_VDEV_CONST(start);
+ dev = TAILQ_NEXT(vstart, next);
+ } else {
+ dev = TAILQ_FIRST(&vdev_device_list);
+ }
+ while (dev != NULL) {
if (cmp(&dev->device, data) == 0)
break;
+ dev = TAILQ_NEXT(dev, next);
}
rte_spinlock_unlock(&vdev_device_list_lock);
--
2.11.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 0/2] Bus find_device fixes
2018-04-27 14:13 ` [PATCH v2 0/2] Bus find_device fixes Gaetan Rivet
2018-04-27 14:13 ` [PATCH v2 1/2] bus/pci: fix find device implementation Gaetan Rivet
2018-04-27 14:13 ` [PATCH v2 2/2] bus/vdev: " Gaetan Rivet
@ 2018-04-27 14:36 ` Thomas Monjalon
2 siblings, 0 replies; 7+ messages in thread
From: Thomas Monjalon @ 2018-04-27 14:36 UTC (permalink / raw)
To: Gaetan Rivet; +Cc: dev
> Gaetan Rivet (2):
> bus/pci: fix find device implementation
> bus/vdev: fix find device implementation
Applied, thanks
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-04-27 14:36 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-24 11:31 [PATCH v1 0/2] Bus find_device fixes Gaetan Rivet
2018-04-24 11:31 ` [PATCH v1 1/2] bus/pci: fix find device implementation Gaetan Rivet
2018-04-24 11:31 ` [PATCH v1 2/2] bus/vdev: " Gaetan Rivet
2018-04-27 14:13 ` [PATCH v2 0/2] Bus find_device fixes Gaetan Rivet
2018-04-27 14:13 ` [PATCH v2 1/2] bus/pci: fix find device implementation Gaetan Rivet
2018-04-27 14:13 ` [PATCH v2 2/2] bus/vdev: " Gaetan Rivet
2018-04-27 14:36 ` [PATCH v2 0/2] Bus find_device 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.