All of lore.kernel.org
 help / color / mirror / Atom feed
* add the two command to add or delete the usb device instead of do it in QEMU console
@ 2009-10-15  8:12 James Song
  2009-10-15  8:46 ` Keir Fraser
  0 siblings, 1 reply; 8+ messages in thread
From: James Song @ 2009-10-15  8:12 UTC (permalink / raw)
  To: xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 6179 bytes --]

Add the two commands( "xm usb-add" and "xm usb-del") to add or delete the usb device instead of do it in QEMU console.
 
Signed-off-by: James Song Wei <jsong@novell.com>
diff -r 41dbce3c96ea tools/ioemu-remote/xenstore.c
--- a/tools/ioemu-remote/xenstore.c     Tue Oct 13 14:23:10 2009 +0800
+++ b/tools/ioemu-remote/xenstore.c     Wed Oct 14 15:10:24 2009 +0800
@@ -908,6 +908,7 @@
     char *path = NULL, *command = NULL, *par = NULL;
     unsigned int len;
     extern char* snapshot_name;
+    extern void do_usb_add(const char *devname);
 
     if (pasprintf(&path,
                   "/local/domain/0/device-model/%u/command", domid) == -1) {
@@ -932,6 +933,34 @@
         }
 
         snapshot_name = xs_read(xsh, XBT_NULL, path, &len);
+    } else if (!strncmp(command, "usb-add", len)) {
+        fprintf(logfile, "dm-command: usb-add a usb device\n");
+        if (pasprintf(&path,
+                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
+            fprintf(logfile, "out of memory reading dm command parameter\n");
+            goto out;
+        }
+        par = xs_read(xsh, XBT_NULL, path, &len);
+        fprintf(logfile, "dm-command: usb-add a usb device: %s \n", par);
+        if (!par)
+            goto out;
+        do_usb_add(par);
+        xenstore_record_dm_state("usb-added");
+        fprintf(logfile, "dm-command: finish usb-add a usb device:%s\n",par);
+    } else if (!strncmp(command, "usb-del", len)) {
+        fprintf(logfile, "dm-command: usb-del a usb device\n");
+        if (pasprintf(&path,
+                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
+            fprintf(logfile, "out of memory reading dm command parameter\n");
+            goto out;
+        }
+        par = xs_read(xsh, XBT_NULL, path, &len);
+        fprintf(logfile, "dm-command: usb-del a usb device: %s \n", par);
+        if (!par)
+            goto out;
+        do_usb_del(par);
+        xenstore_record_dm_state("usb-deleted");
+        fprintf(logfile, "dm-command: finish usb-del a usb device:%s\n",par);
     } else if (!strncmp(command, "snapshot-delete", len)) {
         if (pasprintf(&path,
                 "/local/domain/0/device-model/%u/parameter", domid) == -1) {
diff -r 41dbce3c96ea tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py       Tue Oct 13 14:23:10 2009 +0800
+++ b/tools/python/xen/xend/XendDomain.py       Wed Oct 14 15:10:24 2009 +0800
@@ -1561,6 +1561,28 @@
             raise XendError("Unable to read snapshot file file %s: %s" %
                             (snap_file, ex[1]))
 
+    def domain_usb_add(self, domid, dev_id):
+        dominfo = self.domain_lookup_nr(domid)
+        if not dominfo:
+            raise XendInvalidDomain(str(domid))
+
+        if dominfo._stateGet() != DOM_STATE_HALTED:
+            dominfo.image.signalDeviceModel("usb-add",
+                "usb-added", dev_id)
+        else:
+            log.debug("error: Domain is not running!")
+
+    def domain_usb_del(self, domid, dev_id):
+        dominfo = self.domain_lookup_nr(domid)
+        if not dominfo:
+            raise XendInvalidDomain(str(domid))
+
+        if dominfo._stateGet() != DOM_STATE_HALTED:
+            dominfo.image.signalDeviceModel("usb-del",
+                "usb-deleted", dev_id)
+        else:
+            log.debug("error: Domain is not running!")
+ 
     def domain_snapshot_delete(self, domid, name):
         """Delete domain snapshot
 
diff -r 41dbce3c96ea tools/python/xen/xend/server/SrvDomain.py
--- a/tools/python/xen/xend/server/SrvDomain.py Tue Oct 13 14:23:10 2009 +0800
+++ b/tools/python/xen/xend/server/SrvDomain.py Wed Oct 14 15:10:24 2009 +0800
@@ -120,6 +120,20 @@
     def do_snapshot_delete(self, _, req):
         return self.xd.domain_snapshot_delete(self.dom.getName(), req.args['name'][0])
 
+    def op_usb_add(self, op, req):
+        self.acceptCommand(req)
+        return req.threadRequest(self.do_usb_add, op, req)
+
+    def do_usb_add(self, _, req):
+        return self.xd.domain_usb_add(self.dom.getName(), req)
+ 
+    def op_usb_del(self, op, req):
+        self.acceptCommand(req)
+        return req.threadRequest(self.do_usb_add, op, req)
+
+    def do_usb_del(self, _, req):
+        return self.xd.domain_usb_add(self.dom.getName(), req)
+
     def op_dump(self, op, req):
         self.acceptCommand(req)
         return req.threadRequest(self.do_dump, op, req)
diff -r 41dbce3c96ea tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Tue Oct 13 14:23:10 2009 +0800
+++ b/tools/python/xen/xm/main.py       Wed Oct 14 15:10:24 2009 +0800
@@ -168,6 +168,9 @@
     'vcpu-set'    : ('<Domain> <vCPUs>',
                      'Set the number of active VCPUs for allowed for the'
                      ' domain.'),
+    #usb
+    'usb-add'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Add the usb device to FV VM.'),
+    'usb-del'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Delete the usb device to FV VM.'),
 
     # device commands
 
@@ -325,6 +328,8 @@
     "top",
     "unpause",
     "uptime",
+    "usb-add",
+    "usb-del",
     "vcpu-set",
     ]
 
@@ -361,6 +366,8 @@
     "top",
     "unpause",
     "uptime",
+    "usb-add",
+    "usb-del",
     "vcpu-list",
     "vcpu-pin",
     "vcpu-set",
@@ -1500,6 +1507,14 @@
         mem_target = int_unit(args[1], 'm')
         server.xend.domain.setMemoryTarget(dom, mem_target)
 
+def xm_usb_add(args):
+    arg_check(args, "usb-add", 2)
+    server.xend.domain.usb_add(args[0],args[1])
+
+def xm_usb_del(args):
+    arg_check(args, "usb-del", 2)
+    server.xend.domain.usb_del(args[0],args[1])
+
 def xm_vcpu_set(args):
     arg_check(args, "vcpu-set", 2)
 
@@ -2990,6 +3005,9 @@
     "scsi-attach": xm_scsi_attach,
     "scsi-detach": xm_scsi_detach,
     "scsi-list": xm_scsi_list,
+    #usb
+    "usb-add": xm_usb_add,
+    "usb-del": xm_usb_del,
     }
 
 ## The commands supported by a separate argument parser in xend.xm.
 
 
 

[-- Attachment #1.2: Type: text/html, Size: 11306 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: add the two command to add or delete the usb device instead of do it in QEMU console
  2009-10-15  8:12 James Song
@ 2009-10-15  8:46 ` Keir Fraser
  2009-10-19  2:48   ` James Song
  2009-10-19 14:36   ` Ian Jackson
  0 siblings, 2 replies; 8+ messages in thread
