Link: https://lore.kernel.org/r/20260217200002.683975158@linuxfoundation.org Tested-by: Florian Fainelli <florian.fainelli@broadcom.com> Tested-by: Takeshi Ogasawara <takeshi.ogasawara@futuring-girl.com> Tested-by: Peter Schneider <pschneider1968@googlemail.com> Tested-by: Jon Hunter <jonathanh@nvidia.com> Tested-by: Salvatore Bonaccorso <carnil@debian.org> Tested-by: Brett A C Sheffield <bacs@librecast.net> Tested-by: Mark Brown <broonie@kernel.org> Tested-by: Luna Jernberg <droidbittin@gmail.com> Tested-by: Ronald Warsow <rwarsow@gmx.de> Tested-by: Justin M. Forbes <jforbes@fedoraproject.org> Tested-by: Ron Economos <re@w6rz.net> Tested-by: Miguel Ojeda <ojeda@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
29 lines
877 B
C
29 lines
877 B
C
#ifndef _ASM_POWERPC_MEMBARRIER_H
|
|
#define _ASM_POWERPC_MEMBARRIER_H
|
|
|
|
static inline void membarrier_arch_switch_mm(struct mm_struct *prev,
|
|
struct mm_struct *next,
|
|
struct task_struct *tsk)
|
|
{
|
|
/*
|
|
* Only need the full barrier when switching between processes.
|
|
* Barrier when switching from kernel to userspace is not
|
|
* required here, given that it is implied by mmdrop(). Barrier
|
|
* when switching from userspace to kernel is not needed after
|
|
* store to rq->curr.
|
|
*/
|
|
if (IS_ENABLED(CONFIG_SMP) &&
|
|
likely(!(atomic_read(&next->membarrier_state) &
|
|
(MEMBARRIER_STATE_PRIVATE_EXPEDITED |
|
|
MEMBARRIER_STATE_GLOBAL_EXPEDITED)) || !prev))
|
|
return;
|
|
|
|
/*
|
|
* The membarrier system call requires a full memory barrier
|
|
* after storing to rq->curr, before going back to user-space.
|
|
*/
|
|
smp_mb();
|
|
}
|
|
|
|
#endif /* _ASM_POWERPC_MEMBARRIER_H */
|