Messages in this thread | | | From | Andy Lutomirski <> | Date | Tue, 8 Dec 2020 20:13:40 -0800 | Subject | Re: [PATCH v3 3/4] membarrier: Explicitly sync remote cores when SYNC_CORE is requested |
| |
On Thu, Dec 3, 2020 at 9:07 PM Andy Lutomirski <luto@kernel.org> wrote: > > membarrier() does not explicitly sync_core() remote CPUs; instead, it > relies on the assumption that an IPI will result in a core sync. On > x86, I think this may be true in practice, but it's not architecturally > reliable. In particular, the SDM and APM do not appear to guarantee > that interrupt delivery is serializing. While IRET does serialize, IPI > return can schedule, thereby switching to another task in the same mm > that was sleeping in a syscall. The new task could then SYSRET back to > usermode without ever executing IRET. > > Make this more robust by explicitly calling sync_core_before_usermode() > on remote cores. (This also helps people who search the kernel tree for > instances of sync_core() and sync_core_before_usermode() -- one might be > surprised that the core membarrier code doesn't currently show up in a > such a search.) >
Fixes: 70216e18e519 ("membarrier: Provide core serializing command, *_SYNC_CORE")
> Cc: stable@vger.kernel.org > Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> > Signed-off-by: Andy Lutomirski <luto@kernel.org>
| |