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? > > 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?