aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bluetooth
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-04-04 14:26:54 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2011-04-04 14:26:54 -0700
commita5660b41af6a28f8004e70eb261e1202ad55c5e3 (patch)
tree5192bb81189953e2551ea7d66012b90cb5b1396b /drivers/bluetooth
parentd7c764c4c7b782c660b4600b0bff2e3509892a4d (diff)
downloadkernel_samsung_espresso10-a5660b41af6a28f8004e70eb261e1202ad55c5e3.zip
kernel_samsung_espresso10-a5660b41af6a28f8004e70eb261e1202ad55c5e3.tar.gz
kernel_samsung_espresso10-a5660b41af6a28f8004e70eb261e1202ad55c5e3.tar.bz2
tty: fix endless work loop when the buffer fills up
Commit f23eb2b2b285 ('tty: stop using "delayed_work" in the tty layer') ended up causing hung machines on UP with no preemption, because the work routine to flip the buffer data to the ldisc would endlessly re-arm itself if the destination buffer had filled up. With the delayed work, that only caused a timer-driving polling of the tty state every timer tick, but without the delay we just ended up with basically a busy loop instead. Stop the insane polling, and instead make the code that opens up the receive room re-schedule the buffer flip work. That's what we should have been doing anyway. This same "poll for tty room" issue is almost certainly also the cause of excessive kworker activity when idle reported by Dave Jones, who also reported "flush_to_ldisc executing 2500 times a second" back in Nov 2010: http://lkml.org/lkml/2010/11/30/592 which is that silly flushing done every timer tick. Wasting both power and CPU for no good reason. Reported-and-tested-by: Alexander Beregalov <a.beregalov@gmail.com> Reported-and-tested-by: Sitsofe Wheeler <sitsofe@yahoo.com> Cc: Greg KH <gregkh@suse.de> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: Dave Jones <davej@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/bluetooth')
0 files changed, 0 insertions, 0 deletions