From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38002) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z7PXX-0004RG-2w for qemu-devel@nongnu.org; Tue, 23 Jun 2015 10:51:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z7PXS-0004qe-32 for qemu-devel@nongnu.org; Tue, 23 Jun 2015 10:51:07 -0400 Received: from smtp2.provo.novell.com ([137.65.250.81]:57630) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z7PXR-0004q7-SW for qemu-devel@nongnu.org; Tue, 23 Jun 2015 10:51:02 -0400 Message-ID: <55897213.7000109@suse.com> Date: Tue, 23 Jun 2015 22:49:55 +0800 From: Lin Ma MIME-Version: 1.0 References: <1435033463-13185-1-git-send-email-lma@suse.com> <55891904.9060508@huawei.com> In-Reply-To: <55891904.9060508@huawei.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH] Re-attach usb device to kernel while usb_host_open fails Reply-To: lma@suse.com List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gonglei , qemu-devel@nongnu.org, kraxel@redhat.com 在 2015年06月23日 16:29, Gonglei 写道: > On 2015/6/23 12:24, Lin Ma wrote: >> Signed-off-by: Lin Ma >> --- >> hw/usb/host-libusb.c | 5 +++++ >> 1 file changed, 5 insertions(+) >> >> diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c >> index 10f4735..7258c4d 100644 >> --- a/hw/usb/host-libusb.c >> +++ b/hw/usb/host-libusb.c >> @@ -888,6 +888,11 @@ static int usb_host_open(USBHostDevice *s, libusb_device *dev) >> fail: >> trace_usb_host_open_failure(bus_num, addr); >> if (s->dh != NULL) { >> + qemu_remove_exit_notifier(&s->exit); >> + QTAILQ_REMOVE(&hostdevs, s, next); > This change will cause a regression. For example, if an usb device's > (assume that it's usb1.0 device) speed does not match the ehci adapter, > then then invoking usb_host_open failed. if somebody changes the usb > device to an usb 2.0 device, it will not auto check because the device has > removed from the global hostdevs list. > > So I think we don't need do the above operations. In this situation, in my opinion, User should perform device_add to add the device again, Then the device will be added to hostdevs list and can be auto checked again, right? In addition, The usb_host_open will be performed 3 times until 's->errcount >= 3' while invoking usb_host_open failed. If the usb device isn't removed from hostdevs list, It will be detached & re-attached 3 times. Thanks, Lin >> + usb_host_release_interfaces(s); >> + libusb_reset_device(s->dh); >> + usb_host_attach_kernel(s); >> libusb_close(s->dh); >> s->dh = NULL; >> s->dev = NULL; >> > >