21/06/2017 01:35, Gaetan Rivet: > Scan policies describe the way a bus should scan the system to search > for possible devices. > > Three flags are introduced: > RTE_BUS_SCAN_UNDEFINED: Configuration is irrelevant for this bus > RTE_BUS_SCAN_WHITELIST: Scanning should be limited to declared devices > RTE_BUS_SCAN_BLACKLIST: Scanning should exclude only declared devices > > Signed-off-by: Gaetan Rivet <gaetan.ri...@6wind.com> [...] > @@ -148,6 +164,7 @@ struct rte_bus { > rte_bus_plug_t plug; /**< Probe single device for drivers */ > rte_bus_unplug_t unplug; /**< Remove single device from driver */ > rte_bus_parse_t parse; /**< Parse a device name */ > + struct rte_bus_conf conf; /**< Bus configuration */ > };
You are making explicit what exists currently: - the PCI bus has a whitelist/blacklist policy - the vdev bus is only a whitelist It is a good step to deinterlace some spaghettis in the code. For the next step, the bus should have no policy. It scans everything. We can have a probing policy, but it should not be stored in the bus. I suggest to add a callback in the probe function which would implement the probing policy: FOREACH_DEV_IN_BUS { if (user_callback(dev, user_data)) probe_one(dev); } For compatibility, rte_eal_init() would call rte_bus_probe() with a default callback which checks the whitelists and blacklists for PCI.