Messages in this thread | | | From | Andy Lutomirski <> | Date | Thu, 25 Jan 2018 13:04:23 -0800 | Subject | Re: [RFC PATCH 1/2] x86/ibpb: Skip IBPB when we switch back to same user process |
| |
On Thu, Jan 25, 2018 at 12:46 PM, Peter Zijlstra <peterz@infradead.org> wrote: > On Thu, Jan 25, 2018 at 11:32:46AM -0800, Tim Chen wrote: >> >> This patch is not ideal as it comes with the caveats that >> patch 2 tries to close. I put it out here to see if it can prompt >> people to come up with a better solution. Keeping active_mm around would >> have been cleaner but it looks like there are issues that Andy mentioned. >> >> The "A -> idle -> A" case would not trigger IBPB if tlb_defer_switch_to_init_mm() >> is true (non pcid) as we does not change the mm. >> >> This patch tries to address the case when we do switch to init_mm and back. >> Do you still have objections to the approach in this patch >> to save the last active mm before switching to init_mm? > > I still think the existing active_mm is sufficient. Something like: > > switch_mm() > { > ... > if (prev && next != prev) > ibpb(); > ... > } > > should work. Because while the idle crud does leave_mm() and PCID does > enter_lazy_tlb() and both end up doing: switch_mm(NULL, &init_mm, NULL), > nothing there affects tsk->active_mm. > > So over the "A -> idle -> A" transition, active_mm should actually track > what you want. > >
Can we please not rely on any of the active_mm shit? That thing has really weird semantics and should just die.
That being said, just stashing last_user_mm without any refcounting should be fine. After all, the only thing anyone does with it is comparing to next, and next is always alive. Or we could use last_user_ctx_id, since we already have a never-reused ctx_id for each mm on x86.
--Andy
| |