[libvirt] [PATCHv4 3/5] S390: QEMU driver support for CCW addresses

Daniel P. Berrange berrange at redhat.com
Wed Mar 13 15:40:18 UTC 2013


On Tue, Mar 05, 2013 at 04:44:21PM +0100, Viktor Mihajlovski wrote:
> This commit adds the QEMU driver support for CCW addresses. The
> current QEMU only allows virtio devices to be attached to the
> CCW bus. We named the new capability indicating that support
> QEMU_CAPS_VIRTIO_CCW accordingly.
> 
> The fact that CCW devices can only be assigned to domains with a
> machine type of s390-ccw-virtio requires a few extra checks for
> machine type in qemu_command.c on top of querying
> QEMU_CAPS_VIRTIO_{CCW|S390}.
> 
> The majority of the new functions deals with CCW address generation
> and management.
> 
> Signed-off-by: Viktor Mihajlovski <mihajlov at linux.vnet.ibm.com>
> ---
> V2 Changes
>  - rebase, mainly addressing the rename of qemuCapsXXX to virQEMUCapsXXX 
> 
> V3 Changes
>  - revert machine based capability detection
>  - check the machine type in conjunction with s390-specific capability
>    tests in qemu_command.c
>  - remove useless paranoia check in qemu_command.c
> 
> V4 Changes
>  - replace CCW address field name 'schid' with 'devno'
> 
>  src/qemu/qemu_capabilities.c |    7 +-
>  src/qemu/qemu_capabilities.h |    1 +
>  src/qemu/qemu_command.c      |  279 +++++++++++++++++++++++++++++++++++++++---
>  src/qemu/qemu_command.h      |    6 +
>  src/qemu/qemu_domain.c       |    1 +
>  src/qemu/qemu_domain.h       |    3 +
>  src/qemu/qemu_process.c      |    3 +
>  7 files changed, 280 insertions(+), 20 deletions(-)
> 
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 40022c1..79cfdb3 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -210,6 +210,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
>  
>                "rng-random", /* 130 */
>                "rng-egd",
> +              "virtio-ccw"
>      );
>  
>  struct _virQEMUCaps {
> @@ -1318,6 +1319,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
>      { "usb-hub", QEMU_CAPS_USB_HUB },
>      { "ich9-ahci", QEMU_CAPS_ICH9_AHCI },
>      { "virtio-blk-s390", QEMU_CAPS_VIRTIO_S390 },
> +    { "virtio-blk-ccw", QEMU_CAPS_VIRTIO_CCW },
>      { "sclpconsole", QEMU_CAPS_SCLP_S390 },
>      { "lsi53c895a", QEMU_CAPS_SCSI_LSI },
>      { "virtio-scsi-pci", QEMU_CAPS_VIRTIO_SCSI_PCI },
> @@ -1338,7 +1340,6 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
>      { "rng-egd", QEMU_CAPS_OBJECT_RNG_EGD },
>  };
>  
> -
>  static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBlk[] = {
>      { "multifunction", QEMU_CAPS_PCI_MULTIFUNCTION },
>      { "bootindex", QEMU_CAPS_BOOTINDEX },
> @@ -1393,6 +1394,10 @@ static struct virQEMUCapsObjectTypeProps virQEMUCapsObjectProps[] = {
>        ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBlk) },
>      { "virtio-net-pci", virQEMUCapsObjectPropsVirtioNet,
>        ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioNet) },
> +    { "virtio-blk-ccw", virQEMUCapsObjectPropsVirtioBlk,
> +      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBlk) },
> +    { "virtio-net-ccw", virQEMUCapsObjectPropsVirtioNet,
> +      ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioNet) },
>      { "virtio-blk-s390", virQEMUCapsObjectPropsVirtioBlk,
>        ARRAY_CARDINALITY(virQEMUCapsObjectPropsVirtioBlk) },
>      { "virtio-net-s390", virQEMUCapsObjectPropsVirtioNet,
> diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
> index a895867..5c5dc5a 100644
> --- a/src/qemu/qemu_capabilities.h
> +++ b/src/qemu/qemu_capabilities.h
> @@ -171,6 +171,7 @@ enum virQEMUCapsFlags {
>      QEMU_CAPS_OBJECT_RNG_RANDOM  = 130, /* the rng-random backend for
>                                             virtio rng */
>      QEMU_CAPS_OBJECT_RNG_EGD     = 131, /* EGD protocol daemon for rng */
> +    QEMU_CAPS_VIRTIO_CCW         = 132, /* -device virtio-*-ccw */
>  
>      QEMU_CAPS_LAST,                   /* this must always be the last item */
>  };
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 201fac1..cc64c17 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -799,6 +799,100 @@ no_memory:
>      return -1;
>  }
>  
> +/* S390 ccw bus support */
> +
> +struct _qemuDomainCCWAddressSet {
> +    virHashTablePtr                 defined;

Too much whitespace   ^^^^^^^^^^^^^^^^

> +    virDomainDeviceCCWAddress next;
> +};
> +
> +static char*
> +qemuCCWAddressAsString(virDomainDeviceCCWAddressPtr addr)
> +{
> +    char *addrstr = NULL;
> +
> +    if (virAsprintf(&addrstr, "%x.%x.%04x",

Should we zero-pad the first two fields too, or is it common
to only pad the last field in ccw addresses ?

> +                    addr->cssid,
> +                    addr->ssid,
> +                    addr->devno) < 0) {
> +        virReportOOMError();
> +        return NULL;
> +    }
> +
> +    return addrstr;
> +}
> +

> -static void
> -qemuDomainAssignS390Addresses(virDomainDefPtr def, virQEMUCapsPtr qemuCaps)
> +static int
> +qemuDomainCCWAddressAllocate(virDomainDefPtr def ATTRIBUTE_UNUSED,
> +                             virDomainDeviceDefPtr dev ATTRIBUTE_UNUSED,
> +                             virDomainDeviceInfoPtr info,
> +                             void * data)
> +{
> +    return qemuDomainCCWAddressAssign(info,
> +                                      (qemuDomainCCWAddressSetPtr)data,

You don't need to cast  'void *' in C.

> +                                      true);
> +}
> +
> +static int
> +qemuDomainCCWAddressValidate(virDomainDefPtr def ATTRIBUTE_UNUSED,
> +                             virDomainDeviceDefPtr dev ATTRIBUTE_UNUSED,
> +                             virDomainDeviceInfoPtr info,
> +                             void * data)
> +{
> +    return qemuDomainCCWAddressAssign(info,(qemuDomainCCWAddressSetPtr)data,

Likewise



ACK, since there's no bugs in my comments, just style issues.

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list