• Jeff Dike's avatar
    UML - Fix 2.6.20 hang · 2f8432fc
    Jeff Dike authored
    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: default avatarJeff Dike <jdike@addtoit.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    2f8432fc
sigio.c 7.43 KB