DPDK 18.11+ does its best to ensure all devices are equally attached or detached in all processes within a shared memory group. For SPDK it means that if a device is hotplugged in the primary, then DPDK will automatically send an IPC hotplug request to all other processes. Those other processes may not have the same SPDK PCI driver registered and may fail to attach the device. DPDK will send back the failure status and the primary process will also fail to hotplug its device. To prevent that, we need to pre-register the pci drivers on env init. We register the drivers just after the EAL init because we don't want the matching devices to be picked up by the initial bus probe in DPDK. That's for 2 reasons: 1) we don't want to attach *all* available devices 2) devices attached from non-SPDK context (that is, outside of the spdk attach or enumerate functions) will still fail to attach - the entire attaching process will only take significant amount of time and will bloat the log with useless status messages Change-Id: I7b4c3a2e355f98ea755649f789137f5a727bc935 Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-on: https://review.gerrithub.io/434415 (master) Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/448377 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> |
||
---|---|---|
.. | ||
env_internal.h | ||
env.c | ||
env.mk | ||
init.c | ||
Makefile | ||
memory.c | ||
pci_ioat.c | ||
pci_nvme.c | ||
pci_virtio.c | ||
pci.c | ||
threads.c | ||
vtophys.c |