From: Keir Fraser @ 2009-10-15  8:46 UTC (permalink / raw)
  To: James Song, xen-devel@lists.xensource.com

On 15/10/2009 09:12, "James Song" <jsong@novell.com> wrote:

> Add the two commands( "xm usb-add" and "xm usb-del") to add or delete the usb
> device instead of do it in QEMU console.
>  
> Signed-off-by: James Song Wei <jsong@novell.com>

Again, given the weird encoding of your email this patch will probably turn
out to be corrupted. But also you cannot patch tools/iomu-remote/ -- ioemu
patches are to be applied to the separate qemu-xen-unstable.git repository
and sent to the list cc'ed to Ian Jackson who maintains that repository.

 -- Keir

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: add the two command to add or delete the usb device instead of do it in QEMU console
  2009-10-15  8:46 ` Keir Fraser
@ 2009-10-19  2:48   ` James Song
  2009-10-19 14:36   ` Ian Jackson
  1 sibling, 0 replies; 8+ messages in thread
From: James Song @ 2009-10-19  2:48 UTC (permalink / raw)
  To: ian.jackson, Keir Fraser, xen-devel@lists.xensource.com


[-- Attachment #1.1: Type: text/plain, Size: 7191 bytes --]

I rewrite the patch, pls check. 
 
Thanks,
-James
 
Signed-off-by: James Song Wei <jsong@novell.com>
 
diff -r 0705efd9c69e tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py       Fri Oct 16 09:04:53 2009 +0100
+++ b/tools/python/xen/xend/XendDomain.py       Mon Oct 19 10:15:06 2009 +0800
@@ -1522,6 +1522,45 @@
             raise XendError("can't write guest state file %s: %s" %
                             (dst, ex[1]))
 
+    def domain_usb_add(self, domid, dev_id):
+        dominfo = self.domain_lookup_nr(domid)
+        if not dominfo:
+            raise XendInvalidDomain(str(domid))
+
+        usb = dominfo.info['platform'].get('usb')
+        if not usb:
+            raise XendError("Can't add usb device to a guest with usb disabled in configure file")
+
+        hvm = dominfo.info.is_hvm()
+        if not hvm:
+            raise XendError("Can't add usb device to a non-hvm guest")
+
+        if dominfo._stateGet() != DOM_STATE_HALTED:
+            dominfo.image.signalDeviceModel("usb-add",
+                "usb-added", dev_id)
+        else:
+            log.debug("error: Domain is not running!")
+
+
+    def domain_usb_del(self, domid, dev_id):
+        dominfo = self.domain_lookup_nr(domid)
+        if not dominfo:
+            raise XendInvalidDomain(str(domid))
+
+        usb = dominfo.info['platform'].get('usb')
+        if not usb:
+            raise XendError("Can't add usb device to a guest with usb disabled in configure file")
+
+        hvm = dominfo.info.is_hvm()
+        if not hvm:
+            raise XendError("Can't del usb to a non-hvm guest")
+
+        if dominfo._stateGet() != DOM_STATE_HALTED:
+            dominfo.image.signalDeviceModel("usb-del",
+                "usb-deleted", dev_id)
+        else:
+            log.debug("error: Domain is not running!")
+
     def domain_pincpu(self, domid, vcpu, cpumap):
         """Set which cpus vcpu can use
 
diff -r 0705efd9c69e tools/python/xen/xend/server/SrvDomain.py
--- a/tools/python/xen/xend/server/SrvDomain.py Fri Oct 16 09:04:53 2009 +0100
+++ b/tools/python/xen/xend/server/SrvDomain.py Mon Oct 19 10:15:06 2009 +0800
@@ -225,6 +225,19 @@
         self.acceptCommand(req)
         return self.xd.domain_reset(self.dom.getName())
 
+    def op_usb_add(self, op, req):
+        self.acceptCommand(req)
+        return req.threadRequest(self.do_usb_add, op, req)
+
+    def do_usb_add(self, _, req):
+        return self.xd.domain_usb_add(self.dom.getName(), req)
+ 
+    def op_usb_del(self, op, req):
+        self.acceptCommand(req)
+        return req.threadRequest(self.do_usb_add, op, req)
+
+    def do_usb_del(self, _, req):
+        return self.xd.domain_usb_add(self.dom.getName(), req)
 
     def render_POST(self, req):
         return self.perform(req)
diff -r 0705efd9c69e tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Fri Oct 16 09:04:53 2009 +0100
+++ b/tools/python/xen/xm/main.py       Mon Oct 19 10:15:06 2009 +0800
@@ -161,6 +161,9 @@
     'vcpu-set'    : ('<Domain> <vCPUs>',
                      'Set the number of active VCPUs for allowed for the'
                      ' domain.'),
+    #usb
+    'usb-add'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Add the usb device to FV VM.'),
+    'usb-del'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Delete the usb device to FV VM.'),
 
     # device commands
 
@@ -350,6 +353,8 @@
     "top",
     "unpause",
     "uptime",
+    "usb-add",
+    "usb-del",
     "vcpu-set",
     ]
 
@@ -382,6 +387,8 @@
     "top",
     "unpause",
     "uptime",
+    "usb-add",
+    "usb-del",
     "vcpu-list",
     "vcpu-pin",
     "vcpu-set",
@@ -1473,6 +1480,14 @@
     else:
         mem_target = int_unit(args[1], 'm')
         server.xend.domain.setMemoryTarget(dom, mem_target)
+
+def xm_usb_add(args):
+    arg_check(args, "usb-add", 2)
+    server.xend.domain.usb_add(args[0],args[1])
+
+def xm_usb_del(args):
+    arg_check(args, "usb-del", 2)
+    server.xend.domain.usb_del(args[0],args[1])
 
 def xm_vcpu_set(args):
     arg_check(args, "vcpu-set", 2)
@@ -3311,6 +3326,9 @@
     "tmem-set": xm_tmem_set,
     "tmem-freeable": xm_tmem_freeable_mb,
     "tmem-shared-auth": xm_tmem_shared_auth,
+    #usb
+    "usb-add": xm_usb_add,
+    "usb-del": xm_usb_del,
     }
 
 ## The commands supported by a separate argument parser in xend.xm.
 
 
--------------------------For qemu-xen-unstable -----------------------------------------------------
 
 
Signed-off-by: James Song Wei <jsong@novell.com>
 
diff --git a/xenstore.c b/xenstore.c
index da278f4..694152a 100644
--- a/xenstore.c
+++ b/xenstore.c
@@ -752,6 +752,34 @@ static void xenstore_process_dm_command_event(void)
     } else if (!strncmp(command, "continue", len)) {
         fprintf(logfile, "dm-command: continue after state save\n");
         xen_pause_requested = 0;
+    } else if (!strncmp(command, "usb-add", len)) {
+        fprintf(logfile, "dm-command: usb-add a usb device\n");
+        if (pasprintf(&path,
+                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
+            fprintf(logfile, "out of memory reading dm command parameter\n");
+            goto out;
+        }
+        par = xs_read(xsh, XBT_NULL, path, &len);
+        fprintf(logfile, "dm-command: usb-add a usb device: %s \n", par);
+        if (!par)
+            goto out;
+        do_usb_add(par);
+        xenstore_record_dm_state("usb-added");
+        fprintf(logfile, "dm-command: finish usb-add a usb device:%s\n",par);
+    } else if (!strncmp(command, "usb-del", len)) {
+        fprintf(logfile, "dm-command: usb-del a usb device\n");
+        if (pasprintf(&path,
+                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
+            fprintf(logfile, "out of memory reading dm command parameter\n");
+            goto out;
+        }
+        par = xs_read(xsh, XBT_NULL, path, &len);
+        fprintf(logfile, "dm-command: usb-del a usb device: %s \n", par);
+        if (!par)
+            goto out;
+        do_usb_del(par);
+        xenstore_record_dm_state("usb-deleted");
+        fprintf(logfile, "dm-command: finish usb-del a usb device:%s\n",par);
 #ifdef CONFIG_PASSTHROUGH
     } else if (!strncmp(command, "pci-rem", len)) {
         fprintf(logfile, "dm-command: hot remove pass-through pci dev \n");


>>> Keir Fraser <keir.fraser@eu.citrix.com> 2009-10-15 16:46 >>>
On 15/10/2009 09:12, "James Song" <jsong@novell.com> wrote:

> Add the two commands( "xm usb-add" and "xm usb-del") to add or delete the usb
> device instead of do it in QEMU console.
>  
> Signed-off-by: James Song Wei <jsong@novell.com>

Again, given the weird encoding of your email this patch will probably turn
out to be corrupted. But also you cannot patch tools/iomu-remote/ -- ioemu
patches are to be applied to the separate qemu-xen-unstable.git repository
and sent to the list cc'ed to Ian Jackson who maintains that repository.

-- Keir



[-- Attachment #1.2: Type: text/html, Size: 12765 bytes --]

[-- Attachment #2: usb-add-2.patch --]
[-- Type: text/plain, Size: 4408 bytes --]

diff -r 0705efd9c69e tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py	Fri Oct 16 09:04:53 2009 +0100
+++ b/tools/python/xen/xend/XendDomain.py	Mon Oct 19 10:15:06 2009 +0800
@@ -1522,6 +1522,45 @@
             raise XendError("can't write guest state file %s: %s" %
                             (dst, ex[1]))
 
+    def domain_usb_add(self, domid, dev_id):
+        dominfo = self.domain_lookup_nr(domid)
+        if not dominfo:
+            raise XendInvalidDomain(str(domid))
+
+        usb = dominfo.info['platform'].get('usb')
+        if not usb:
+            raise XendError("Can't add usb device to a guest with usb disabled in configure file")
+
+        hvm = dominfo.info.is_hvm()
+        if not hvm:
+            raise XendError("Can't add usb device to a non-hvm guest")
+
+        if dominfo._stateGet() != DOM_STATE_HALTED:
+            dominfo.image.signalDeviceModel("usb-add",
+                "usb-added", dev_id)
+        else:
+            log.debug("error: Domain is not running!")
+
+
+    def domain_usb_del(self, domid, dev_id):
+        dominfo = self.domain_lookup_nr(domid)
+        if not dominfo:
+            raise XendInvalidDomain(str(domid))
+
+        usb = dominfo.info['platform'].get('usb')
+        if not usb:
+            raise XendError("Can't add usb device to a guest with usb disabled in configure file")
+
+        hvm = dominfo.info.is_hvm()
+        if not hvm:
+            raise XendError("Can't del usb to a non-hvm guest")
+
+        if dominfo._stateGet() != DOM_STATE_HALTED:
+            dominfo.image.signalDeviceModel("usb-del",
+                "usb-deleted", dev_id)
+        else:
+            log.debug("error: Domain is not running!")
+
     def domain_pincpu(self, domid, vcpu, cpumap):
         """Set which cpus vcpu can use
 
diff -r 0705efd9c69e tools/python/xen/xend/server/SrvDomain.py
--- a/tools/python/xen/xend/server/SrvDomain.py	Fri Oct 16 09:04:53 2009 +0100
+++ b/tools/python/xen/xend/server/SrvDomain.py	Mon Oct 19 10:15:06 2009 +0800
@@ -225,6 +225,19 @@
         self.acceptCommand(req)
         return self.xd.domain_reset(self.dom.getName())
 
+    def op_usb_add(self, op, req):
+        self.acceptCommand(req)
+        return req.threadRequest(self.do_usb_add, op, req)
+
+    def do_usb_add(self, _, req):
+        return self.xd.domain_usb_add(self.dom.getName(), req)
+ 
+    def op_usb_del(self, op, req):
+        self.acceptCommand(req)
+        return req.threadRequest(self.do_usb_add, op, req)
+
+    def do_usb_del(self, _, req):
+        return self.xd.domain_usb_add(self.dom.getName(), req)
 
     def render_POST(self, req):
         return self.perform(req)
diff -r 0705efd9c69e tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py	Fri Oct 16 09:04:53 2009 +0100
+++ b/tools/python/xen/xm/main.py	Mon Oct 19 10:15:06 2009 +0800
@@ -161,6 +161,9 @@
     'vcpu-set'    : ('<Domain> <vCPUs>',
                      'Set the number of active VCPUs for allowed for the'
                      ' domain.'),
+    #usb
+    'usb-add'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Add the usb device to FV VM.'),
+    'usb-del'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Delete the usb device to FV VM.'),
 
     # device commands
 
@@ -350,6 +353,8 @@
     "top",
     "unpause",
     "uptime",
+    "usb-add",
+    "usb-del",
     "vcpu-set",
     ]
 
@@ -382,6 +387,8 @@
     "top",
     "unpause",
     "uptime",
+    "usb-add",
+    "usb-del",
     "vcpu-list",
     "vcpu-pin",
     "vcpu-set",
@@ -1473,6 +1480,14 @@
     else:
         mem_target = int_unit(args[1], 'm')
         server.xend.domain.setMemoryTarget(dom, mem_target)
+
+def xm_usb_add(args):
+    arg_check(args, "usb-add", 2)
+    server.xend.domain.usb_add(args[0],args[1])
+
+def xm_usb_del(args):
+    arg_check(args, "usb-del", 2)
+    server.xend.domain.usb_del(args[0],args[1])
     
 def xm_vcpu_set(args):
     arg_check(args, "vcpu-set", 2)
@@ -3311,6 +3326,9 @@
     "tmem-set": xm_tmem_set,
     "tmem-freeable": xm_tmem_freeable_mb,
     "tmem-shared-auth": xm_tmem_shared_auth,
+    #usb
+    "usb-add": xm_usb_add,
+    "usb-del": xm_usb_del,
     }
 
 ## The commands supported by a separate argument parser in xend.xm.

[-- Attachment #3: parse_usb_command.patch --]
[-- Type: text/plain, Size: 1850 bytes --]

diff --git a/xenstore.c b/xenstore.c
index da278f4..694152a 100644
--- a/xenstore.c
+++ b/xenstore.c
@@ -752,6 +752,34 @@ static void xenstore_process_dm_command_event(void)
     } else if (!strncmp(command, "continue", len)) {
         fprintf(logfile, "dm-command: continue after state save\n");
         xen_pause_requested = 0;
+    } else if (!strncmp(command, "usb-add", len)) {
+        fprintf(logfile, "dm-command: usb-add a usb device\n");
+        if (pasprintf(&path,
+                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
+            fprintf(logfile, "out of memory reading dm command parameter\n");
+            goto out;
+        }
+        par = xs_read(xsh, XBT_NULL, path, &len);
+        fprintf(logfile, "dm-command: usb-add a usb device: %s \n", par);
+        if (!par)
+            goto out;
+        do_usb_add(par);
+        xenstore_record_dm_state("usb-added");
+        fprintf(logfile, "dm-command: finish usb-add a usb device:%s\n",par);
+    } else if (!strncmp(command, "usb-del", len)) {
+        fprintf(logfile, "dm-command: usb-del a usb device\n");
+        if (pasprintf(&path,
+                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
+            fprintf(logfile, "out of memory reading dm command parameter\n");
+            goto out;
+        }
+        par = xs_read(xsh, XBT_NULL, path, &len);
+        fprintf(logfile, "dm-command: usb-del a usb device: %s \n", par);
+        if (!par)
+            goto out;
+        do_usb_del(par);
+        xenstore_record_dm_state("usb-deleted");
+        fprintf(logfile, "dm-command: finish usb-del a usb device:%s\n",par);
 #ifdef CONFIG_PASSTHROUGH
     } else if (!strncmp(command, "pci-rem", len)) {
         fprintf(logfile, "dm-command: hot remove pass-through pci dev \n");

[-- Attachment #4: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: add the two command to add or delete the usb device instead of do it in QEMU console
  2009-10-15  8:46 ` Keir Fraser
  2009-10-19  2:48   ` James Song
@ 2009-10-19 14:36   ` Ian Jackson
  1 sibling, 0 replies; 8+ messages in thread
