From patchwork Wed Apr 1 08:13:06 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 25475 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id 7A2A1DDDF9 for ; Wed, 1 Apr 2009 19:14:05 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761464AbZDAIN2 (ORCPT ); Wed, 1 Apr 2009 04:13:28 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1761371AbZDAIN1 (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 Received: from [127.0.0.1] (localhost [127.0.0.1]) by gw1.cosmosbay.com (8.13.7/8.13.7) with ESMTP id n318D6Rr004555; Wed, 1 Apr 2009 10:13:06 +0200 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 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: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 --- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html 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(); \ } \