Messages in this thread | | | From | Andy Lutomirski <> | Subject | Re: [patch 13/16] x86/entry: Move irqflags and context tracking to C for simple idtentries | Date | Wed, 26 Feb 2020 11:15:31 -0800 |
| |
> On Feb 26, 2020, at 8:28 AM, Peter Zijlstra <peterz@infradead.org> wrote: > > On Wed, Feb 26, 2020 at 07:11:39AM -0800, Andy Lutomirski wrote: > >> In some sense, this is a weakness of the magic macro approach. Some >> of the entries just want to have code that runs before all the entry >> fixups. This is an example of it. So are the cr2 reads. It can all >> be made to work, but it's a bit gross. > > Right. In my current pile (new patche since last posting) I also have > one that makes #DB save-clear/restore DR7. > > I got it early enough that only a watchpoint on the task stack can still > screw us over, since I also included your patch that excludes > cpu_entry_area.
Hmm. It would be nice to prevent watchpoints on the task stack, but that would need some trickery. It could be done.
> > Pushing it earlier still would require calling into C from the entry > stack, which I know is on your todo list, but we're not quite there yet.
Indeed.
This is my main objection to the DEFINE_IDTENTRY stuff. It’s *great* for the easy cases, but it’s not so great for the nasty cases. Maybe we should open code PF, MC, DB, etc. (And kill the kvm special case for PF. I have a working patch for that and I can send it.)
Anyway, this isn’t actually what I was concerned about. I meant DR6, not DR7. Specifically, if we get traced too early in do_debug / exc_debug, we can recursively debug and clobber DR6. The result will be incorrect behavior in the outer do_debug. We can fix this the same way we handle CR2. I just haven’t done it on the existing entry code because it’s too messy.
| |