| #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 (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 |
| |