[PATCH] uml: fix hang in TT mode on fault
authorPaolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Fri, 23 Sep 2005 04:44:16 +0000 (21:44 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 23 Sep 2005 05:17:36 +0000 (22:17 -0700)
commit0d9b42501b8cb3fa965c3543b6777714db68e799
treec2be2cd1eb19e04c49d22ec77119973fa8f0ea13
parent842857a6602ab548ebce017cf1ea84332a59706d
[PATCH] uml: fix hang in TT mode on fault

The current code doesn't handle well general protection faults on the host -
it thinks that cr2 is always the address of a page fault.  While actually, on
general protection faults, that address is not accessible, so we'd better
assume we couldn't satisfy the fault.  Currently instead we think we've fixed
it, so we go back, retry the instruction and fault again endlessly.

This leads to the kernel hanging when doing copy_from_user(dest, -1, ...) in
TT mode, since reading *(-1) causes a GFP, and we don't support kernel
preemption.

Thanks to Luo Xin for testing UML with LTP and reporting the failures he got.

Cc: Luo Xin <luothing@sina.com>
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Cc: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/um/kernel/trap_kern.c
arch/um/kernel/tt/uaccess_user.c