On 11/09/2023 10:48, Duan, Zhenzhong wrote: >>>> +static bool vfio_section_is_vfio_pci(MemoryRegionSection *section, >>>> + VFIOContainer *container) >>>> +{ >>>> + VFIOPCIDevice *pcidev; >>>> + VFIODevice *vbasedev; >>>> + VFIOGroup *group; >>>> + Object *owner; >>>> + >>>> + owner = memory_region_owner(section->mr); >>>> + >>>> + QLIST_FOREACH(group, &container->group_list, container_next) { >>>> + QLIST_FOREACH(vbasedev, &group->device_list, next) { >>>> + if (vbasedev->type != VFIO_DEVICE_TYPE_PCI) { >>>> + continue; >>>> + } >>>> + pcidev = container_of(vbasedev, VFIOPCIDevice, vbasedev); >>>> + if (OBJECT(pcidev) == owner) { >>>> + return true; >>>> + } >>>> + } >>>> + } >>>> + >>>> + return false; >>>> +} >>> >>> What about simplify it with memory_region_is_ram_device()? >>> This way vdpa device could also be included. >>> >> >> Note that the check is not interested in RAM (or any other kinda of memory >> like >> VGA). That's covered in the 32-64 ranges. But rather in any PCI device RAM >> that >> would fall in the 64-bit PCI hole. Would memory_region_is_ram_device() really >> cover it? If so, I am all for the simplification. > > Ram device is used not only by vfio pci bars but also host notifier of vdpa > and vhost-user.
My only concern is whether this is all part of the pci-hole64 or not e.g. if we expand to general memory_region_is_ram_device() would we go back to the initial bug where we create an enourmous range. The latter that you mentioned should be mainly virtio-net devices as presented to the guest (regardless of backend is vdpa, or vhost-user) and perhaps they are all in the hole32 PCI hole? Joao