All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Pasi Kärkkäinen" <pasik@iki.fi>
To: James Song <jsong@novell.com>
Cc: xen-devel@lists.xensource.com, ian.jackson@eu.citrix.com
Subject: Re: add the two command to add or delete the usb device instead of do it in QEMU console
Date: Tue, 27 Oct 2009 17:23:09 +0200	[thread overview]
Message-ID: <20091027152309.GG1434@reaktio.net> (raw)
In-Reply-To: <4ADE00CB020000200006F5E4@novprvlin0050.provo.novell.com>

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

  reply	other threads:[~2009-10-27 15:23 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20091027152309.GG1434@reaktio.net \
    --to=pasik@iki.fi \
    --cc=ian.jackson@eu.citrix.com \
    --cc=jsong@novell.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.