[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <A4E714B9-ECBA-4984-986C-02B4EAF5018C@amacapital.net>
Date: Wed, 26 Feb 2020 11:15:31 -0800
From: Andy Lutomirski <luto@...capital.net>
To: Peter Zijlstra <peterz@...radead.org>
Cc: Thomas Gleixner <tglx@...utronix.de>,
LKML <linux-kernel@...r.kernel.org>, X86 ML <x86@...nel.org>,
Steven Rostedt <rostedt@...dmis.org>,
Brian Gerst <brgerst@...il.com>,
Juergen Gross <JGross@...e.com>,
Paolo Bonzini <pbonzini@...hat.com>,
Arnd Bergmann <arnd@...db.de>
Subject: Re: [patch 13/16] x86/entry: Move irqflags and context tracking to C for simple idtentries
> On Feb 26, 2020, at 8:28 AM, Peter Zijlstra <peterz@...radead.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.
Powered by blists - more mailing lists