[PATCH v2 2/4] conf: domain: support for virtio packed option

Marc Hartmayer mhartmay at linux.ibm.com
Mon Apr 6 13:22:05 UTC 2020


On Mon, Apr 06, 2020 at 03:13 PM +0200, Bjoern Walk <bwalk at linux.ibm.com> wrote:
> Expose the virtio parameter for packed virtqueues as an optional libvirt
> XML attribute to virtio-backed devices, e.g.:
>
>     <interface type='user'>
>       <mac address='00:11:22:33:44:55'/>
>       <model type='virtio'/>
>       <driver packed='on'/>
>     </interface>
>
> If the attribute is omitted, the default value for this attribute is 'off' and
> regular split virtqueues are used.
>
> Reviewed-by: Ján Tomko <jtomko at redhat.com>
> Reviewed-by: Boris Fiuczynski <fiuczy at linux.ibm.com>
> Signed-off-by: Bjoern Walk <bwalk at linux.ibm.com>
> ---
>  docs/schemas/domaincommon.rng |  5 +++++
>  src/conf/domain_conf.c        | 28 ++++++++++++++++++++++++++++
>  src/conf/domain_conf.h        |  1 +
>  3 files changed, 34 insertions(+)
>
> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> index dcf2e09d..12e842ce 100644
> --- a/docs/schemas/domaincommon.rng
> +++ b/docs/schemas/domaincommon.rng
> @@ -5961,6 +5961,11 @@
>          <ref name="virOnOff"/>
>        </attribute>
>      </optional>
> +    <optional>
> +      <attribute name="packed">
> +        <ref name="virOnOff"/>
> +      </attribute>
> +    </optional>
>    </define>
>  
>    <define name="usbmaster">
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 460f8064..51fd5f15 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -1513,6 +1513,16 @@ virDomainVirtioOptionsParseXML(xmlNodePtr driver,
>          }
>          res->ats = val;
>      }
> +    VIR_FREE(str);
> +
> +    if ((str = virXMLPropString(driver, "packed"))) {
> +        if ((val = virTristateSwitchTypeFromString(str)) <= 0) {
> +            virReportError(VIR_ERR_XML_ERROR, "%s",
> +                           _("invalid packed value"));
> +            return -1;
> +        }
> +        res->packed = val;
> +    }
>  
>      return 0;
>  }
> @@ -5092,6 +5102,12 @@ virDomainCheckVirtioOptions(virDomainVirtioOptionsPtr virtio)
>                           "for virtio devices"));
>          return -1;
>      }
> +    if (virtio->packed != VIR_TRISTATE_SWITCH_ABSENT) {
> +        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> +                       _("packed driver option is only supported "
> +                         "for virtio devices"));
> +        return -1;
> +    }
>      return 0;
>  }
>  
> @@ -7378,6 +7394,10 @@ virDomainVirtioOptionsFormat(virBufferPtr buf,
>          virBufferAsprintf(buf, " ats='%s'",
>                            virTristateSwitchTypeToString(virtio->ats));
>      }
> +    if (virtio->packed != VIR_TRISTATE_SWITCH_ABSENT) {
> +        virBufferAsprintf(buf, " packed='%s'",
> +                          virTristateSwitchTypeToString(virtio->packed));
> +    }
>  }
>  
>  
> @@ -22416,6 +22436,14 @@ virDomainVirtioOptionsCheckABIStability(virDomainVirtioOptionsPtr src,
>                         virTristateSwitchTypeToString(src->ats));
>          return false;
>      }
> +    if (src->packed != dst->packed) {
> +        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> +                       _("Target device packed option '%s' does not "
> +                         "match source '%s'"),
> +                       virTristateSwitchTypeToString(dst->packed),
> +                       virTristateSwitchTypeToString(src->packed));
> +        return false;
> +    }
>      return true;
>  }
>  
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index 2038b54c..22f6990e 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -2417,6 +2417,7 @@ struct _virDomainVsockDef {
>  struct _virDomainVirtioOptions {
>      virTristateSwitch iommu;
>      virTristateSwitch ats;
> +    virTristateSwitch packed;
>  };
>  
>  /*
> -- 
> 2.24.1

Reviewed-by: Marc Hartmayer <mhartmay at linux.ibm.com>





More information about the libvir-list mailing list