]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
UML - Fix 2.6.20 hang
authorJeff Dike <jdike@addtoit.com>
Thu, 22 Feb 2007 16:48:38 +0000 (11:48 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 9 Mar 2007 18:50:24 +0000 (10:50 -0800)
commit2f8432fcffa65ad899cee56a701fc81d460711db
treee5941bacbbc986039c6bcf1626af37a0d1cf3a20
parentb007a0873c46f01030f205a0355fc027ec769c03
UML - Fix 2.6.20 hang

A previous cleanup misused need_poll, which had a fairly broken
interface.  It implemented a growable array, changing the used
elements count itself, but leaving it up to the caller to fill in the
actual elements, including the entire array if the array had to be
reallocated.  This worked because the previous users were switching
between two such structures, and the elements were copied from the
inactive array to the active array after making sure the active array
had enough room.

maybe_sigio_broken was made to use need_poll, but it was operating on
a single array, so when the buffer was reallocated, the previous
contents were lost.

This patch makes need_poll implement more sane semantics.  It merely
assures that the array is of the proper size and that the contents are
preserved.  It is up to the caller to adjust the used elements count
and to ensure that the proper elements are resent.

This manifested itself as a hang in 2.6.20 as the uninitialized buffer
convinced UML that one of its own file descriptors didn't support
SIGIO and needed to be watched by poll in a separate thread.  The
result was an interrupt flood as control traffic over this descriptor
sparked interrupts, which resulted in more control traffic, ad nauseum.

Signed-off-by: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
arch/um/os-Linux/sigio.c