From: Ian Jackson @ 2009-10-19 14:36 UTC (permalink / raw)
  To: Keir Fraser; +Cc: xen-devel@lists.xensource.com, James Song

Keir Fraser writes ("Re: [Xen-devel] add the two command to add or delete the usb device instead of do it in QEMU console"):
> Again, given the weird encoding of your email this patch will probably turn
> out to be corrupted. But also you cannot patch tools/iomu-remote/ -- ioemu
> patches are to be applied to the separate qemu-xen-unstable.git repository
> and sent to the list cc'ed to Ian Jackson who maintains that repository.

I can apply a patch easily enough even if it was made against
tools/ioemu-remote/.  But I'll look for the revised version from James
Song.

Ian.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* add the two command to add or delete the usb device instead of do it in QEMU console
@ 2009-10-20  7:26 James Song
  2009-10-27 15:23 ` Pasi Kärkkäinen
  2009-12-13 21:09 ` Pasi Kärkkäinen
  0 siblings, 2 replies; 8+ messages in thread
From: James Song @ 2009-10-20  7:26 UTC (permalink / raw)
  To: ian.jackson, xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 6542 bytes --]

I rewrite the patch, pls check. I also put those as attachments.
 
Thanks,
-James
 
Signed-off-by: James Song Wei <jsong@novell.com>
 
