summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/include/asm/dbell.h
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2017-04-13 12:16:24 +0200
committerMichael Ellerman <mpe@ellerman.id.au>2017-04-13 15:34:34 +0200
commit6b3edefefa6752df57ad636f26baa1b0a502ddab (patch)
treebf00c8ab7b82a22703209b0ba1d0fdddb91fa00b /arch/powerpc/include/asm/dbell.h
parentpowerpc/64s: Avoid a branch for ppc_msgsnd (diff)
downloadlinux-6b3edefefa6752df57ad636f26baa1b0a502ddab.tar.xz
linux-6b3edefefa6752df57ad636f26baa1b0a502ddab.zip
powerpc/powernv: POWER9 support for msgsnd/doorbell IPI
POWER9 requires msgsync for receiver-side synchronization, and a DD1 workaround restricts IPIs to core-local. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> [mpe: Drop no longer needed asm feature macro changes] Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/include/asm/dbell.h')
-rw-r--r--arch/powerpc/include/asm/dbell.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/dbell.h b/arch/powerpc/include/asm/dbell.h
index 040944659a20..f70cbfe0ec04 100644
--- a/arch/powerpc/include/asm/dbell.h
+++ b/arch/powerpc/include/asm/dbell.h
@@ -51,6 +51,9 @@ static inline void ppc_msgsnd_sync(void)
/* sync after taking message interrupt */
static inline void ppc_msgsync(void)
{
+ /* sync is not required when taking messages from the same core */
+ __asm__ __volatile__ (ASM_FTR_IFSET(PPC_MSGSYNC " ; lwsync", "", %0)
+ : : "i" (CPU_FTR_HVMODE|CPU_FTR_ARCH_300));
}
#else /* CONFIG_PPC_BOOK3S */