On Tue, Aug 29, 2006 at 10:56:31PM +0900, Atsushi Nemoto wrote: > The setup_sigcontect()/restore_sigcontext() might sleep on > put_user()/get_user() with preemption disabled (i.e. atomic context). > Sleeping in atomic context is not allowed. This patch fixes this > problem by rewriting restore_fp_context()/save_fp_context(). So with this patch applied the context will be copied around twice, first save the fp registers to memory then copied from memory to userspace and as the result the non-preemptible kernel will suffer from fixing the preemptible ... To me it looks like the real problem that setup_sigcontext and restore_sigcontext need to disable preemption. And the reason for that is probably that 87d54649f67d8ffe0a8d8176de8c210a6c4bb4a7 around 2.6.9 took the wrong. The better fix would probably have been to allow at least some fp instructions from kernel mode. The sole reason for the die_if_kernel() call is to tell people attempting to put FPU code into the kernel that they're screwing up. Ralf