WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] add the two command to add or delete the usb device instead

To: <ian.jackson@xxxxxxxxxxxxx>,<xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] add the two command to add or delete the usb device instead of do it in QEMU console
From: "James Song" <jsong@xxxxxxxxxx>
Date: Tue, 20 Oct 2009 01:26:19 -0600
Cc:
Delivery-date: Tue, 20 Oct 2009 00:26:57 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
I rewrite the patch, pls check. I also put those as attachments.
 
Thanks,
-James
 
Signed-off-by: James Song Wei <jsong@xxxxxxxxxx>
 
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@xxxxxxxxxx>
 
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: usb-add-2.patch
Description: Text document

Attachment: parse_usb_command.patch
Description: Text document

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