Re: [patch 2.6.31-rc6] fix serial gadget regression

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

 



O> That patch made an incompatible change to the locking policy, so that
> combining (a) tty->low_latency with (b) tty_flip_buffer_push() calls
> from tasklets now generates lockdep warnings of the "you can't grab a
> mutex from a tasklet" flavor.

No it didn't. The low_latency combined with flip_buffer_push has always
been forbidden (and documented so) since the day the flag was added. It
just didn't use to spew diagnostics. So this code has been broken forever.

>  	 * REVISIT we should probably add a timer to keep the tasklet
> -	 * from starving ... but it's not clear that case ever happens.
> +	 * from starving: not throttled, but TTY layer is refusing data.
> +	 * This was observed on 2.6.27-rc1 when streaming megabytes of
> +	 * data down a raw pipe...

The throttle race was recently fixed and was real (although you probably
saw it in real life because you wrongly set tty->low_latency). You could
get this occuring the throttle and unthrottle running at the same time
which meant the driver could see the unthrottle callback occur before the
throttle it matched. The fix for this amusingly is the patch which caught
the driver misusing tty->low_latency.

> -	/* low_latency means ldiscs work in tasklet context, without
> -	 * needing a workqueue schedule ... easier to keep up.
> -	 */
> -	tty->low_latency = 1;

low_latency was and is for avoiding latency. The issues about buffering
which people abused it for were fixed some releases ago when the
tty_buffer patches were merged.

[I blame GregKH, people keep quoting his old LJ article ;)]

Alan
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux