[PATCH 1/3] qemu: agent: Store CCW address in qemuAgentDiskInfo if provided by the guest

Michal Privoznik mprivozn at redhat.com
Thu Dec 10 10:41:52 UTC 2020


On 11/25/20 12:06 PM, Thomas Huth wrote:
> Newer versions of the QEMU guest agent will provide the CCW address
> of devices on s390x. Store this information in the qemuAgentDiskInfo
> so that we can use this later.
> 
> We also map the CSSID 0 from the guest to the value 0xfe on the host,
> see https://www.qemu.org/docs/master/system/s390x/css.html for details.
> 
> Signed-off-by: Thomas Huth <thuth at redhat.com>
> ---
>   src/qemu/qemu_agent.c | 11 +++++++++++
>   src/qemu/qemu_agent.h |  2 ++
>   2 files changed, 13 insertions(+)
> 
> diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
> index 230253d404..d7ad20376c 100644
> --- a/src/qemu/qemu_agent.c
> +++ b/src/qemu/qemu_agent.c
> @@ -1868,6 +1868,7 @@ qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
>       for (i = 0; i < fsinfo->ndisks; i++) {
>           virJSONValuePtr jsondisk = virJSONValueArrayGet(jsondisks, i);
>           virJSONValuePtr pci;
> +        virJSONValuePtr ccw;
>           qemuAgentDiskInfoPtr disk;
>           const char *val;
>   
> @@ -1916,6 +1917,16 @@ qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
>           GET_DISK_ADDR(pci, &disk->pci_controller.bus, "bus");
>           GET_DISK_ADDR(pci, &disk->pci_controller.slot, "slot");
>           GET_DISK_ADDR(pci, &disk->pci_controller.function, "function");
> +
> +        if ((ccw = virJSONValueObjectGet(jsondisk, "ccw-address"))) {
> +            disk->has_ccw_address = true;
> +            GET_DISK_ADDR(ccw, &disk->ccw_addr.cssid, "cssid");
> +            if (disk->ccw_addr.cssid == 0)  /* Guest CSSID 0 is 0xfe on host */
> +                disk->ccw_addr.cssid = 0xfe;
> +            GET_DISK_ADDR(ccw, &disk->ccw_addr.ssid, "ssid");
> +            GET_DISK_ADDR(ccw, &disk->ccw_addr.devno, "devno");
> +        }
> +
>   #undef GET_DISK_ADDR
>       }
>   
> diff --git a/src/qemu/qemu_agent.h b/src/qemu/qemu_agent.h
> index 7cbab489ec..37b482f3b2 100644
> --- a/src/qemu/qemu_agent.h
> +++ b/src/qemu/qemu_agent.h
> @@ -77,6 +77,8 @@ struct _qemuAgentDiskInfo {
>       unsigned int target;
>       unsigned int unit;
>       char *devnode;
> +    bool has_ccw_address;
> +    virDomainDeviceCCWAddress ccw_addr;
>   };
>   
>   typedef struct _qemuAgentFSInfo qemuAgentFSInfo;
> 

I needed to rebase this, because earlier I've merged a patch from 
Marc-Andre that moved the internals of qemuAgentGetFSInfoFillDisks() 
into a separate function.

Reviewed-by: Michal Privoznik <mprivozn at redhat.com>

Michal




More information about the libvir-list mailing list