On 7/19/25 8:57 AM, Markus Armbruster wrote:
> Paolo Abeni <pab...@redhat.com> writes:
> 
>> Extend the VirtioDeviceFeatures struct with an additional u64
>> to track unknown features in the 64-127 bit range and decode
>> the full virtio features spaces for vhost and virtio devices.
>>
>> Also add entries for the soon-to-be-supported virtio net GSO over
>> UDP features.
>>
>> Signed-off-by: Paolo Abeni <pab...@redhat.com>
> 
> [...]
> 
>> diff --git a/hw/virtio/virtio-qmp.c b/hw/virtio/virtio-qmp.c
>> index 3b6377cf0d..03c6163cf4 100644
>> --- a/hw/virtio/virtio-qmp.c
>> +++ b/hw/virtio/virtio-qmp.c
> 
> [...]
> 
>> @@ -680,9 +715,10 @@ VirtioDeviceFeatures *qmp_decode_features(uint16_t 
>> device_id, uint64_t bitmap)
>>          g_assert_not_reached();
>>      }
>>  
>> -    features->has_unknown_dev_features = bitmap != 0;
>> +    features->has_unknown_dev_features = !virtio_features_empty(bitmap);
>>      if (features->has_unknown_dev_features) {
>> -        features->unknown_dev_features = bitmap;
>> +        features->unknown_dev_features = bitmap[0];
>> +        features->unknown_dev_features2 = bitmap[1];
>>      }
> 
> Why not assign unconditionally?

I stuck with the old/previous code style. I can move to unconditional
assignment in the next revision.

>>      return features;
> 
> [...]
> 
>> diff --git a/qapi/virtio.json b/qapi/virtio.json
>> index 9d652fe4a8..f2e2dd6e97 100644
>> --- a/qapi/virtio.json
>> +++ b/qapi/virtio.json
>> @@ -490,14 +490,18 @@
>>  #     unique features)
>>  #
>>  # @unknown-dev-features: Virtio device features bitmap that have not
>> -#     been decoded
>> +#     been decoded (bits 0-63)
>> +#
>> +# @unknown-dev-features2: Virtio device features bitmap that have not
>> +#     been decoded (bits 64-127)
>>  #
>>  # Since: 7.2
>>  ##
>>  { 'struct': 'VirtioDeviceFeatures',
>>    'data': { 'transports': [ 'str' ],
>>              '*dev-features': [ 'str' ],
>> -            '*unknown-dev-features': 'uint64' } }
>> +            '*unknown-dev-features': 'uint64',
>> +            '*unknown-dev-features2': 'uint64' } }
>>  
>>  ##
>>  # @VirtQueueStatus:
> 
> I wish we could simply widen @unknown-dev-features, but we don't have
> uint128, and adding it would risk breaking QMP clients.  64 bit integers
> are already troublesome in JSON.
> 
> Does the example in x-query-virtio-status's doc comment need an update?

Yes, you are right, the output for the 'unknown features' field will
include leading zeros for the high 64 bits.

I will update it in the next revision, thanks!

Paolo


Reply via email to