eal: allow probing a device again
authorThomas Monjalon <thomas@monjalon.net>
Wed, 19 Sep 2018 23:37:14 +0000 (01:37 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 17 Oct 2018 23:49:52 +0000 (01:49 +0200)
commite9d159c3d5346914934e5fc4f305c9c23aac74c2
treed0dac297494dd1fba10f828c1a4cef387e810ff3
parent52897e7e702b96e4ff6835ead95075b20f65392b
eal: allow probing a device again

In the devargs syntax for device representors, it is possible to add
several devices at once: -w dbdf,representor=[0-3]
It will become a more frequent case when introducing wildcards
and ranges in the new devargs syntax.

If a devargs string is provided for probing, and updated with a bigger
range for a new probing, then we do not want it to fail because
part of this range was already probed previously.
There can be new ports to create from an existing rte_device.

That's why the check for an already probed device
is moved as bus responsibility.
In the case of vdev, a global check is kept in insert_vdev(),
assuming that a vdev will always have only one port.
In the case of ifpga and vmbus, already probed devices are checked.
In the case of NXP buses, the probing is done only once (no hotplug),
though a check is added at bus level for consistency.
In the case of PCI, a driver flag is added to allow PMD probing again.
Only the PMD knows the ports attached to one rte_device.

As another consequence of being able to probe in several steps,
the field rte_device.devargs must not be considered as a full
representation of the rte_device, but only the latest probing args.
Anyway, the field rte_device.devargs is used only for probing.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
Tested-by: Andrew Rybchenko <arybchenko@solarflare.com>
Acked-by: Shreyansh Jain <shreyansh.jain@nxp.com>
drivers/bus/dpaa/dpaa_bus.c
drivers/bus/fslmc/fslmc_bus.c
drivers/bus/ifpga/ifpga_bus.c
drivers/bus/pci/pci_common.c
drivers/bus/pci/rte_bus_pci.h
drivers/bus/vdev/vdev.c
lib/librte_eal/common/eal_common_dev.c
lib/librte_eal/common/include/rte_dev.h