Thread (27 messages) 27 messages, 8 authors, 2017-08-25

Re: [PATCH 3/3] x86/efi: Use efi_switch_mm() rather than manually twiddling with cr3

From: Mark Rutland <mark.rutland@arm.com>
Date: 2017-08-16 17:16:09
Also in: lkml

On Wed, Aug 16, 2017 at 09:14:41AM -0700, Andy Lutomirski wrote:
On Wed, Aug 16, 2017 at 5:57 AM, Matt Fleming [off-list ref] wrote:
quoted
On Wed, 16 Aug, at 12:03:22PM, Mark Rutland wrote:
quoted
I'd expect we'd abort at a higher level, not taking any sample. i.e.
we'd have the core overflow handler check in_funny_mm(), and if so, skip
the sample, as with the skid case.
FYI, this is my preferred solution for x86 too.
One option for the "funny mm" flag would be literally the condition
current->mm != current->active_mm.  I *think* this gets all the cases
right as long as efi_switch_mm is careful with its ordering and that
the arch switch_mm() code can handle the resulting ordering.  (x86's
can now, I think, or at least will be able to in 4.14 -- not sure
about other arches).
For arm64 we'd have to rework things a bit to get the ordering right
(especially when we flip to/from the idmap), but otherwise this sounds sane to
me.
That being said, there's a totally different solution: run EFI
callbacks in a kernel thread.  This has other benefits: we could run
those callbacks in user mode some day, and doing *that* in a user
thread seems like a mistake.
I think that wouldn't work for CPU-bound perf events (which are not
ctx-switched with the task).

It might be desireable to do that anyway, though.

Thanks,
Mark.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help