diff -r 0705efd9c69e tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py       Fri Oct 16 09:04:53 2009 +0100
+++ b/tools/python/xen/xend/XendDomain.py       Mon Oct 19 10:15:06 2009 +0800
@@ -1522,6 +1522,45 @@
             raise XendError("can't write guest state file %s: %s" %
                             (dst, ex[1]))
 
+    def domain_usb_add(self, domid, dev_id):
+        dominfo = self.domain_lookup_nr(domid)
+        if not dominfo:
+            raise XendInvalidDomain(str(domid))
+
+        usb = dominfo.info['platform'].get('usb')
+        if not usb:
+            raise XendError("Can't add usb device to a guest with usb disabled in configure file")
+
+        hvm = dominfo.info.is_hvm()
+        if not hvm:
+            raise XendError("Can't add usb device to a non-hvm guest")
+
+        if dominfo._stateGet() != DOM_STATE_HALTED:
+            dominfo.image.signalDeviceModel("usb-add",
+                "usb-added", dev_id)
+        else:
+            log.debug("error: Domain is not running!")
+
+
+    def domain_usb_del(self, domid, dev_id):
+        dominfo = self.domain_lookup_nr(domid)
+        if not dominfo:
+            raise XendInvalidDomain(str(domid))
+
+        usb = dominfo.info['platform'].get('usb')
+        if not usb:
+            raise XendError("Can't add usb device to a guest with usb disabled in configure file")
+
+        hvm = dominfo.info.is_hvm()
+        if not hvm:
+            raise XendError("Can't del usb to a non-hvm guest")
+
+        if dominfo._stateGet() != DOM_STATE_HALTED:
+            dominfo.image.signalDeviceModel("usb-del",
+                "usb-deleted", dev_id)
+        else:
+            log.debug("error: Domain is not running!")
+
     def domain_pincpu(self, domid, vcpu, cpumap):
         """Set which cpus vcpu can use
 
diff -r 0705efd9c69e tools/python/xen/xend/server/SrvDomain.py
--- a/tools/python/xen/xend/server/SrvDomain.py Fri Oct 16 09:04:53 2009 +0100
+++ b/tools/python/xen/xend/server/SrvDomain.py Mon Oct 19 10:15:06 2009 +0800
@@ -225,6 +225,19 @@
         self.acceptCommand(req)
         return self.xd.domain_reset(self.dom.getName())
 
+    def op_usb_add(self, op, req):
+        self.acceptCommand(req)
+        return req.threadRequest(self.do_usb_add, op, req)
+
+    def do_usb_add(self, _, req):
+        return self.xd.domain_usb_add(self.dom.getName(), req)
+ 
+    def op_usb_del(self, op, req):
+        self.acceptCommand(req)
+        return req.threadRequest(self.do_usb_add, op, req)
+
+    def do_usb_del(self, _, req):
+        return self.xd.domain_usb_add(self.dom.getName(), req)
 
     def render_POST(self, req):
         return self.perform(req)
diff -r 0705efd9c69e tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Fri Oct 16 09:04:53 2009 +0100
+++ b/tools/python/xen/xm/main.py       Mon Oct 19 10:15:06 2009 +0800
@@ -161,6 +161,9 @@
     'vcpu-set'    : ('<Domain> <vCPUs>',
                      'Set the number of active VCPUs for allowed for the'
                      ' domain.'),
+    #usb
+    'usb-add'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Add the usb device to FV VM.'),
+    'usb-del'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Delete the usb device to FV VM.'),
 
     # device commands
 
@@ -350,6 +353,8 @@
     "top",
     "unpause",
     "uptime",
+    "usb-add",
+    "usb-del",
     "vcpu-set",
     ]
 
@@ -382,6 +387,8 @@
     "top",
     "unpause",
     "uptime",
+    "usb-add",
+    "usb-del",
     "vcpu-list",
     "vcpu-pin",
     "vcpu-set",
@@ -1473,6 +1480,14 @@
     else:
         mem_target = int_unit(args[1], 'm')
         server.xend.domain.setMemoryTarget(dom, mem_target)
+
+def xm_usb_add(args):
+    arg_check(args, "usb-add", 2)
+    server.xend.domain.usb_add(args[0],args[1])
+
+def xm_usb_del(args):
+    arg_check(args, "usb-del", 2)
+    server.xend.domain.usb_del(args[0],args[1])
 
 def xm_vcpu_set(args):
     arg_check(args, "vcpu-set", 2)
@@ -3311,6 +3326,9 @@
     "tmem-set": xm_tmem_set,
     "tmem-freeable": xm_tmem_freeable_mb,
     "tmem-shared-auth": xm_tmem_shared_auth,
+    #usb
+    "usb-add": xm_usb_add,
+    "usb-del": xm_usb_del,
     }
 
 ## The commands supported by a separate argument parser in xend.xm.
 
 
 
 
 
 
This is another patch for qemu-xen-unstable
 
 
Signed-off-by: James Song Wei <jsong@novell.com>
 
diff --git a/xenstore.c b/xenstore.c
index da278f4..694152a 100644
--- a/xenstore.c
+++ b/xenstore.c
@@ -752,6 +752,34 @@ static void xenstore_process_dm_command_event(void)
     } else if (!strncmp(command, "continue", len)) {
         fprintf(logfile, "dm-command: continue after state save\n");
         xen_pause_requested = 0;
+    } else if (!strncmp(command, "usb-add", len)) {
+        fprintf(logfile, "dm-command: usb-add a usb device\n");
+        if (pasprintf(&path,
+                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
+            fprintf(logfile, "out of memory reading dm command parameter\n");
+            goto out;
+        }
+        par = xs_read(xsh, XBT_NULL, path, &len);
+        fprintf(logfile, "dm-command: usb-add a usb device: %s \n", par);
+        if (!par)
+            goto out;
+        do_usb_add(par);
+        xenstore_record_dm_state("usb-added");
+        fprintf(logfile, "dm-command: finish usb-add a usb device:%s\n",par);
+    } else if (!strncmp(command, "usb-del", len)) {
+        fprintf(logfile, "dm-command: usb-del a usb device\n");
+        if (pasprintf(&path,
+                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
+            fprintf(logfile, "out of memory reading dm command parameter\n");
+            goto out;
+        }
+        par = xs_read(xsh, XBT_NULL, path, &len);
+        fprintf(logfile, "dm-command: usb-del a usb device: %s \n", par);
+        if (!par)
+            goto out;
+        do_usb_del(par);
+        xenstore_record_dm_state("usb-deleted");
+        fprintf(logfile, "dm-command: finish usb-del a usb device:%s\n",par);
 #ifdef CONFIG_PASSTHROUGH
     } else if (!strncmp(command, "pci-rem", len)) {
         fprintf(logfile, "dm-command: hot remove pass-through pci dev \n");

[-- Attachment #1.2: Type: text/html, Size: 12083 bytes --]

[-- Attachment #2: usb-add-2.patch --]
[-- Type: text/plain, Size: 4408 bytes --]

diff -r 0705efd9c69e tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py	Fri Oct 16 09:04:53 2009 +0100
+++ b/tools/python/xen/xend/XendDomain.py	Mon Oct 19 10:15:06 2009 +0800
@@ -1522,6 +1522,45 @@
             raise XendError("can't write guest state file %s: %s" %
                             (dst, ex[1]))
 
+    def domain_usb_add(self, domid, dev_id):
+        dominfo = self.domain_lookup_nr(domid)
+        if not dominfo:
+            raise XendInvalidDomain(str(domid))
+
+        usb = dominfo.info['platform'].get('usb')
+        if not usb:
+            raise XendError("Can't add usb device to a guest with usb disabled in configure file")
+
+        hvm = dominfo.info.is_hvm()
+        if not hvm:
+            raise XendError("Can't add usb device to a non-hvm guest")
+
+        if dominfo._stateGet() != DOM_STATE_HALTED:
+            dominfo.image.signalDeviceModel("usb-add",
+                "usb-added", dev_id)
+        else:
+            log.debug("error: Domain is not running!")
+
+
+    def domain_usb_del(self, domid, dev_id):
+        dominfo = self.domain_lookup_nr(domid)
+        if not dominfo:
+            raise XendInvalidDomain(str(domid))
+
+        usb = dominfo.info['platform'].get('usb')
+        if not usb:
+            raise XendError("Can't add usb device to a guest with usb disabled in configure file")
+
+        hvm = dominfo.info.is_hvm()
+        if not hvm:
+            raise XendError("Can't del usb to a non-hvm guest")
+
+        if dominfo._stateGet() != DOM_STATE_HALTED:
+            dominfo.image.signalDeviceModel("usb-del",
+                "usb-deleted", dev_id)
+        else:
+            log.debug("error: Domain is not running!")
+
     def domain_pincpu(self, domid, vcpu, cpumap):
         """Set which cpus vcpu can use
 
