[PATCH V2 1/3] Xen: Add support for qemu command-line passthrough

Jim Fehlig jfehlig at suse.com
Tue Aug 25 16:05:01 UTC 2020


On 8/25/20 9:15 AM, Michal Privoznik wrote:
> On 8/5/20 12:13 AM, Jim Fehlig wrote:
>> Xen supports passing arbitrary arguments to the QEMU device model via
>> the 'extra' member of the public libxl_domain_build_info structure.
>> This patch adds a 'xen' namespace extension, similar to the QEMU and
>> bhyve drivers, to map arbitrary arguments to the 'extra' member. Only
>> passthrough of arguments is supported. Passthrough of environment
>> variables or capabilities adjustments is not supported.
>>
>> Signed-off-by: Jim Fehlig <jfehlig at suse.com>
>> ---
>>   docs/drvxen.html.in           | 29 ++++++++++++
>>   docs/schemas/domaincommon.rng | 17 +++++++
>>   src/libxl/libxl_conf.c        | 10 ++++-
>>   src/libxl/libxl_conf.h        |  8 ++++
>>   src/libxl/libxl_domain.c      | 84 +++++++++++++++++++++++++++++++++++
>>   src/libxl/libxl_domain.h      |  1 +
>>   6 files changed, 148 insertions(+), 1 deletion(-)
>>
> 
> 
>> diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
>> index d9fcde4364..f6bc8211b3 100644
>> --- a/src/libxl/libxl_domain.c
>> +++ b/src/libxl/libxl_domain.c
> 
>> +static int
>> +libxlDomainDefNamespaceParse(xmlXPathContextPtr ctxt,
>> +                             void **data)
>> +{
>> +    libxlDomainXmlNsDefPtr nsdata = NULL;
>> +    g_autofree xmlNodePtr *nodes = NULL;
>> +    ssize_t nnodes;
>> +    size_t i;
>> +    int ret = -1;
>> +
>> +    if ((nnodes = virXPathNodeSet("./xen:commandline/xen:arg", ctxt, &nodes)) 
>> < 0)
>> +        return -1;
>> +
>> +    if (nnodes == 0)
>> +        return 0;
>> +
>> +    nsdata = g_new0(libxlDomainXmlNsDef, 1);
>> +    nsdata->args = g_new0(char *, nnodes + 1);
>> +
>> +    for (i = 0; i < nnodes; i++) {
>> +        if (!(nsdata->args[nsdata->num_args++] = virXMLPropString(nodes[i], 
>> "value"))) {
>> +            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> +                           _("No device model command-line argument 
>> specified"));
>> +            goto cleanup;
>> +        }
>> +    }
>> +
>> +    if (nsdata->num_args > 0)
>> +        *data = g_steal_pointer(&nsdata);
> 
> This if () looks redundant to me. The for-loop above in combination with nnodes 
> = 0 check ensures that num_args is greater than zero here.

Yes, good point. I'll remove it before pushing.

Thanks a lot for reviewing the series!

Regards,
Jim





More information about the libvir-list mailing list