Thread (23 messages) 23 messages, 5 authors, 2013-02-08

Re: [PATCH 2/3 v2] fb: udlfb: fix hang at disconnect

From: Andrew Morton <akpm@linux-foundation.org>
Date: 2013-01-29 00:22:43
Also in: lkml, stable

On Fri, 25 Jan 2013 19:49:27 +0100
Alexander Holler [off-list ref] wrote:
quoted hunk ↗ jump to hunk
When a device was disconnected the driver may hang at waiting for urbs it never
will get. Fix this by using a timeout while waiting for the used semaphore.

There is still a memory leak if a timeout happens, but at least the driver
now continues his disconnect routine.

...
--- a/drivers/video/udlfb.c
+++ b/drivers/video/udlfb.c
@@ -1832,8 +1832,9 @@ static void dlfb_free_urb_list(struct dlfb_data *dev)
 	/* keep waiting and freeing, until we've got 'em all */
 	while (count--) {
 
-		/* Getting interrupted means a leak, but ok at disconnect */
-		ret = down_interruptible(&dev->urbs.limit_sem);
+		/* Timeout likely occurs at disconnect (resulting in a leak) */
+		ret = down_timeout_killable(&dev->urbs.limit_sem,
+						FREE_URB_TIMEOUT);
 		if (ret)
 			break;
This is rather a hack.  Do you have an understanding of the underlying
bug?  Why is the driver waiting for things which will never happen?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help