If start is set and a device before it matches the data,
this device is returned.

Fixes: c7fe1eea8a74 ("bus: simplify finding starting point")
Cc: sta...@dpdk.org

Cc: Hemant Agrawal <hemant.agra...@nxp.com>
Cc: Shreyansh Jain <shreyansh.j...@nxp.com>
Signed-off-by: Gaetan Rivet <gaetan.ri...@6wind.com>
---

Hi Shreyansh, Hemant,

Sorry, I did not test this.
I found this issue while working on vdev and PCI.

There is a better way to iterate on devices [1], but the gain
is really minimal and the implementation slightly more complex.
I preferred to avoid complex, as I could not test this patch.

Regards,

[1]: http://dpdk.org/ml/archives/dev/2018-March/092906.html

 drivers/bus/fslmc/fslmc_bus.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/bus/fslmc/fslmc_bus.c b/drivers/bus/fslmc/fslmc_bus.c
index 5ee0beb85..010dd474e 100644
--- a/drivers/bus/fslmc/fslmc_bus.c
+++ b/drivers/bus/fslmc/fslmc_bus.c
@@ -301,8 +301,9 @@ rte_fslmc_find_device(const struct rte_device *start, 
rte_dev_cmp_t cmp,
        struct rte_dpaa2_device *dev;
 
        TAILQ_FOREACH(dev, &rte_fslmc_bus.device_list, next) {
-               if (start && &dev->device == start) {
-                       start = NULL;  /* starting point found */
+               if (start != NULL) {
+                       if (&dev->device == start)
+                               start = NULL;  /* starting point found */
                        continue;
                }
 
-- 
2.11.0

Reply via email to