Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761531AbZDAINs (ORCPT ); Wed, 1 Apr 2009 04:13:48 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1761392AbZDAIN1 (ORCPT ); Wed, 1 Apr 2009 04:13:27 -0400 Received: from gw1.cosmosbay.com ([212.99.114.194]:50577 "EHLO gw1.cosmosbay.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759544AbZDAIN0 (ORCPT ); Wed, 1 Apr 2009 04:13:26 -0400 Message-ID: <49D32212.80607@cosmosbay.com> Date: Wed, 01 Apr 2009 10:13:06 +0200 From: Eric Dumazet User-Agent: Thunderbird 2.0.0.21 (Windows/20090302) MIME-Version: 1.0 To: Ingo Molnar , Tejun Heo CC: linux kernel , Linux Netdev List , Joe Perches Subject: [PATCH] x86: percpu_to_op() misses memory and flags clobbers Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-1.6 (gw1.cosmosbay.com [0.0.0.0]); Wed, 01 Apr 2009 10:13:06 +0200 (CEST) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1645 Lines: 50 While playing with new percpu_{read|write|add|sub} stuff in network tree, I found x86 asm was a litle bit optimistic. We need to tell gcc that percpu_{write|add|sub|or|xor} are modyfing memory and possibly eflags. We could add another parameter to percpu_to_op() to separate the plain "mov" case (not changing eflags), but let keep it simple for the moment. Signed-off-by: Eric Dumazet diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h index aee103b..fd4f8ec 100644 --- a/arch/x86/include/asm/percpu.h +++ b/arch/x86/include/asm/percpu.h @@ -82,22 +82,26 @@ do { \ case 1: \ asm(op "b %1,"__percpu_arg(0) \ : "+m" (var) \ - : "ri" ((T__)val)); \ + : "ri" ((T__)val) \ + : "memory", "cc"); \ break; \ case 2: \ asm(op "w %1,"__percpu_arg(0) \ : "+m" (var) \ - : "ri" ((T__)val)); \ + : "ri" ((T__)val) \ + : "memory", "cc"); \ break; \ case 4: \ asm(op "l %1,"__percpu_arg(0) \ : "+m" (var) \ - : "ri" ((T__)val)); \ + : "ri" ((T__)val) \ + : "memory", "cc"); \ break; \ case 8: \ asm(op "q %1,"__percpu_arg(0) \ : "+m" (var) \ - : "re" ((T__)val)); \ + : "re" ((T__)val) \ + : "memory", "cc"); \ break; \ default: __bad_percpu_size(); \ } \ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/