[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Pine.LNX.4.44L0.0810201203530.2719-100000@iolanthe.rowland.org>
Date: Mon, 20 Oct 2008 12:17:45 -0400 (EDT)
From: Alan Stern <stern@...land.harvard.edu>
To: Justin Piszcz <jpiszcz@...idpixels.com>
cc: Oliver Neukum <oliver@...kum.org>, Mike Isely <isely@...ox.com>,
Kernel development list <linux-kernel@...r.kernel.org>,
USB list <linux-usb@...r.kernel.org>
Subject: Bug fix for pvrusb2 driver [was: Re: Kernel 2.6.26.5 -> 2.6.27.2
[USB REGRESSION] (USB -> D_STATE)]
On Mon, 20 Oct 2008, Justin Piszcz wrote:
> >> http://home.comcast.net/~jpiszcz/20081019/trace_before_trigger.txt
> >> http://home.comcast.net/~jpiszcz/20081019/trace_after_trigger.txt
> >
> > Your trace is incomplete. You might need to increase the size of the
> > kernel log buffer (CONFIG_LOG_BUF_SHIFT) or the size of the buffer used
> > by dmesg (the -s option).
> >
> > Alan Stern
> >
>
> You're right, I set it to 128 KiB and here is the full log, including the
> initial dmesg:
>
> http://home.comcast.net/~jpiszcz/20081019/kern.log
Okay, I see the problem. It's the same as we saw with the speedtouch
driver last week: The pvrusb2 driver resets its device but doesn't
define a pre_reset or a post_reset method. As a result it gets
disconnected during the reset, and the recursive call causes it to
hang.
This patch should fix the problem. It's not entirely correct, but it
should at least allow the driver to work like it did in 2.6.26.
Alan Stern
Index: usb-2.6/drivers/media/video/pvrusb2/pvrusb2-main.c
===================================================================
--- usb-2.6.orig/drivers/media/video/pvrusb2/pvrusb2-main.c
+++ usb-2.6/drivers/media/video/pvrusb2/pvrusb2-main.c
@@ -68,6 +68,16 @@ static void pvr_setup_attach(struct pvr2
#endif /* CONFIG_VIDEO_PVRUSB2_SYSFS */
}
+static int pvr_pre_reset(struct usb_interface *intf)
+{
+ return 0;
+}
+
+static int pvr_post_reset(struct usb_interface *intf)
+{
+ return 0;
+}
+
static int pvr_probe(struct usb_interface *intf,
const struct usb_device_id *devid)
{
@@ -109,7 +119,9 @@ static struct usb_driver pvr_driver = {
.name = "pvrusb2",
.id_table = pvr2_device_table,
.probe = pvr_probe,
- .disconnect = pvr_disconnect
+ .disconnect = pvr_disconnect,
+ .pre_reset = pvr_pre_reset,
+ .post_reset = pvr_post_reset,
};
/*
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists