[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v6 2/2] xl: Add commands for usb hot-plug
On 04/24/2013 01:45 PM, Ian Campbell wrote: On Fri, 2013-04-19 at 16:59 +0100, George Dunlap wrote:+ +int main_usb_attach(int argc, char **argv) +{ + uint32_t domid = INVALID_DOMID; + int opt = 0, rc; + char *device = NULL; + + SWITCH_FOREACH_OPT(opt, "", NULL, "usb-attach", 2) { + /* No options */ + } + + domid = find_domain(argv[optind]); + device = argv[optind + 1]; + + if (domid == INVALID_DOMID) { + fprintf(stderr, "Must specify domid\n\n"); + help("usb-attach"); + return 2; + }find_domain won't return in this case, so no need to worry about it yourself. I find that kind of scary, actually... +int main_usb_detach(int argc, char **argv) +{ + uint32_t domid = INVALID_DOMID; + int opt = 0, rc; + char *device = NULL; + int type = 0; + + SWITCH_FOREACH_OPT(opt, "", NULL, "usb-detach", 2) { + /* No options */ + } + + domid = find_domain(argv[optind]); + device = argv[optind + 1]; + + if (domid == INVALID_DOMID) { + fprintf(stderr, "Must specify domid\n\n"); + help("usb-detach"); + return 2; + }Same again.+ + rc = usb_detach(domid, type, device); + if (rc < 0) + return 1; + else + return 0; +} + +static void usb_list(uint32_t domid) +{ + libxl_device_usb *dev; + int num, i; + + dev = libxl_device_usb_list(ctx, domid, &num); + if (dev == NULL) + return; + printf("protocol backend type device\n"); + for (i = 0; i < num; i++) { + printf("%8s ", (dev[i].protocol==LIBXL_USB_PROTOCOL_PV)?"pv":"dm");You can use libxl_usb_protocol_to_string here. Could do, but I didn't necessarily want the long version ("devicemodel"). + printf("%7d ", dev[i].backend_domid); + printf("%7s ", (dev[i].type==LIBXL_DEVICE_USB_TYPE_HOSTDEV)?"hostdev":"unknown");libxl_device_usb_type_to_string. Will that print "unknown" in the case of unknown device types? + if (dev[i].type == LIBXL_DEVICE_USB_TYPE_HOSTDEV) + printf("%03d.%03d", + dev[i].u.hostdev.hostbus, + dev[i].u.hostdev.hostaddr); + printf("\n"); + } + free(dev);You leak the content of the devices, you need to call libxl_device_usb_dispose on each, or better define libxl_device_usb_list_free (this is inconsistently provided by other devices, but may as well get it right for new code). Ack. -George _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |