[libvirt] [PATCH v6 5/6] qemu: parse qemu command line for USB keyboard

Li Zhang zhlcindy at gmail.com
Fri Feb 14 02:48:58 UTC 2014


On 2014年02月13日 20:37, Ján Tomko wrote:
> On 02/13/2014 09:48 AM, Li Zhang wrote:
>> From: Li Zhang <zhlcindy at linux.vnet.ibm.com>
>>
>> This patch is to format qemu command line and xen driver for USB keyboard
>> and add test cases for it.
>>
>> Signed-off-by: Li Zhang <zhlcindy at linux.vnet.ibm.com>
>> ---
>>   src/qemu/qemu_command.c                            | 41 ++++++++++++++++------
>>   src/xenxs/xen_sxpr.c                               | 27 +++++++++-----
>>   src/xenxs/xen_xm.c                                 | 30 +++++++++++-----
>>   .../qemuxml2argv-pseries-usb-kbd.args              |  9 +++++
>>   .../qemuxml2argv-pseries-usb-kbd.xml               | 19 ++++++++++
>>   tests/qemuxml2argvtest.c                           |  3 ++
>>   6 files changed, 103 insertions(+), 26 deletions(-)
>>   create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
>>   create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml
> I'd split the patch in two - one for qemu, one for xen.
>
>
>> diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c
>> index d514725..79cc20e 100644
>> --- a/src/xenxs/xen_sxpr.c
>> +++ b/src/xenxs/xen_sxpr.c
>> @@ -724,21 +724,23 @@ xenParseSxprUSB(virDomainDefPtr def,
>>               tmp = sexpr_node(node, "usbdevice");
>>               if (tmp && *tmp) {
>>                   if (STREQ(tmp, "tablet") ||
>> -                    STREQ(tmp, "mouse")) {
>> +                    STREQ(tmp, "mouse") ||
>> +                    STREQ(tmp, "keyboard")) {
>>                       virDomainInputDefPtr input;
>>                       if (VIR_ALLOC(input) < 0)
>>                           goto error;
>>                       input->bus = VIR_DOMAIN_INPUT_BUS_USB;
>>                       if (STREQ(tmp, "tablet"))
>>                           input->type = VIR_DOMAIN_INPUT_TYPE_TABLET;
>> -                    else
>> +                    else if (STREQ(tmp, "mouse"))
>>                           input->type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
>> +                    else
>> +                        input->type = VIR_DOMAIN_INPUT_TYPE_KBD;
>>   
>> -                    if (VIR_REALLOC_N(def->inputs, def->ninputs+1) < 0) {
>> +                    if (VIR_APPEND_ELEMENT(def->inputs, def->ninputs, input) < 0) {
>>                           VIR_FREE(input);
>>                           goto error;
>>                       }
>> -                    def->inputs[def->ninputs++] = input;
>>                   } else {
>>                       /* XXX Handle other non-input USB devices later */
>>                   }
>> @@ -2144,15 +2146,24 @@ xenFormatSxprInput(virDomainInputDefPtr input,
>>           return 0;
>>   
>>       if (input->type != VIR_DOMAIN_INPUT_TYPE_MOUSE &&
>> -        input->type != VIR_DOMAIN_INPUT_TYPE_TABLET) {
>> +        input->type != VIR_DOMAIN_INPUT_TYPE_TABLET &&
>> +        input->type != VIR_DOMAIN_INPUT_TYPE_KBD) {
>>           virReportError(VIR_ERR_INTERNAL_ERROR,
>>                          _("unexpected input type %d"), input->type);
>>           return -1;
>>       }
>>   
>> -    virBufferAsprintf(buf, "(usbdevice %s)",
>> -                      input->type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
>> -                      "mouse" : "tablet");
>> +    switch (input->type) {
>> +        case VIR_DOMAIN_INPUT_TYPE_MOUSE:
>> +            virBufferAsprintf(buf, "(usbdevice %s)","mouse")
>> +            break;
>> +        case VIR_DOMAIN_INPUT_TYPE_TABLET:
>> +            virBufferAsprintf(buf, "(usbdevice %s)","tablet")
>> +            break;
>> +        case VIR_DOMAIN_INPUT_TYPE_KBD:
>> +            virBufferAsprintf(buf, "(usbdevice %s)","keyboard")
>> +            break;
>> +    }
> In all three cases there is a space missing between arguments and a semicolon
> missing at the end.

ah, sorry for that. :(

>
>>   
>>       return 0;
>>   }
>> diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
>> index 5e89876..b448e99 100644
>> --- a/src/xenxs/xen_xm.c
>> +++ b/src/xenxs/xen_xm.c
>> @@ -886,14 +886,18 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
>>               goto cleanup;
>>           if (str &&
>>               (STREQ(str, "tablet") ||
>> -             STREQ(str, "mouse"))) {
>> +             STREQ(str, "mouse") ||
>> +             STREQ(str, "keyboard"))) {
>>               virDomainInputDefPtr input;
>>               if (VIR_ALLOC(input) < 0)
>>                   goto cleanup;
>>               input->bus = VIR_DOMAIN_INPUT_BUS_USB;
>> -            input->type = STREQ(str, "tablet") ?
>> -                VIR_DOMAIN_INPUT_TYPE_TABLET :
>> -                VIR_DOMAIN_INPUT_TYPE_MOUSE;
>> +            if (STREQ(str, "mouse"))
>> +                input->type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
>> +            else if (STREQ(str, "tablet"))
>> +                input->type = VIR_DOMAIN_INPUT_TYPE_TABLET;
>> +            else (STREQ(str, "keyboard"))
> s/else/else if/

I will change it.
>
>> +                input->type = VIR_DOMAIN_INPUT_TYPE_KBD;
>>               if (VIR_ALLOC_N(def->inputs, 1) < 0) {
>>                   virDomainInputDefFree(input);
>>                   goto cleanup;
> ACK to the QEMU part. The xen part looks fine to me.
>
> Jan
>




More information about the libvir-list mailing list