From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753713AbcAZVO4 (ORCPT ); Tue, 26 Jan 2016 16:14:56 -0500 Received: from mail.skyhub.de ([78.46.96.112]:56879 "EHLO mail.skyhub.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751055AbcAZVMQ (ORCPT ); Tue, 26 Jan 2016 16:12:16 -0500 From: Borislav Petkov To: Ingo Molnar Cc: LKML Subject: [PATCH 01/10] x86/asm: Add condition codes clobber to memory barrier macros Date: Tue, 26 Jan 2016 22:12:01 +0100 Message-Id: <1453842730-28463-2-git-send-email-bp@alien8.de> X-Mailer: git-send-email 2.3.5 In-Reply-To: <1453842730-28463-1-git-send-email-bp@alien8.de> References: <1453842730-28463-1-git-send-email-bp@alien8.de> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "Michael S. Tsirkin" ADDL clobbers flags (such as CF) but barrier.h didn't tell this to gcc. Historically, gcc doesn't need them on x86, and always considers flags clobbered. We are probably missing the cc clobber in a *lot* of places for this reason. But even if not necessary, it's probably a good thing to add for documentation, and in case gcc semantics ever change. Reported-by: Borislav Petkov Signed-off-by: Michael S. Tsirkin Cc: Andrey Konovalov Cc: Andy Lutomirski Cc: Arnd Bergmann Cc: Davidlohr Bueso Cc: "H. Peter Anvin" Cc: Ingo Molnar Cc: Linus Torvalds Cc: "Paul E. McKenney" Cc: Peter Zijlstra Cc: Thomas Gleixner Cc: virtualization Link: http://lkml.kernel.org/r/1452715911-12067-2-git-send-email-mst@redhat.com Signed-off-by: Borislav Petkov --- arch/x86/include/asm/barrier.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h index 0681d2532527..5bce7865b623 100644 --- a/arch/x86/include/asm/barrier.h +++ b/arch/x86/include/asm/barrier.h @@ -15,9 +15,12 @@ * Some non-Intel clones support out of order store. wmb() ceases to be a * nop for these. */ -#define mb() alternative("lock; addl $0,0(%%esp)", "mfence", X86_FEATURE_XMM2) -#define rmb() alternative("lock; addl $0,0(%%esp)", "lfence", X86_FEATURE_XMM2) -#define wmb() alternative("lock; addl $0,0(%%esp)", "sfence", X86_FEATURE_XMM) +#define mb() asm volatile(ALTERNATIVE("lock; addl $0,0(%%esp)", "mfence", \ + X86_FEATURE_XMM2) ::: "memory", "cc") +#define rmb() asm volatile(ALTERNATIVE("lock; addl $0,0(%%esp)", "lfence", \ + X86_FEATURE_XMM2) ::: "memory", "cc") +#define wmb() asm volatile(ALTERNATIVE("lock; addl $0,0(%%esp)", "sfence", \ + X86_FEATURE_XMM2) ::: "memory", "cc") #else #define mb() asm volatile("mfence":::"memory") #define rmb() asm volatile("lfence":::"memory") -- 2.3.5