mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
xm,xend: Add commands to hotplug usb devices to hvm guests
Signed-off-by: James Song Wei <jsong@novell.com>
This commit is contained in:
1 parent
c288a6ff89
commit
d1c22b7f83
3 files changed
+70
No files matched your search
@@ -1522,6 +1522,45 @@ class XendDomain:
|
||||
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
|
||||
|
||||
|
||||
@@ -225,6 +225,19 @@ class SrvDomain(SrvDir):
|
||||
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)
|
||||
|
||||
@@ -161,6 +161,9 @@ SUBCOMMAND_HELP = {
|
||||
'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
|
||||
|
||||
@@ -351,6 +354,8 @@ common_commands = [
|
||||
"top",
|
||||
"unpause",
|
||||
"uptime",
|
||||
"usb-add",
|
||||
"usb-del",
|
||||
"vcpu-set",
|
||||
]
|
||||
|
||||
@@ -383,6 +388,8 @@ domain_commands = [
|
||||
"top",
|
||||
"unpause",
|
||||
"uptime",
|
||||
"usb-add",
|
||||
"usb-del",
|
||||
"vcpu-list",
|
||||
"vcpu-pin",
|
||||
"vcpu-set",
|
||||
@@ -1474,6 +1481,14 @@ def xm_mem_set(args):
|
||||
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)
|
||||
@@ -3312,6 +3327,9 @@ commands = {
|
||||
"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.
|
||||
|
||||