Cc: Andi Kleen <andi@...>, Maxim Levitsky <maximlevitsky@...>, Ingo Molnar <mingo@...>, <linux-kernel@...>, Andrew Morton <akpm@...>, Thomas Gleixner <tglx@...>, H. Peter Anvin <hpa@...>, Jason Wessel <jason.wessel@...>
That is indeed horrible code. No way will I merge anything that has things
like that even in it's *history* (ie somebody needs to re-generate the
tree without code like that - some things should not be allowed to exist).
That said, while just using "probe_kernel_addr()" is certainly much
better, it's still really inefficient. If you actually want to do a "safe
memory copy", then the right way to do that is basically to do
pagefault_disable();
leftover = __copy_from_user_inatomic(dst, src, count);
pagefault_enable();
if (leftover)
handle_the_fact_that_the_copy_didnt_complete();
which should even be reasonably efficient and should work in all contexts
(hardware interrupts disabled, spinlocks held, you name it).
So all those "kgdb_{get|set}_mem()" things seem bogus (they also have
insane calling semantics - return NULL or errptr? Why not just return an
integer error code?
Linus
--