qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alon Levy <alevy@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 0/3] add usb_detach and usb_attach (v3)
Date: Thu, 11 Nov 2010 14:56:18 +0200	[thread overview]
Message-ID: <20101111125618.GA12611@playa.tlv.redhat.com> (raw)
In-Reply-To: <m3eias9mr3.fsf@blackfin.pond.sub.org>

On Thu, Nov 11, 2010 at 11:29:36AM +0100, Markus Armbruster wrote:
> Alon Levy <alevy@redhat.com> writes:
> 
> > On Wed, Nov 10, 2010 at 04:49:38PM +0100, Markus Armbruster wrote:
> >> Sorry for coming so late to this thread...
> >> 
> >> Alon Levy <alevy@redhat.com> writes:
> >> 
> >> > On Thu, Oct 21, 2010 at 08:13:19AM -0500, Anthony Liguori wrote:
> >> >> On 10/21/2010 08:03 AM, Gerd Hoffmann wrote:
> >> >> >On 10/21/10 08:36, Alon Levy wrote:
> >> >> >>v2->v3 changes:
> >> >> >>  * add configure parameter
> >> >> >>  * fix docs
> >> >> >>
> >> >> >>v2 message:
> >> >> >>This patchset uses id like device_del for attaching/detaching usb
> >> >> >>devices. The first two patches ready the way:
> >> >> >>  1. makes qdev_find_recursive non static and in qdev.h
> >> >> >>  2. adds a usb_device_by_id which goes over the usb buses calling
> >> >> >>   qdev_find_recursive
> >> >> >>  3. adds the commands that use usb_device_by_id
> >> >> >>
> >> >> >>Alon Levy (3):
> >> >> >>   qdev: make qdev_find_recursive public
> >> >> >>   usb: add public usb_device_by_id
> >> >> >>   monitor: add usb_attach and usb_detach (v2)
> >> >> >>
> >> >> >
> >> >> >Acked-by: Gerd Hoffmann <kraxel@redhat.com>
> >> >> 
> >> >> Okay, I am still confused about the use-case for this and I don't
> >> >> see any further explanation in the commit messages.  I've seen
> >> >> "debugging" but can you be a bit more specific about which cases
> >> >> it's needed for?
> >> >> 
> >> >
> >> > I use it for debugging the usb-ccid device. I think it's useful for
> >> > any other usb device tests as well. The existing commands are not
> >> > good enough to do a remove/insert of a usb device, since deleting
> >> > a device also deletes any chardev associated with it, and there is
> >> > no monitor command to add a chardev. Also sometimes you don't want
> >> > to close the chardev, just have the guest see a removal/reinsert of
> >> > the device.
> >> [...]
> >> 
> >> Let's see whether I get you: detach removes the device, but doesn't
> >> destroy it.  The only thing you can do with a detached device is attach
> >> it.  Detach+attach is basically the same as del+add with the same
> >> configuration.  Except shortcomings in our command set make it
> >> impossible to recreate the configuration sometimes.  Correct?
> > So the problems with the current commands from my pov:
> >  - device deletion removes associated chardev
> >   - no way to do it without removing chardev
> >   - no way to add chardev later and use it for device add
> > The outcome of which is that you can't do a guest wise attach/detach
> > from monitor if your device relies on a chardev association. This
> > happens with my passthrough ccid device.
> 
> Commands chardev_add, chardev_del look feasible to me.
> 
> I hate device_del destroying chardevs automatically.  If it was created
> separately, it should be destroyed separately.  But any fix needs to be
> backwards compatible somehow.  How to do that without embarrassingly
> ugly warts isn't obvious to me.
> 
> >> Questions:
> >> 
> >> 1. If we add commands so that you can always recreate the configuration,
> >>    is detach+attach still useful?  Why?
> > If you make it so you can do a device_del and not remove the chardev, and
> > later device_add using the already existing chardev, then that will be
> > equivalent for me.
> 
> Would chardev_add suffice, or do you need a way to reuse the existing
> chardev?
> 
I'd love chardev_add / chardev_del for testing in general, but they don't
work for my use case, because chardev_del closes the socket (in my case).
I could of course fix my client to work with reconnect, but it doesn't make
this pretty.

> >> 2. Why is this a USB problem, and not a general problem?  In other
> >>    words, why usb_{detach,attach}, and not device_{detach,attach}?
> > I guess attach/detach is a don't-free-some-resources del/add. If you
> > think there are users for a device_attach/detach and it makes sense
> > conceptually (what's a detach/attach for an ide bus? for a pci it's
> > pretty clear, for sata, etc.) then you could blow this up to a device
> > specific callback or something like that (assuming that's how you
> > would implement this).
> 
> For buses that don't support hot plug, such as IDE, detach makes as much
> sense as delete: none.
> 
> For buses that do (USB, PCI, SCSI, virtio-serial-bus), detach looks like
> the first half of delete to me: shut down, remove from device tree
> (second half is destroying the device object).
> 
> Likewise, attach looks like the second have of add: insert into device
> tree, start up (first half is creating the device object).
> 
> Pitfall: to make re-attach work, qdev method init() needs to work not
> just for newly created objects, but after a qdev exit() as well.  This
> is a change of contract for these two methods.  I wouldn't be surprised
> if not all of our device were happy with that.
> 

We could flag which devices can do re-attach. Or you go across the board
and add a info->detach, info->attach, split from info->exit, info->init.
Not a small amount of work :/ Actually, I think you'd need to do that anyway
to get any benefit from the detach/attach commands (apart from not deleting
associated chardevs).

  reply	other threads:[~2010-11-11 12:56 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-21  6:36 [Qemu-devel] [PATCH 0/3] add usb_detach and usb_attach (v3) Alon Levy
2010-10-21  6:36 ` [Qemu-devel] [PATCH 1/3] qdev: make qdev_find_recursive public Alon Levy
2010-10-21  6:36 ` [Qemu-devel] [PATCH 2/3] usb: add public usb_device_by_id Alon Levy
2010-10-21  6:36 ` [Qemu-devel] [PATCH 3/3] monitor: add usb_attach and usb_detach (v2) Alon Levy
2010-10-21 13:03 ` [Qemu-devel] [PATCH 0/3] add usb_detach and usb_attach (v3) Gerd Hoffmann
2010-10-21 13:13   ` Anthony Liguori
2010-10-21 13:24     ` Alon Levy
2010-10-22  3:16       ` Ryan Harper
2010-11-10 15:49       ` Markus Armbruster
2010-11-10 20:41         ` Alon Levy
2010-11-11 10:29           ` Markus Armbruster
2010-11-11 12:56             ` Alon Levy [this message]
2010-11-11 15:03               ` Markus Armbruster
2010-11-11 17:01                 ` Alon Levy
2010-10-21 13:27     ` Alon Levy
2010-10-22 12:48       ` Luiz Capitulino
2010-10-22 12:55         ` Anthony Liguori
2010-10-22 13:17           ` Luiz Capitulino
2010-10-22 13:43             ` Anthony Liguori
2010-10-22 13:45               ` Luiz Capitulino
2010-10-25  8:44           ` Alon Levy

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=20101111125618.GA12611@playa.tlv.redhat.com \
    --to=alevy@redhat.com \
    --cc=armbru@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).