Re: [patch 2/2] x86 NMI-safe INT3 and Page Fault

From: Avi Kivity
Date: Fri Jul 16 2010 - 15:28:00 EST


On 07/16/2010 09:37 PM, Linus Torvalds wrote:
On Fri, Jul 16, 2010 at 11:28 AM, Avi Kivity<avi@xxxxxxxxxx> wrote:
Use kmalloc and percpu pointers, it's not that onerous.
What people don't seem to understand is that WE SHOULD NOT MAKE NMI
FORCE US TO DO "STRANGE" CODE IN CODE-PATHS THAT HAVE NOTHING
WHAT-SO-EVER TO DO WITH NMI.

I'm shouting, because this point seems to have been continually
missed. It was missed in the original patches, and it's been missed in
the discussions.

Non-NMI code should simply never have to even _think_ about NMI's. Why
should it? It should just do whatever comes "natural" within its own
context.


But we're not talking about non-NMI code. The 8k referred to in the original patch are buffers used by NMI stack recording. Module code vmalloc_sync_all() is only need by code that is executed during NMI, hence must be NMI aware.

This is why I've been pushing for the "let's just fix NMI" approach.
Not adding random hacks to other code sequences that have nothing
what-so-ever to do with NMI.

"fixing NMI" will result in code that is understandable by maybe three people after long and hard thinking. NMI can happen in too many semi-defined contexts, so there will be plenty of edge cases. I'm not sure we can ever trust such trickery.

So don't add NMI code to the page fault code. Not to the debug code,
or to the module loading code. Don't say "use special allocations
because the NMI code may care about these particular data structures".
Because that way lies crap and unmaintainability.

If NMI code can call random hooks and access random data, yes. But I don't think we're at that point yet.


--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/