linux/arch/um/os-Linux
Jeff Dike 838e56a11c [PATCH] 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>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-02-16 08:13:56 -08:00
..
drivers [PATCH] uml: use get_random_bytes() after random pool is seeded 2006-12-07 08:39:29 -08:00
include Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
skas [PATCH] uml: include tidying 2006-11-03 12:27:59 -08:00
sys-i386 [PATCH] uml: register handling formatting fixes 2007-02-11 10:51:24 -08:00
sys-x86_64 [PATCH] uml: x86_64 thread fixes 2007-02-11 10:51:24 -08:00
aio.c [PATCH] uml: AIO locking and tidying 2007-02-11 10:51:24 -08:00
elf_aux.c [PATCH] uml: ELF locking commentary 2007-02-11 10:51:24 -08:00
execvp.c [PATCH] uml: make execvp safe for our usage 2006-11-25 13:28:34 -08:00
file.c [PATCH] uml: libc-dependent code should call libc directly 2007-02-11 10:51:23 -08:00
helper.c [PATCH] uml: make execvp safe for our usage 2006-11-25 13:28:34 -08:00
irq.c [PATCH] uml: IRQ handler tidying 2007-02-11 10:51:23 -08:00
main.c [PATCH] uml: split memory allocation prototypes out of user.h 2006-10-20 10:26:36 -07:00
Makefile [PATCH] uml: make execvp safe for our usage 2006-11-25 13:28:34 -08:00
mem.c [PATCH] uml: fix style violations 2007-02-11 10:51:23 -08:00
process.c [PATCH] uml: include tidying 2006-11-03 12:27:59 -08:00
sigio.c [PATCH] uml: fix 2.6.20 hang 2007-02-16 08:13:56 -08:00
signal.c [PATCH] uml: fix I/O hang 2006-11-03 12:27:58 -08:00
start_up.c [PATCH] uml: fix error output during early boot 2007-02-11 10:51:24 -08:00
time.c [PATCH] uml: reenable compilation of enable_timer, disabled by mistake 2006-10-20 10:26:36 -07:00
tls.c [PATCH] uml: include tidying 2006-11-03 12:27:59 -08:00
trap.c [PATCH] uml: Use klibc setjmp/longjmp 2006-09-26 08:49:05 -07:00
tt.c [PATCH] uml: make TT mode compile after setjmp-related changes 2006-10-11 11:14:20 -07:00
tty_log.c [PATCH] uml: move tty logging to os-Linux 2006-03-27 08:44:38 -08:00
tty.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
uaccess.c [PATCH] uml: Use klibc setjmp/longjmp 2006-09-26 08:49:05 -07:00
umid.c [PATCH] uml: umid tidying 2007-02-11 10:51:24 -08:00
user_syms.c [PATCH] uml: export symbols added by GCC hardened 2006-05-01 18:17:45 -07:00
util.c [PATCH] uml: fix uname under setarch i386 2006-10-11 11:14:20 -07:00