On Thu, 9 Jun 2022 07:55:13 +0000 Xiaoming Jiang <jiangxiaom...@outlook.com> wrote:
> Signed-off-by: Xiaoming Jiang <jiangxiaom...@outlook.com> > --- > drivers/bus/vmbus/vmbus_common.c | 30 ++++++++++++++++++++++++++++-- > 1 file changed, 28 insertions(+), 2 deletions(-) > > diff --git a/drivers/bus/vmbus/vmbus_common.c > b/drivers/bus/vmbus/vmbus_common.c > index 367727367e..c583c3df8b 100644 > --- a/drivers/bus/vmbus/vmbus_common.c > +++ b/drivers/bus/vmbus/vmbus_common.c > @@ -102,7 +102,12 @@ vmbus_probe_one_driver(struct rte_vmbus_driver *dr, > VMBUS_LOG(INFO, "VMBUS device %s on NUMA socket %i", > guid, dev->device.numa_node); > > - /* TODO add block/allow logic */ > + /* no initialization when marked as blocked, return without error */ > + if (dev->device.devargs != NULL && > + dev->device.devargs->policy == RTE_DEV_BLOCKED) { > + RTE_LOG(INFO, EAL, " Device is blocked, not initializing\n"); > + return 1; > + } > > /* map resources for device */ > ret = rte_vmbus_map_device(dev); > @@ -163,6 +168,25 @@ vmbus_probe_all_drivers(struct rte_vmbus_device *dev) > return 1; > } > > +static bool > +rte_vmbus_ignore_device(const struct rte_vmbus_device *dev) > +{ > + struct rte_devargs *devargs = vmbus_devargs_lookup(dev); > + > + switch (rte_vmbus_bus.bus.conf.scan_mode) { > + case RTE_BUS_SCAN_ALLOWLIST: > + if (devargs && devargs->policy == RTE_DEV_ALLOWED) > + return false; > + break; > + case RTE_BUS_SCAN_UNDEFINED: > + case RTE_BUS_SCAN_BLOCKLIST: > + if (devargs == NULL || devargs->policy != RTE_DEV_BLOCKED) > + return false; > + break; > + } > + return true; > +} > + > /* > * Scan the vmbus, and call the devinit() function for > * all registered drivers that have a matching entry in its id_table > @@ -180,7 +204,9 @@ rte_vmbus_probe(void) > > rte_uuid_unparse(dev->device_id, ubuf, sizeof(ubuf)); > > - /* TODO: add allowlist/blocklist */ > + if (rte_vmbus_ignore_device(dev)) { > + continue; > + } Nit: You don't need the brackets here. Looks ok to me, need ack from Long Li on this one.