Hi

>-----Original Message-----
>From: Avihai Horon <[email protected]>
>Subject: Re: [PATCH v3 7/8] vfio/migration: Add migration blocker if VM
>memory is too large to cause unmap_bitmap failure
>
>Hi,
>
>On 24/10/2025 5:09, Zhenzhong Duan wrote:
>> External email: Use caution opening links or attachments
>>
>>
>> With default config, kernel VFIO IOMMU type1 driver limits dirty bitmap to
>> 256MB for unmap_bitmap ioctl so the maximum guest memory region is no
>more
>> than 8TB size for the ioctl to succeed.
>>
>> Be conservative here to limit total guest memory to max value supported
>> by unmap_bitmap ioctl or else add a migration blocker. IOMMUFD backend
>> doesn't have such limit, one can use IOMMUFD backed device if there is a
>> need to migration such large VM.
>>
>> Suggested-by: Yi Liu <[email protected]>
>> Signed-off-by: Zhenzhong Duan <[email protected]>
>> ---
>>   hw/vfio/iommufd.c   |  5 +++++
>>   hw/vfio/migration.c | 33 +++++++++++++++++++++++++++++++++
>>   2 files changed, 38 insertions(+)
>>
>> diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c
>> index ba5c6b6586..8de765c769 100644
>> --- a/hw/vfio/iommufd.c
>> +++ b/hw/vfio/iommufd.c
>> @@ -633,6 +633,11 @@ skip_ioas_alloc:
>>       QLIST_INIT(&container->hwpt_list);
>>
>>       bcontainer = VFIO_IOMMU(container);
>> +
>> +    /* There is no limitation on dirty bitmap size in IOMMUFD */
>> +    bcontainer->max_dirty_bitmap_size = UINT64_MAX;
>> +    bcontainer->dirty_pgsizes = qemu_real_host_page_size();
>> +
>>       vfio_address_space_insert(space, bcontainer);
>>
>>       if (!iommufd_cdev_attach_container(vbasedev, container, errp)) {
>> diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c
>> index 4c06e3db93..44bab024b7 100644
>> --- a/hw/vfio/migration.c
>> +++ b/hw/vfio/migration.c
>> @@ -16,6 +16,7 @@
>>   #include <sys/ioctl.h>
>>
>>   #include "system/runstate.h"
>> +#include "hw/boards.h"
>>   #include "hw/vfio/vfio-device.h"
>>   #include "hw/vfio/vfio-migration.h"
>>   #include "migration/misc.h"
>> @@ -1152,6 +1153,31 @@ static bool vfio_viommu_preset(VFIODevice
>*vbasedev)
>>       return vbasedev->bcontainer->space->as !=
>&address_space_memory;
>>   }
>>
>> +static bool vfio_dirty_tracking_exceed_limit(VFIODevice *vbasedev)
>> +{
>> +    VFIOContainer *bcontainer = vbasedev->bcontainer;
>> +    uint64_t max_size, page_size;
>> +
>
>IIUC, this check is not relevant when using VFIO device dirty tracking,
>so maybe bail early if VFIO device dirty tracking is used?
>E.g.:
>
>if (vbasedev->dirty_pages_supported
>&& vbasedev->device_dirty_page_tracking != ON_OFF_AUTO_OFF) {
>     return false;
>}
>
>And replace this with vfio_device_dirty_pages_disabled() in patch #8?

OK, will do.
Previously, I thought 8TB is a size of super large that device dirty tracking 
will never support due to hardware limit.

Thanks
Zhenzhong

Reply via email to