Member 'address' is union GuestDeviceAddress with a single branch
GuestDeviceAddressPCI, containing PCI vendor ID and device ID. This
is not a PCI address. Type GuestPCIAddress is. Messed up in recent
commit 2e4211cee4 "qga: add command guest-get-devices for reporting
VirtIO devices".
Rename type GuestDeviceAddressPCI to GuestDeviceIdPCI, type
GuestDeviceAddress to GuestDeviceId, and member 'address' to 'id'.
Document the member properly while there.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
qga/qapi-schema.json | 17 +++++++++--------
qga/commands-win32.c | 16 ++++++++--------
2 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
index cec98c7e06..f2c81cda2b 100644
--- a/qga/qapi-schema.json
+++ b/qga/qapi-schema.json
@@ -1257,26 +1257,26 @@
'returns': 'GuestOSInfo' }
##
-# @GuestDeviceAddressPCI:
+# @GuestDeviceIdPCI:
#
# @vendor-id: vendor ID
# @device-id: device ID
#
# Since: 5.2
##
-{ 'struct': 'GuestDeviceAddressPCI',
+{ 'struct': 'GuestDeviceIdPCI',
'data': { 'vendor-id': 'uint16', 'device-id': 'uint16' } }
##
-# @GuestDeviceAddress:
+# @GuestDeviceId:
#
-# Address of the device
-# - @pci: address of PCI device, since: 5.2
+# Id of the device
+# - @pci: PCI ID, since: 5.2
#
# Since: 5.2
##
-{ 'union': 'GuestDeviceAddress',
- 'data': { 'pci': 'GuestDeviceAddressPCI' } }
+{ 'union': 'GuestDeviceId',
+ 'data': { 'pci': 'GuestDeviceIdPCI' } }
##
# @GuestDeviceInfo:
@@ -1284,6 +1284,7 @@
# @driver-name: name of the associated driver
# @driver-date: driver release date in format YYYY-MM-DD
# @driver-version: driver version
+# @id: device ID
#
# Since: 5.2
##
@@ -1292,7 +1293,7 @@
'driver-name': 'str',
'*driver-date': 'str',
'*driver-version': 'str',
- '*address': 'GuestDeviceAddress'
+ '*id': 'GuestDeviceId'
} }
##
diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index 0c3c05484f..879b02b6c3 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -2390,22 +2390,22 @@ GuestDeviceInfoList *qmp_guest_get_devices(Error **errp)
}
for (j = 0; hw_ids[j] != NULL; j++) {
GMatchInfo *match_info;
- GuestDeviceAddressPCI *address;
+ GuestDeviceIdPCI *id;
if (!g_regex_match(device_pci_re, hw_ids[j], 0, &match_info)) {
continue;
}
skip = false;
- address = g_new0(GuestDeviceAddressPCI, 1);
+ id = g_new0(GuestDeviceIdPCI, 1);
vendor_id = g_match_info_fetch(match_info, 1);
device_id = g_match_info_fetch(match_info, 2);
- address->vendor_id = g_ascii_strtoull(vendor_id, NULL, 16);
- address->device_id = g_ascii_strtoull(device_id, NULL, 16);
+ id->vendor_id = g_ascii_strtoull(vendor_id, NULL, 16);
+ id->device_id = g_ascii_strtoull(device_id, NULL, 16);
- device->address = g_new0(GuestDeviceAddress, 1);
- device->has_address = true;
- device->address->type = GUEST_DEVICE_ADDRESS_KIND_PCI;
- device->address->u.pci.data = address;
+ device->id = g_new0(GuestDeviceId, 1);
+ device->has_id = true;
+ device->id->type = GUEST_DEVICE_ID_KIND_PCI;
+ device->id->u.pci.data = id;
g_match_info_free(match_info);
break;
--
2.26.2
On 10/21/20 9:15 AM, Markus Armbruster wrote: > Member 'address' is union GuestDeviceAddress with a single branch > GuestDeviceAddressPCI, containing PCI vendor ID and device ID. This > is not a PCI address. Type GuestPCIAddress is. Messed up in recent > commit 2e4211cee4 "qga: add command guest-get-devices for reporting > VirtIO devices". Out of curiosity, how did you notice? Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > > Rename type GuestDeviceAddressPCI to GuestDeviceIdPCI, type > GuestDeviceAddress to GuestDeviceId, and member 'address' to 'id'. > > Document the member properly while there. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > --- > qga/qapi-schema.json | 17 +++++++++-------- > qga/commands-win32.c | 16 ++++++++-------- > 2 files changed, 17 insertions(+), 16 deletions(-)
Philippe Mathieu-Daudé <philmd@redhat.com> writes: > On 10/21/20 9:15 AM, Markus Armbruster wrote: >> Member 'address' is union GuestDeviceAddress with a single branch >> GuestDeviceAddressPCI, containing PCI vendor ID and device ID. This >> is not a PCI address. Type GuestPCIAddress is. Messed up in recent >> commit 2e4211cee4 "qga: add command guest-get-devices for reporting >> VirtIO devices". > > Out of curiosity, how did you notice? I searched for simple unions to remind myself of the size of that problem, and found a new one, i.e. a problem I can still avoid. I started to do PATCH 4, and noticed the other issues. > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Thanks!
On Wed, Oct 21, 2020 at 11:15 AM Markus Armbruster <armbru@redhat.com> wrote:
>
> Member 'address' is union GuestDeviceAddress with a single branch
> GuestDeviceAddressPCI, containing PCI vendor ID and device ID. This
> is not a PCI address. Type GuestPCIAddress is. Messed up in recent
> commit 2e4211cee4 "qga: add command guest-get-devices for reporting
> VirtIO devices".
>
> Rename type GuestDeviceAddressPCI to GuestDeviceIdPCI, type
> GuestDeviceAddress to GuestDeviceId, and member 'address' to 'id'.
>
> Document the member properly while there.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> qga/qapi-schema.json | 17 +++++++++--------
> qga/commands-win32.c | 16 ++++++++--------
> 2 files changed, 17 insertions(+), 16 deletions(-)
>
> diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
> index cec98c7e06..f2c81cda2b 100644
> --- a/qga/qapi-schema.json
> +++ b/qga/qapi-schema.json
> @@ -1257,26 +1257,26 @@
> 'returns': 'GuestOSInfo' }
>
> ##
> -# @GuestDeviceAddressPCI:
> +# @GuestDeviceIdPCI:
> #
> # @vendor-id: vendor ID
> # @device-id: device ID
> #
> # Since: 5.2
> ##
> -{ 'struct': 'GuestDeviceAddressPCI',
> +{ 'struct': 'GuestDeviceIdPCI',
> 'data': { 'vendor-id': 'uint16', 'device-id': 'uint16' } }
>
> ##
> -# @GuestDeviceAddress:
> +# @GuestDeviceId:
> #
> -# Address of the device
> -# - @pci: address of PCI device, since: 5.2
> +# Id of the device
> +# - @pci: PCI ID, since: 5.2
> #
> # Since: 5.2
> ##
> -{ 'union': 'GuestDeviceAddress',
> - 'data': { 'pci': 'GuestDeviceAddressPCI' } }
> +{ 'union': 'GuestDeviceId',
> + 'data': { 'pci': 'GuestDeviceIdPCI' } }
>
> ##
> # @GuestDeviceInfo:
> @@ -1284,6 +1284,7 @@
> # @driver-name: name of the associated driver
> # @driver-date: driver release date in format YYYY-MM-DD
> # @driver-version: driver version
> +# @id: device ID
> #
> # Since: 5.2
> ##
> @@ -1292,7 +1293,7 @@
> 'driver-name': 'str',
> '*driver-date': 'str',
> '*driver-version': 'str',
> - '*address': 'GuestDeviceAddress'
> + '*id': 'GuestDeviceId'
> } }
>
> ##
> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> index 0c3c05484f..879b02b6c3 100644
> --- a/qga/commands-win32.c
> +++ b/qga/commands-win32.c
> @@ -2390,22 +2390,22 @@ GuestDeviceInfoList *qmp_guest_get_devices(Error **errp)
> }
> for (j = 0; hw_ids[j] != NULL; j++) {
> GMatchInfo *match_info;
> - GuestDeviceAddressPCI *address;
> + GuestDeviceIdPCI *id;
> if (!g_regex_match(device_pci_re, hw_ids[j], 0, &match_info)) {
> continue;
> }
> skip = false;
>
> - address = g_new0(GuestDeviceAddressPCI, 1);
> + id = g_new0(GuestDeviceIdPCI, 1);
> vendor_id = g_match_info_fetch(match_info, 1);
> device_id = g_match_info_fetch(match_info, 2);
> - address->vendor_id = g_ascii_strtoull(vendor_id, NULL, 16);
> - address->device_id = g_ascii_strtoull(device_id, NULL, 16);
> + id->vendor_id = g_ascii_strtoull(vendor_id, NULL, 16);
> + id->device_id = g_ascii_strtoull(device_id, NULL, 16);
>
> - device->address = g_new0(GuestDeviceAddress, 1);
> - device->has_address = true;
> - device->address->type = GUEST_DEVICE_ADDRESS_KIND_PCI;
> - device->address->u.pci.data = address;
> + device->id = g_new0(GuestDeviceId, 1);
> + device->has_id = true;
> + device->id->type = GUEST_DEVICE_ID_KIND_PCI;
> + device->id->u.pci.data = id;
>
> g_match_info_free(match_info);
> break;
> --
> 2.26.2
>
© 2016 - 2026 Red Hat, Inc.