[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
|