[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 3/5] qga: win32: add debugging information
From: |
Marc-André Lureau |
Subject: |
Re: [Qemu-devel] [PATCH v3 3/5] qga: win32: add debugging information |
Date: |
Thu, 27 Sep 2018 12:30:22 +0400 |
Hi
On Fri, Sep 7, 2018 at 3:42 PM Tomáš Golembiovský <address@hidden> wrote:
>
> The windows code generaly lacks debug information (compared to posix
> code). This patch adds some related to HW info in guest-get-fsinfo
> command.
>
> Signed-off-by: Tomáš Golembiovský <address@hidden>
> ---
> qga/commands-win32.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> index 9c959122d9..e16c58275e 100644
> --- a/qga/commands-win32.c
> +++ b/qga/commands-win32.c
> @@ -89,6 +89,12 @@ static OpenFlags guest_file_open_modes[] = {
> {"a+b", FILE_GENERIC_APPEND|GENERIC_READ, OPEN_ALWAYS }
> };
>
> +#define g_debug_err(msg) do { \
> + char *suffix = g_win32_error_message(GetLastError()); \
> + g_debug("%s: %s", (msg), suffix); \
> + g_free(suffix); \
> +} while(0)
It's not a good idea to use glib "g_" namespace. "suffix" is fairly
common variable name. Why not make it a function "debug_error" ?
> +
> static OpenFlags *find_open_flag(const char *mode_str)
> {
> int mode;
> @@ -498,6 +504,7 @@ static GuestPCIAddress *get_pci_info(char *guid, Error
> **errp)
> goto out;
> }
>
> + g_debug("enumerating devices");
> dev_info_data.cbSize = sizeof(SP_DEVINFO_DATA);
> for (i = 0; SetupDiEnumDeviceInfo(dev_info, i, &dev_info_data); i++) {
> DWORD addr, bus, slot, func, dev, data, size2;
> @@ -522,6 +529,7 @@ static GuestPCIAddress *get_pci_info(char *guid, Error
> **errp)
> if (g_strcmp0(buffer, dev_name)) {
> continue;
> }
> + g_debug("found device %s", dev_name);
>
> /* There is no need to allocate buffer in the next functions. The
> size
> * is known and ULONG according to
> @@ -530,6 +538,7 @@ static GuestPCIAddress *get_pci_info(char *guid, Error
> **errp)
> */
> if (!SetupDiGetDeviceRegistryProperty(dev_info, &dev_info_data,
> SPDRP_BUSNUMBER, &data, (PBYTE)&bus, size, NULL)) {
> + g_debug_err("failed to get bus");
> break;
> }
>
> @@ -537,6 +546,7 @@ static GuestPCIAddress *get_pci_info(char *guid, Error
> **errp)
> * transformed into device function and number */
> if (!SetupDiGetDeviceRegistryProperty(dev_info, &dev_info_data,
> SPDRP_ADDRESS, &data, (PBYTE)&addr, size, NULL)) {
> + g_debug_err("failed to get address");
> break;
> }
>
> @@ -544,6 +554,7 @@ static GuestPCIAddress *get_pci_info(char *guid, Error
> **errp)
> * This number is typically a user-perceived slot number. */
> if (!SetupDiGetDeviceRegistryProperty(dev_info, &dev_info_data,
> SPDRP_UI_NUMBER, &data, (PBYTE)&slot, size, NULL)) {
> + g_debug_err("failed to get slot");
> break;
> }
>
> @@ -608,6 +619,7 @@ static GuestDiskAddressList *build_guest_disk_info(char
> *guid, Error **errp)
> scsi_ad = &addr;
> char *name = g_strndup(guid, strlen(guid)-1);
>
> + g_debug("getting disk info for: %s", name);
> vol_h = CreateFile(name, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING,
> 0, NULL);
> if (vol_h == INVALID_HANDLE_VALUE) {
> @@ -615,6 +627,7 @@ static GuestDiskAddressList *build_guest_disk_info(char
> *guid, Error **errp)
> goto out_free;
> }
>
> + g_debug("getting bus type");
> bus = get_disk_bus_type(vol_h, errp);
> if (bus < 0) {
> goto out_close;
> @@ -622,6 +635,7 @@ static GuestDiskAddressList *build_guest_disk_info(char
> *guid, Error **errp)
>
> disk = g_malloc0(sizeof(*disk));
> disk->bus_type = find_bus_type(bus);
> + g_debug("bus type %d", disk->bus_type);
> if (bus == BusTypeScsi || bus == BusTypeAta || bus == BusTypeRAID
> #if (_WIN32_WINNT >= 0x0600)
> /* This bus type is not supported before Windows Server 2003 SP1
> */
> @@ -631,6 +645,7 @@ static GuestDiskAddressList *build_guest_disk_info(char
> *guid, Error **errp)
> /* We are able to use the same ioctls for different bus types
> * according to Microsoft docs
> *
> https://technet.microsoft.com/en-us/library/ee851589(v=ws.10).aspx */
> + g_debug("getting pci-controller info");
> if (DeviceIoControl(vol_h, IOCTL_SCSI_GET_ADDRESS, NULL, 0, scsi_ad,
> sizeof(SCSI_ADDRESS), &len, NULL)) {
> Error *local_err = NULL;
> --
> 2.18.0
>