Re: [PATCH] Allow RDTSC and RDTSCP from userspace

Andy Lutomirski
2020-04-25T19:47:36Z

> On Apr 25, 2020, at 12:10 PM, Joerg Roedel <joro@8bytes.org> wrote:
>
> ﻿On Sat, Apr 25, 2020 at 11:15:35AM -0700, Andy Lutomirski wrote:
>> shift_ist is gross. What's it for? If it's not needed, I'd rather
>> not use it, and I eventually want to get rid of it for #DB as well.
>
> The #VC handler needs to be able to nest, there is no way around that
> for various reasons, the two most important ones are:
>
> 1. The #VC -> NMI -> #VC case. #VCs can happen in the NMI
> handler, for example (but not exclusivly) for RDPMC.
>
> 2. In case of an error the #VC handler needs to print out error
> information by calling one of the printk wrappers. Those will
> end up doing IO to some console/serial port/whatever which
> will also cause #VC exceptions to emulate the access to the
> output devices.
>
> Using shift_ist is perfect for that, the only problem is the race
> condition with the NMI handler, as shift_ist does not work well with
> exceptions that can also trigger within the NMI handler. But I have
> taken care of that for #VC.
>

I assume the race you mean is:

#VC
Immediate NMI before IST gets shifted
#VC

Kaboom.

How are you dealing with this? Ultimately, I think that NMI will need to turn off IST before engaging in any funny business. Let me ponder this a bit.

>
> Regards,
>
> Joerg
>