From: Hans de Goede <hdegoede@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 03/13] usb-host-libusb: Detach kernel drivers earlier
Date: Wed, 09 Oct 2013 17:34:32 +0200 [thread overview]
Message-ID: <52557788.9030600@redhat.com> (raw)
In-Reply-To: <1381325723.12583.108.camel@nilsson.home.kraxel.org>
Hi,
On 10/09/2013 03:35 PM, Gerd Hoffmann wrote:
> Hi,
>
>>> Assuming we have a device with multiple configurations, each
>>> configuration has a different set of interfaces, guest switches from one
>>> config to another. Do we correctly unbind kernel / claim interfaces
>>> then?
>>
>> Yes we still have a usb_host_detach_kernel() call in the beginning
>> of usb_host_claim_interfaces(), which gets run on the new interfaces
>> immediately after the libusb_set_configuration call.
>
> Ok, good.
>
>> Doing a detach_kernel after a set_config has always been necessary,
>> since the kernel will automatically bind drivers to the new interfaces
>> if the set_config succeeds.
>
> Is there some way to avoid the kernel's autobind in the first place btw?
Not atm, but so far the kernel guys have been open to adding (sane) API's
for things like this, and avoiding the whole re-bind after a set_config from
userspace would probably be nice to have.
Note that this is not triggering in 99% of all cases though, as the kernel has
this bit of code in its set_config handling for usbfs:
/* SET_CONFIGURATION is often abused as a "cheap" driver reset,
* so avoid usb_set_configuration()'s kick to sysfs
*/
if (actconfig && actconfig->desc.bConfigurationValue == u)
status = usb_reset_configuration(ps->dev);
else
status = usb_set_configuration(ps->dev, u);
So it only actually does a set_config (and binds the kernel drivers to
the interfaces) if the guest is asking for another config then the host os
has chosen for the device.
Since the guest assumes the device starts unconfigured, it does not issue
a set_config(0), only a set_config(1) (usually) which the above code
turns into a light weight reset.
Note that my usbredirhost code avoids even the unclaim / claim dance around
set_config and calling into the kernel at all in this case, it has:
if (host->config &&
host->config->bConfigurationValue == config) {
goto exit;
}
A downside of this is that not even the lightweight device reset is done,
but the guest always starts with a full device-reset, immediately following
that with a lightweight reset has little value.
I think we could and should to the same in host-libusb.c.
Regards,
Hans
next prev parent reply other threads:[~2013-10-09 15:34 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-08 19:58 [Qemu-devel] [PATCH 00/13] usb: Add support for bulk streams to usb-host-libusb Hans de Goede
2013-10-08 19:58 ` [Qemu-devel] [PATCH 01/13] usb-host-libusb: Fix reset handling Hans de Goede
2013-10-08 19:58 ` [Qemu-devel] [PATCH 02/13] usb-host-libusb: Configuration 0 may be a valid configuration Hans de Goede
2013-10-08 19:58 ` [Qemu-devel] [PATCH 03/13] usb-host-libusb: Detach kernel drivers earlier Hans de Goede
2013-10-09 8:55 ` Gerd Hoffmann
2013-10-09 13:08 ` Hans de Goede
2013-10-09 13:35 ` Gerd Hoffmann
2013-10-09 15:34 ` Hans de Goede [this message]
2013-10-08 19:58 ` [Qemu-devel] [PATCH 04/13] usb-hcd-xhci: Remove unused sstreamsm member from XHCIStreamContext Hans de Goede
2013-10-08 19:58 ` [Qemu-devel] [PATCH 05/13] usb-hcd-xhci: Remove unused cancelled member from XHCITransfer Hans de Goede
2013-10-08 19:58 ` [Qemu-devel] [PATCH 06/13] usb-hcd-xhci: Report completion of active transfer with CC_STOPPED on ep stop Hans de Goede
2013-10-08 19:58 ` [Qemu-devel] [PATCH 07/13] usb-hcd-xhci: Update endpoint context dequeue pointer for streams too Hans de Goede
2013-10-08 19:58 ` [Qemu-devel] [PATCH 08/13] usb: Add max_streams attribute to endpoint info Hans de Goede
2013-10-08 19:58 ` [Qemu-devel] [PATCH 09/13] usb: Add usb_device_alloc/free_streams Hans de Goede
2013-10-08 19:58 ` [Qemu-devel] [PATCH 10/13] xhci: Call usb_device_alloc/free_streams Hans de Goede
2013-10-08 19:58 ` [Qemu-devel] [PATCH 11/13] usb-host-libusb: Fill in endpoint max_streams when available Hans de Goede
2013-10-08 19:58 ` [Qemu-devel] [PATCH 12/13] usb-host-libusb: Add alloc / free streams ops Hans de Goede
2013-10-08 19:58 ` [Qemu-devel] [PATCH 13/13] usb-host-libusb: Set stream id when submitting bulk-stream transfers Hans de Goede
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=52557788.9030600@redhat.com \
--to=hdegoede@redhat.com \
--cc=kraxel@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).