I recently encountered an issue in a custom Linux kernel (2.6.31.5, x86) driver where copy_to_user would periodically not copy any bytes to user space. It would return the coun
Page faults are not mask-able interrupts. In fact, they are not technically interrupts at all - but rather exceptions, although I agree the difference is more semantic.
The reason your copy_to_user failed when you called it in atomic context with interrupts disabled is because the code has an explicit check for this.
See http://lxr.free-electrons.com/source/arch/x86/lib/usercopy_32.c#L575