[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH V4 5/7] xl: add pvusb commands




>>> On 6/12/2015 at 03:37 PM, in message <557A8C57.1040108@xxxxxxxx>, Juergen 
>>> Gross
<jgross@xxxxxxxx> wrote: 
> On 06/10/2015 05:20 AM, Chunyan Liu wrote: 
> > Add pvusb commands: usb-ctrl-attach, usb-ctrl-detach, usb-list, 
> > usb-attach and usb-detach. 
> > 
> > To attach a usb device to guest through pvusb, one could follow 
> > following example: 
> > 
> >   #xl usb-ctrl-attach test_vm version=1 num_ports=8 
> > 
> >   #xl usb-list test_vm 
> >   will show the usb controllers and port usage under the domain. 
> > 
> >   #xl usb-assignable-list 
> >   will list assignable USB devices 
>  
> xl usb-assignable-list is not part of this patch. Either merge this 
> patch and the following one, or describe the command in the next patch. 

Oh, yes, I forget to split.

>  
> > 
> >   #xl usb-attach test_vm 1.6 
> >   will find the first usable controller:port, and attach usb 
> >   device whose bus address is 1.6 (busnum is 1, devnum is 6) 
> >   to it. One could also specify which <controller> and which <port>. 
> > 
> >   #xl usb-detach test_vm 1.6 
> > 
> >   #xl usb-ctrl-detach test_vm dev_id 
> >   will destroy the controller with specified dev_id. Dev_id 
> >   can be traced in usb-list info. 
> > 
> > Signed-off-by: Chunyan Liu <cyliu@xxxxxxxx> 
> > Signed-off-by: Simon Cao <caobosimon@xxxxxxxxx> 
> > --- 
> >   docs/man/xl.pod.1         |  38 +++++++ 
> >   tools/libxl/xl.h          |   5 + 
> >   tools/libxl/xl_cmdimpl.c  | 251  
> ++++++++++++++++++++++++++++++++++++++++++++++ 
> >   tools/libxl/xl_cmdtable.c |  25 +++++ 
> >   4 files changed, 319 insertions(+) 
> > 
>  
> ... 
>  
> > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c 
> > index c858068..b29d0fc 100644 
> > --- a/tools/libxl/xl_cmdimpl.c 
> > +++ b/tools/libxl/xl_cmdimpl.c 
> > @@ -3219,6 +3219,257 @@ int main_cd_insert(int argc, char **argv) 
> >       return 0; 
> >   } 
> > 
> > +static void usbinfo_print(libxl_device_usb *usbs, int num) { 
> > +    int i; 
>  
> Blank line missing. 
>  
> > +    if (usbs == NULL) 
> > +         return; 
> > +    for (i = 0; i < num; i++) { 
> > +        libxl_usbinfo usbinfo; 
>  
> Blank line missing. 
>  
> > +        libxl_usbinfo_init(&usbinfo); 
> > + 
> > +        if (usbs[i].port) 
> > +            printf("  Port %d:", usbs[i].port); 
> > +        if (!libxl_device_usb_getinfo(ctx, &usbs[i], &usbinfo)) { 
> > +            printf(" Bus %03x Device %03x: ID %04x:%04x %s %s\n", 
> > +                    usbinfo.busnum, usbinfo.devnum, 
> > +                    usbinfo.idVendor, usbinfo.idProduct, 
> > +                    usbinfo.manuf ?: "", usbinfo.prod ?: ""); 
>  
> Is it really possible for a device to be assigned but without a port 
> number? 

For assigned usb device, it's not possible. But this function will be called
in two places, one is to list assigned usb devices in 'xl usb-list'; another
is to list assignable usb devices in 'xl usb-assignable-list'. If
'usb-assignable-list' is not taken, this could be improved.

>  
> I'd rather combine the two if's and printf statements. This would avoid 
> the case where "  Port 1: Port 2: ..." is printed due to a failing 
> libxl_device_usb_getinfo() for port 1. 
>  
> > +        } 
> > +        libxl_usbinfo_dispose(&usbinfo); 
> > +    } 
> > +} 
> > + 
> > +int main_usbctrl_attach(int argc, char **argv) 
> > +{ 
> > +    uint32_t domid; 
> > +    int opt; 
> > +    char *oparg; 
> > +    libxl_device_usbctrl usbctrl; 
> > + 
> > +    SWITCH_FOREACH_OPT(opt, "", NULL, "usb-ctrl-attach", 1) { 
> > +        /* No options */ 
> > +    } 
> > + 
> > +    domid = find_domain(argv[optind++]); 
> > + 
> > +    libxl_device_usbctrl_init(&usbctrl); 
> > + 
> > +    while (argc > optind) { 
> > +        if (MATCH_OPTION("type", argv[optind], oparg)) { 
> > +            if (!strcmp(oparg, "pv")) { 
> > +               usbctrl.protocol = LIBXL_USB_PROTOCOL_PV; 
> > +            } else { 
> > +               fprintf(stderr, "unsupported type `%s'\n", oparg); 
> > +               exit(-1); 
> > +            } 
> > +        } else if (MATCH_OPTION("version", argv[optind], oparg)) { 
> > +            usbctrl.version = atoi(oparg); 
>  
> Shouldn't you check for valid versions? 

OK. Will check.

>  
> > +        } else if (MATCH_OPTION("ports", argv[optind], oparg)) { 
> > +            usbctrl.ports = atoi(oparg); 
>  
> Same here for number of ports. Otherwise you could blow up xenstore by 
> e.g. specifying 2 billion ports here. 

Will add check. What's the supported max ports? 

>  
> > +        } else { 
> > +            fprintf(stderr, "unrecognized argument `%s'\n", argv[optind]); 
> > +            exit(-1); 
> > +        } 
> > +        optind++; 
> > +    } 
> > + 
> > +    if (usbctrl.protocol == LIBXL_USB_PROTOCOL_AUTO) 
> > +        usbctrl.protocol = LIBXL_USB_PROTOCOL_PV; 
>  
> Is this really necessary? You do it in libxl, too. 
Yes, seems not necessary. Anyway (from config file or hotplug), it will
call libxl_device_usbctrl_setdefault and do that.

Thanks,
Chunyan
>  
>  
> Juergen 
>  
> _______________________________________________ 
> Xen-devel mailing list 
> Xen-devel@xxxxxxxxxxxxx 
> http://lists.xen.org/xen-devel 
>  
>  


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.