diff -r 0705efd9c69e tools/python/xen/xend/server/SrvDomain.py
--- a/tools/python/xen/xend/server/SrvDomain.py	Fri Oct 16 09:04:53 2009 +0100
+++ b/tools/python/xen/xend/server/SrvDomain.py	Mon Oct 19 10:15:06 2009 +0800
@@ -225,6 +225,19 @@
         self.acceptCommand(req)
         return self.xd.domain_reset(self.dom.getName())
 
+    def op_usb_add(self, op, req):
+        self.acceptCommand(req)
+        return req.threadRequest(self.do_usb_add, op, req)
+
+    def do_usb_add(self, _, req):
+        return self.xd.domain_usb_add(self.dom.getName(), req)
+ 
+    def op_usb_del(self, op, req):
+        self.acceptCommand(req)
+        return req.threadRequest(self.do_usb_add, op, req)
+
+    def do_usb_del(self, _, req):
+        return self.xd.domain_usb_add(self.dom.getName(), req)
 
     def render_POST(self, req):
         return self.perform(req)
diff -r 0705efd9c69e tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py	Fri Oct 16 09:04:53 2009 +0100
+++ b/tools/python/xen/xm/main.py	Mon Oct 19 10:15:06 2009 +0800
@@ -161,6 +161,9 @@
     'vcpu-set'    : ('<Domain> <vCPUs>',
                      'Set the number of active VCPUs for allowed for the'
                      ' domain.'),
+    #usb
+    'usb-add'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Add the usb device to FV VM.'),
+    'usb-del'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Delete the usb device to FV VM.'),
 
     # device commands
 
@@ -350,6 +353,8 @@
     "top",
     "unpause",
     "uptime",
+    "usb-add",
+    "usb-del",
     "vcpu-set",
     ]
 
@@ -382,6 +387,8 @@
     "top",
     "unpause",
     "uptime",
+    "usb-add",
+    "usb-del",
     "vcpu-list",
     "vcpu-pin",
     "vcpu-set",
@@ -1473,6 +1480,14 @@
     else:
         mem_target = int_unit(args[1], 'm')
         server.xend.domain.setMemoryTarget(dom, mem_target)
+
+def xm_usb_add(args):
+    arg_check(args, "usb-add", 2)
+    server.xend.domain.usb_add(args[0],args[1])
+
+def xm_usb_del(args):
+    arg_check(args, "usb-del", 2)
+    server.xend.domain.usb_del(args[0],args[1])
     
 def xm_vcpu_set(args):
     arg_check(args, "vcpu-set", 2)
@@ -3311,6 +3326,9 @@
     "tmem-set": xm_tmem_set,
     "tmem-freeable": xm_tmem_freeable_mb,
     "tmem-shared-auth": xm_tmem_shared_auth,
+    #usb
+    "usb-add": xm_usb_add,
+    "usb-del": xm_usb_del,
     }
 
 ## The commands supported by a separate argument parser in xend.xm.

