[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: 2.6.8-3 kernel freezes on Inspiron 8100 at isapnp



Andrea Vettorello wrote:

On Fri, 24 Sep 2004 21:51:09 +0800, Uwe Dippel <udippel@uniten.edu.my> 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 <stern@rowland.harvard.edu>

===== 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





Reply to: