Hi Eric,

>-----Original Message-----
>From: Eric Auger <eric.au...@redhat.com>
>Subject: Re: [PATCH v6 07/19] vfio/container: Implement
>HostIOMMUDeviceClass::realize() handler
>
>Hi Zhenzhong,
>
>On 6/3/24 08:10, Zhenzhong Duan wrote:
>> Utilize range_get_last_bit() to get host IOMMU address width and
>> package it in HostIOMMUDeviceCaps for query with .get_cap().
>>
>> Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com>
>> ---
>>  hw/vfio/container.c | 26 ++++++++++++++++++++++++++
>>  1 file changed, 26 insertions(+)
>>
>> diff --git a/hw/vfio/container.c b/hw/vfio/container.c
>> index c4fca2dfca..48800fe92f 100644
>> --- a/hw/vfio/container.c
>> +++ b/hw/vfio/container.c
>> @@ -1136,6 +1136,31 @@ static void
>vfio_iommu_legacy_class_init(ObjectClass *klass, void *data)
>>      vioc->pci_hot_reset = vfio_legacy_pci_hot_reset;
>>  };
>>
>> +static bool hiod_legacy_vfio_realize(HostIOMMUDevice *hiod, void
>*opaque,
>> +                                     Error **errp)
>> +{
>> +    VFIODevice *vdev = opaque;
>> +    /* iova_ranges is a sorted list */
>> +    GList *l = g_list_last(vdev->bcontainer->iova_ranges);
>> +
>> +    /* Only support query HOST_IOMMU_DEVICE_CAP_AW_BITS with
>legacy backend */
>I don't get the comment as HOST_IOMMU_DEVICE_CAP_AW_BITS support
>seems
>to be introduced in [PATCH v6 11/19] backends/iommufd: Implement
>HostIOMMUDeviceClass::get_cap() handler

Sorry about my poor English, I mean legacy backend only support
HOST_IOMMU_DEVICE_CAP_AW_BITS, no other caps.
May be only:

/* Only support query HOST_IOMMU_DEVICE_CAP_AW_BITS */

>> +    if (l) {
>> +        Range *range = l->data;
>> +        hiod->caps.aw_bits = range_get_last_bit(range) + 1;
>> +    } else {
>> +        hiod->caps.aw_bits = 0xff;
>why this value?

0xff means no limitation on aw_bits from host side. Aw_bits check
should always pass. This could be a case that an old kernel doesn't
support query iova ranges.

Will add a define like:

#define HOST_IOMMU_DEVICE_CAP_AW_BITS_MAX 0xff

Thanks
Zhenzhong

>> +    }
>> +
>> +    return true;
>> +}
>> +
>> +static void hiod_legacy_vfio_class_init(ObjectClass *oc, void *data)
>> +{
>> +    HostIOMMUDeviceClass *hioc = HOST_IOMMU_DEVICE_CLASS(oc);
>> +
>> +    hioc->realize = hiod_legacy_vfio_realize;
>> +};
>> +
>>  static const TypeInfo types[] = {
>>      {
>>          .name = TYPE_VFIO_IOMMU_LEGACY,
>> @@ -1144,6 +1169,7 @@ static const TypeInfo types[] = {
>>      }, {
>>          .name = TYPE_HOST_IOMMU_DEVICE_LEGACY_VFIO,
>>          .parent = TYPE_HOST_IOMMU_DEVICE,
>> +        .class_init = hiod_legacy_vfio_class_init,
>>      }
>>  };
>>
>
>Thanks
>
>Eric

Reply via email to