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

Avi Kivity
2010-07-16T19:27:56Z

On 07/16/2010 09:37 PM, Linus Torvalds wrote:
> On Fri, Jul 16, 2010 at 11:28 AM, Avi Kivity<avi@redhat.com> 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.