[-- Attachment #3: parse_usb_command.patch --]
[-- Type: text/plain, Size: 1850 bytes --]

diff --git a/xenstore.c b/xenstore.c
index da278f4..694152a 100644
--- a/xenstore.c
+++ b/xenstore.c
@@ -752,6 +752,34 @@ static void xenstore_process_dm_command_event(void)
     } else if (!strncmp(command, "continue", len)) {
         fprintf(logfile, "dm-command: continue after state save\n");
         xen_pause_requested = 0;
+    } else if (!strncmp(command, "usb-add", len)) {
+        fprintf(logfile, "dm-command: usb-add a usb device\n");
+        if (pasprintf(&path,
+                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
+            fprintf(logfile, "out of memory reading dm command parameter\n");
+            goto out;
+        }
+        par = xs_read(xsh, XBT_NULL, path, &len);
+        fprintf(logfile, "dm-command: usb-add a usb device: %s \n", par);
+        if (!par)
+            goto out;
+        do_usb_add(par);
+        xenstore_record_dm_state("usb-added");
+        fprintf(logfile, "dm-command: finish usb-add a usb device:%s\n",par);
+    } else if (!strncmp(command, "usb-del", len)) {
+        fprintf(logfile, "dm-command: usb-del a usb device\n");
+        if (pasprintf(&path,
+                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
+            fprintf(logfile, "out of memory reading dm command parameter\n");
+            goto out;
+        }
+        par = xs_read(xsh, XBT_NULL, path, &len);
+        fprintf(logfile, "dm-command: usb-del a usb device: %s \n", par);
+        if (!par)
+            goto out;
+        do_usb_del(par);
+        xenstore_record_dm_state("usb-deleted");
+        fprintf(logfile, "dm-command: finish usb-del a usb device:%s\n",par);
 #ifdef CONFIG_PASSTHROUGH
     } else if (!strncmp(command, "pci-rem", len)) {
         fprintf(logfile, "dm-command: hot remove pass-through pci dev \n");

[-- Attachment #4: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: add the two command to add or delete the usb device instead of do it in QEMU console
  2009-10-20  7:26 add the two command to add or delete the usb device instead of do it in QEMU console James Song
@ 2009-10-27 15:23 ` Pasi Kärkkäinen
  2009-12-13 21:09 ` Pasi Kärkkäinen
  1 sibling, 0 replies; 8+ messages in thread
From: Pasi Kärkkäinen @ 2009-10-27 15:23 UTC (permalink / raw)
  To: James Song; +Cc: xen-devel, ian.jackson

On Tue, Oct 20, 2009 at 01:26:19AM -0600, James Song wrote:
>    I rewrite the patch, pls check. I also put those as attachments.
> 

I see this is committed to qemu-xen-unstable:
http://xenbits.xen.org/ext/qemu-xen-unstable.hg?rev/df1b7da6e411

I guess this would be nice to have also in qemu-xen-3.4

-- Pasi

>    Thanks,
>    -James
> 
>    Signed-off-by: James Song Wei <[1]jsong@novell.com>
> 
>    diff -r 0705efd9c69e tools/python/xen/xend/XendDomain.py
>    --- a/tools/python/xen/xend/XendDomain.py       Fri Oct 16 09:04:53 2009
>    +0100
>    +++ b/tools/python/xen/xend/XendDomain.py       Mon Oct 19 10:15:06 2009
>    +0800
>    @@ -1522,6 +1522,45 @@
>                 raise XendError("can't write guest state file %s: %s" %
>                                 (dst, ex[1]))
> 
>    +    def domain_usb_add(self, domid, dev_id):
>    +        dominfo = self.domain_lookup_nr(domid)
>    +        if not dominfo:
>    +            raise XendInvalidDomain(str(domid))
>    +
>    +        usb = dominfo.info['platform'].get('usb')
>    +        if not usb:
>    +            raise XendError("Can't add usb device to a guest with usb
>    disabled in configure file")
>    +
>    +        hvm = dominfo.info.is_hvm()
>    +        if not hvm:
>    +            raise XendError("Can't add usb device to a non-hvm guest")
>    +
>    +        if dominfo._stateGet() != DOM_STATE_HALTED:
>    +            dominfo.image.signalDeviceModel("usb-add",
>    +                "usb-added", dev_id)
>    +        else:
>    +            log.debug("error: Domain is not running!")
>    +
>    +
>    +    def domain_usb_del(self, domid, dev_id):
>    +        dominfo = self.domain_lookup_nr(domid)
>    +        if not dominfo:
>    +            raise XendInvalidDomain(str(domid))
>    +
>    +        usb = dominfo.info['platform'].get('usb')
>    +        if not usb:
>    +            raise XendError("Can't add usb device to a guest with usb
>    disabled in configure file")
>    +
>    +        hvm = dominfo.info.is_hvm()
>    +        if not hvm:
>    +            raise XendError("Can't del usb to a non-hvm guest")
>    +
>    +        if dominfo._stateGet() != DOM_STATE_HALTED:
>    +            dominfo.image.signalDeviceModel("usb-del",
>    +                "usb-deleted", dev_id)
>    +        else:
>    +            log.debug("error: Domain is not running!")
>    +
>         def domain_pincpu(self, domid, vcpu, cpumap):
>             """Set which cpus vcpu can use
> 
>    diff -r 0705efd9c69e tools/python/xen/xend/server/SrvDomain.py
>    --- a/tools/python/xen/xend/server/SrvDomain.py Fri Oct 16 09:04:53 2009
>    +0100
>    +++ b/tools/python/xen/xend/server/SrvDomain.py Mon Oct 19 10:15:06 2009
>    +0800
>    @@ -225,6 +225,19 @@
>             self.acceptCommand(req)
>             return self.xd.domain_reset(self.dom.getName())
> 
>    +    def op_usb_add(self, op, req):
>    +        self.acceptCommand(req)
>    +        return req.threadRequest(self.do_usb_add, op, req)
>    +
>    +    def do_usb_add(self, _, req):
>    +        return self.xd.domain_usb_add(self.dom.getName(), req)
>    +
>    +    def op_usb_del(self, op, req):
>    +        self.acceptCommand(req)
>    +        return req.threadRequest(self.do_usb_add, op, req)
>    +
>    +    def do_usb_del(self, _, req):
>    +        return self.xd.domain_usb_add(self.dom.getName(), req)
> 
>         def render_POST(self, req):
>             return self.perform(req)
>    diff -r 0705efd9c69e tools/python/xen/xm/main.py
>    --- a/tools/python/xen/xm/main.py       Fri Oct 16 09:04:53 2009 +0100
>    +++ b/tools/python/xen/xm/main.py       Mon Oct 19 10:15:06 2009 +0800
>    @@ -161,6 +161,9 @@
>         'vcpu-set'    : ('<Domain> <vCPUs>',
>                          'Set the number of active VCPUs for allowed for the'
>                          ' domain.'),
>    +    #usb
>    +    'usb-add'     : ('<domain> <[host:bus.addr]
>    [host:vendor_id:product_id]>','Add the usb device to FV VM.'),
>    +    'usb-del'     : ('<domain> <[host:bus.addr]
>    [host:vendor_id:product_id]>','Delete the usb device to FV VM.'),
> 
>         # device commands
> 
>    @@ -350,6 +353,8 @@
>         "top",
>         "unpause",
>         "uptime",
>    +    "usb-add",
>    +    "usb-del",
>         "vcpu-set",
>         ]
> 
>    @@ -382,6 +387,8 @@
>         "top",
>         "unpause",
>         "uptime",
>    +    "usb-add",
>    +    "usb-del",
>         "vcpu-list",
>         "vcpu-pin",
>         "vcpu-set",
>    @@ -1473,6 +1480,14 @@
>         else:
>             mem_target = int_unit(args[1], 'm')
>             server.xend.domain.setMemoryTarget(dom, mem_target)
>    +
>    +def xm_usb_add(args):
>    +    arg_check(args, "usb-add", 2)
>    +    server.xend.domain.usb_add(args[0],args[1])
>    +
>    +def xm_usb_del(args):
>    +    arg_check(args, "usb-del", 2)
>    +    server.xend.domain.usb_del(args[0],args[1])
> 
>     def xm_vcpu_set(args):
>         arg_check(args, "vcpu-set", 2)
>    @@ -3311,6 +3326,9 @@
>         "tmem-set": xm_tmem_set,
>         "tmem-freeable": xm_tmem_freeable_mb,
>         "tmem-shared-auth": xm_tmem_shared_auth,
>    +    #usb
>    +    "usb-add": xm_usb_add,
>    +    "usb-del": xm_usb_del,
>         }
> 
>     ## The commands supported by a separate argument parser in xend.xm.
> 
> 
> 
> 
> 
> 
>    This is another patch for qemu-xen-unstable
> 
> 
>    Signed-off-by: James Song Wei <[2]jsong@novell.com>
> 
>    diff --git a/xenstore.c b/xenstore.c
>    index da278f4..694152a 100644
>    --- a/xenstore.c
>    +++ b/xenstore.c
>    @@ -752,6 +752,34 @@ static void xenstore_process_dm_command_event(void)
>         } else if (!strncmp(command, "continue", len)) {
>             fprintf(logfile, "dm-command: continue after state save\n");
>             xen_pause_requested = 0;
>    +    } else if (!strncmp(command, "usb-add", len)) {
>    +        fprintf(logfile, "dm-command: usb-add a usb device\n");
>    +        if (pasprintf(&path,
>    +                "/local/domain/0/device-model/%u/parameter", domid) ==
>    -1) {
>    +            fprintf(logfile, "out of memory reading dm command
>    parameter\n");
>    +            goto out;
>    +        }
>    +        par = xs_read(xsh, XBT_NULL, path, &len);
>    +        fprintf(logfile, "dm-command: usb-add a usb device: %s \n", par);
>    +        if (!par)
>    +            goto out;
>    +        do_usb_add(par);
>    +        xenstore_record_dm_state("usb-added");
>    +        fprintf(logfile, "dm-command: finish usb-add a usb
>    device:%s\n",par);
>    +    } else if (!strncmp(command, "usb-del", len)) {
>    +        fprintf(logfile, "dm-command: usb-del a usb device\n");
>    +        if (pasprintf(&path,
>    +                "/local/domain/0/device-model/%u/parameter", domid) ==
>    -1) {
>    +            fprintf(logfile, "out of memory reading dm command
>    parameter\n");
>    +            goto out;
>    +        }
>    +        par = xs_read(xsh, XBT_NULL, path, &len);
>    +        fprintf(logfile, "dm-command: usb-del a usb device: %s \n", par);
>    +        if (!par)
>    +            goto out;
>    +        do_usb_del(par);
>    +        xenstore_record_dm_state("usb-deleted");
>    +        fprintf(logfile, "dm-command: finish usb-del a usb
>    device:%s\n",par);
>     #ifdef CONFIG_PASSTHROUGH
>         } else if (!strncmp(command, "pci-rem", len)) {
>             fprintf(logfile, "dm-command: hot remove pass-through pci dev
>    \n");
> 
> References
> 
>    Visible links
>    1. mailto:jsong@novell.com
>    2. mailto:jsong@novell.com

> diff -r 0705efd9c69e tools/python/xen/xend/XendDomain.py
> --- a/tools/python/xen/xend/XendDomain.py	Fri Oct 16 09:04:53 2009 +0100
> +++ b/tools/python/xen/xend/XendDomain.py	Mon Oct 19 10:15:06 2009 +0800
> @@ -1522,6 +1522,45 @@
>              raise XendError("can't write guest state file %s: %s" %
>                              (dst, ex[1]))
>  
> +    def domain_usb_add(self, domid, dev_id):
> +        dominfo = self.domain_lookup_nr(domid)
> +        if not dominfo:
> +            raise XendInvalidDomain(str(domid))
> +
> +        usb = dominfo.info['platform'].get('usb')
> +        if not usb:
> +            raise XendError("Can't add usb device to a guest with usb disabled in configure file")
> +
> +        hvm = dominfo.info.is_hvm()
> +        if not hvm:
> +            raise XendError("Can't add usb device to a non-hvm guest")
> +
> +        if dominfo._stateGet() != DOM_STATE_HALTED:
> +            dominfo.image.signalDeviceModel("usb-add",
> +                "usb-added", dev_id)
> +        else:
> +            log.debug("error: Domain is not running!")
> +
> +
> +    def domain_usb_del(self, domid, dev_id):
> +        dominfo = self.domain_lookup_nr(domid)
> +        if not dominfo:
> +            raise XendInvalidDomain(str(domid))
> +
> +        usb = dominfo.info['platform'].get('usb')
> +        if not usb:
> +            raise XendError("Can't add usb device to a guest with usb disabled in configure file")
> +
> +        hvm = dominfo.info.is_hvm()
> +        if not hvm:
> +            raise XendError("Can't del usb to a non-hvm guest")
> +
> +        if dominfo._stateGet() != DOM_STATE_HALTED:
> +            dominfo.image.signalDeviceModel("usb-del",
> +                "usb-deleted", dev_id)
> +        else:
> +            log.debug("error: Domain is not running!")
> +
>      def domain_pincpu(self, domid, vcpu, cpumap):
>          """Set which cpus vcpu can use
>  
> diff -r 0705efd9c69e tools/python/xen/xend/server/SrvDomain.py
> --- a/tools/python/xen/xend/server/SrvDomain.py	Fri Oct 16 09:04:53 2009 +0100
> +++ b/tools/python/xen/xend/server/SrvDomain.py	Mon Oct 19 10:15:06 2009 +0800
> @@ -225,6 +225,19 @@
>          self.acceptCommand(req)
>          return self.xd.domain_reset(self.dom.getName())
>  
> +    def op_usb_add(self, op, req):
> +        self.acceptCommand(req)
> +        return req.threadRequest(self.do_usb_add, op, req)
> +
> +    def do_usb_add(self, _, req):
> +        return self.xd.domain_usb_add(self.dom.getName(), req)
> + 
> +    def op_usb_del(self, op, req):
> +        self.acceptCommand(req)
> +        return req.threadRequest(self.do_usb_add, op, req)
> +
> +    def do_usb_del(self, _, req):
> +        return self.xd.domain_usb_add(self.dom.getName(), req)
>  
>      def render_POST(self, req):
>          return self.perform(req)
> diff -r 0705efd9c69e tools/python/xen/xm/main.py
> --- a/tools/python/xen/xm/main.py	Fri Oct 16 09:04:53 2009 +0100
> +++ b/tools/python/xen/xm/main.py	Mon Oct 19 10:15:06 2009 +0800
> @@ -161,6 +161,9 @@
>      'vcpu-set'    : ('<Domain> <vCPUs>',
>                       'Set the number of active VCPUs for allowed for the'
>                       ' domain.'),
> +    #usb
> +    'usb-add'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Add the usb device to FV VM.'),
> +    'usb-del'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Delete the usb device to FV VM.'),
>  
>      # device commands
>  
> @@ -350,6 +353,8 @@
>      "top",
>      "unpause",
>      "uptime",
> +    "usb-add",
> +    "usb-del",
>      "vcpu-set",
>      ]
>  
> @@ -382,6 +387,8 @@
>      "top",
>      "unpause",
>      "uptime",
> +    "usb-add",
> +    "usb-del",
>      "vcpu-list",
>      "vcpu-pin",
>      "vcpu-set",
> @@ -1473,6 +1480,14 @@
>      else:
>          mem_target = int_unit(args[1], 'm')
>          server.xend.domain.setMemoryTarget(dom, mem_target)
> +
> +def xm_usb_add(args):
> +    arg_check(args, "usb-add", 2)
> +    server.xend.domain.usb_add(args[0],args[1])
> +
> +def xm_usb_del(args):
> +    arg_check(args, "usb-del", 2)
> +    server.xend.domain.usb_del(args[0],args[1])
>      
>  def xm_vcpu_set(args):
>      arg_check(args, "vcpu-set", 2)
> @@ -3311,6 +3326,9 @@
>      "tmem-set": xm_tmem_set,
>      "tmem-freeable": xm_tmem_freeable_mb,
>      "tmem-shared-auth": xm_tmem_shared_auth,
> +    #usb
> +    "usb-add": xm_usb_add,
> +    "usb-del": xm_usb_del,
>      }
>  
>  ## The commands supported by a separate argument parser in xend.xm.

> diff --git a/xenstore.c b/xenstore.c
> index da278f4..694152a 100644
> --- a/xenstore.c
> +++ b/xenstore.c
> @@ -752,6 +752,34 @@ static void xenstore_process_dm_command_event(void)
>      } else if (!strncmp(command, "continue", len)) {
>          fprintf(logfile, "dm-command: continue after state save\n");
>          xen_pause_requested = 0;
> +    } else if (!strncmp(command, "usb-add", len)) {
> +        fprintf(logfile, "dm-command: usb-add a usb device\n");
> +        if (pasprintf(&path,
> +                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
> +            fprintf(logfile, "out of memory reading dm command parameter\n");
> +            goto out;
> +        }
> +        par = xs_read(xsh, XBT_NULL, path, &len);
> +        fprintf(logfile, "dm-command: usb-add a usb device: %s \n", par);
> +        if (!par)
> +            goto out;
> +        do_usb_add(par);
> +        xenstore_record_dm_state("usb-added");
> +        fprintf(logfile, "dm-command: finish usb-add a usb device:%s\n",par);
> +    } else if (!strncmp(command, "usb-del", len)) {
> +        fprintf(logfile, "dm-command: usb-del a usb device\n");
> +        if (pasprintf(&path,
> +                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
> +            fprintf(logfile, "out of memory reading dm command parameter\n");
> +            goto out;
> +        }
> +        par = xs_read(xsh, XBT_NULL, path, &len);
> +        fprintf(logfile, "dm-command: usb-del a usb device: %s \n", par);
> +        if (!par)
> +            goto out;
> +        do_usb_del(par);
> +        xenstore_record_dm_state("usb-deleted");
> +        fprintf(logfile, "dm-command: finish usb-del a usb device:%s\n",par);
>  #ifdef CONFIG_PASSTHROUGH
>      } else if (!strncmp(command, "pci-rem", len)) {
>          fprintf(logfile, "dm-command: hot remove pass-through pci dev \n");

> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: add the two command to add or delete the usb device instead of do it in QEMU console
  2009-10-20  7:26 add the two command to add or delete the usb device instead of do it in QEMU console James Song
  2009-10-27 15:23 ` Pasi Kärkkäinen
@ 2009-12-13 21:09 ` Pasi Kärkkäinen
  2009-12-14  2:41   ` James (song wei)
  1 sibling, 1 reply; 8+ messages in thread
From: Pasi Kärkkäinen @ 2009-12-13 21:09 UTC (permalink / raw)
  To: James Song; +Cc: xen-devel, ian.jackson

On Tue, Oct 20, 2009 at 01:26:19AM -0600, James Song wrote:
>    I rewrite the patch, pls check. I also put those as attachments.
> 
>    Thanks,
>    -James
> 
>    Signed-off-by: James Song Wei <[1]jsong@novell.com>
> 
 
>    diff -r 0705efd9c69e tools/python/xen/xend/server/SrvDomain.py
>    --- a/tools/python/xen/xend/server/SrvDomain.py Fri Oct 16 09:04:53 2009
>    +0100
>    +++ b/tools/python/xen/xend/server/SrvDomain.py Mon Oct 19 10:15:06 2009
>    +0800
>    @@ -225,6 +225,19 @@
>             self.acceptCommand(req)
>             return self.xd.domain_reset(self.dom.getName())
> 
>    +    def op_usb_add(self, op, req):
>    +        self.acceptCommand(req)
>    +        return req.threadRequest(self.do_usb_add, op, req)
>    +
>    +    def do_usb_add(self, _, req):
>    +        return self.xd.domain_usb_add(self.dom.getName(), req)
>    +
>    +    def op_usb_del(self, op, req):
>    +        self.acceptCommand(req)
>    +        return req.threadRequest(self.do_usb_add, op, req)
>    +
>    +    def do_usb_del(self, _, req):
>    +        return self.xd.domain_usb_add(self.dom.getName(), req)
> 

Hello,

Shouldn't op_usb_del() use do_usb_del() and do_usb_del() use
domain_usb_del() ?

Or did I miss something? 

-- Pasi

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: add the two command to add or delete the usb device instead of do it in QEMU console
  2009-12-13 21:09 ` Pasi Kärkkäinen
@ 2009-12-14  2:41   ` James (song wei)
  0 siblings, 0 replies; 8+ messages in thread
From: James (song wei) @ 2009-12-14  2:41 UTC (permalink / raw)
  To: xen-devel


 Yes, you are right. Sorry, I'll send the patch.

Pasi Kärkkäinen wrote:
> 
> On Tue, Oct 20, 2009 at 01:26:19AM -0600, James Song wrote:
>>    I rewrite the patch, pls check. I also put those as attachments.
>> 
>>    Thanks,
>>    -James
>> 
>>    Signed-off-by: James Song Wei <[1]jsong@novell.com>
>> 
>  
>>    diff -r 0705efd9c69e tools/python/xen/xend/server/SrvDomain.py
>>    --- a/tools/python/xen/xend/server/SrvDomain.py Fri Oct 16 09:04:53
>> 2009
>>    +0100
>>    +++ b/tools/python/xen/xend/server/SrvDomain.py Mon Oct 19 10:15:06
>> 2009
>>    +0800
>>    @@ -225,6 +225,19 @@
>>             self.acceptCommand(req)
>>             return self.xd.domain_reset(self.dom.getName())
>> 
>>    +    def op_usb_add(self, op, req):
>>    +        self.acceptCommand(req)
>>    +        return req.threadRequest(self.do_usb_add, op, req)
>>    +
>>    +    def do_usb_add(self, _, req):
>>    +        return self.xd.domain_usb_add(self.dom.getName(), req)
>>    +
>>    +    def op_usb_del(self, op, req):
>>    +        self.acceptCommand(req)
>>    +        return req.threadRequest(self.do_usb_add, op, req)
>>    +
>>    +    def do_usb_del(self, _, req):
>>    +        return self.xd.domain_usb_add(self.dom.getName(), req)
>> 
> 
> Hello,
> 
> Shouldn't op_usb_del() use do_usb_del() and do_usb_del() use
> domain_usb_del() ?
> 
> Or did I miss something? 
> 
> -- Pasi
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
> 
> 

-- 
View this message in context: http://old.nabble.com/add-the-two-command-to-add-or-delete-the-usb-device-instead-of-do-it-in-QEMU-console-tp25970825p26772284.html
Sent from the Xen - Dev mailing list archive at Nabble.com.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2009-12-14  2:41 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-20  7:26 add the two command to add or delete the usb device instead of do it in QEMU console James Song
2009-10-27 15:23 ` Pasi Kärkkäinen
2009-12-13 21:09 ` Pasi Kärkkäinen
2009-12-14  2:41   ` James (song wei)
  -- strict thread matches above, loose matches on Subject: below --
2009-10-15  8:12 James Song
2009-10-15  8:46 ` Keir Fraser
2009-10-19  2:48   ` James Song
2009-10-19 14:36   ` Ian Jackson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.