Andrea Vettorello wrote:

On Fri, 24 Sep 2004 21:51:09 +0800, Uwe Dippel <[EMAIL PROTECTED]> wrote:


(today I'm kind of unlucky with the daily update, it seems: Thunderbird
broke, XMMS broke and now:)
After the update from 2.6.8-2 (??), but 2.6.8 in any case 2.6.8; the
kernel freezes at isapnp. I tried three times (Power-Off); and then booted
to 2.6.3; the install-kernel; without any problem.

I wonder if I'm the only one and should file a bug-report ?




I've experienced a freeze plugging/unplugging my usb printer with 2.6.8-2...



There is actually a bug in 2.6.8.1 that causes an OOPS when I switch off my USB printer
in 2.6.8.1 -- a bug that apparently already was there in 2.6.5 (or before).


Here's the patch that worked for me (and now apparently has been applied by Greg KH to
the kernel):


Below is the email with the patch in it:

Vojtech:

This bug was reported back in July, and I sent out a patch but apparently it never got to you. The usblp driver was calling usb_buffer_free() from usblp_cleanup(), which runs after disconnect() if a user process holds the device open. But once the usb_device is gone usb_buffer_free() will oops. The patch frees the buffers in usb_disconnect() instead.

Recently Joost Witteveen reported the same oops and found that the
patch solved it for him. So there shouldn't be problems with accepting it.


Alan Stern



Signed-off-by: Alan Stern <[EMAIL PROTECTED]>

===== drivers/usb/class/usblp.c 1.108 vs edited =====
--- 1.108/drivers/usb/class/usblp.c     2004-09-09 05:24:11 -04:00
+++ edited/drivers/usb/class/usblp.c    2004-09-20 14:33:03 -04:00
@@ -397,10 +397,6 @@
{
        info("usblp%d: removed", usblp->minor);

-       usb_buffer_free (usblp->dev, USBLP_BUF_SIZE,
-                       usblp->writebuf, usblp->writeurb->transfer_dma);
-       usb_buffer_free (usblp->dev, USBLP_BUF_SIZE,
-                       usblp->readbuf, usblp->readurb->transfer_dma);
        kfree (usblp->device_id_string);
        kfree (usblp->statusbuf);
        usb_free_urb(usblp->writeurb);
@@ -1159,6 +1155,10 @@
        usb_set_intfdata (intf, NULL);

        usblp_unlink_urbs(usblp);
+       usb_buffer_free (usblp->dev, USBLP_BUF_SIZE,
+                       usblp->writebuf, usblp->writeurb->transfer_dma);
+       usb_buffer_free (usblp->dev, USBLP_BUF_SIZE,
+                       usblp->readbuf, usblp->readurb->transfer_dma);

        if (!usblp->used)


usblp_cleanup (usblp);






Andrea






--
To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]




Reply via email to