Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750771AbVJ3UGM (ORCPT ); Sun, 30 Oct 2005 15:06:12 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750829AbVJ3UGM (ORCPT ); Sun, 30 Oct 2005 15:06:12 -0500 Received: from S01060013109fe3d4.vc.shawcable.net ([24.85.133.133]:33219 "EHLO montezuma.fsmlabs.com") by vger.kernel.org with ESMTP id S1750771AbVJ3UGL (ORCPT ); Sun, 30 Oct 2005 15:06:11 -0500 Date: Sun, 30 Oct 2005 12:12:13 -0800 (PST) From: Zwane Mwaikambo To: Nick Piggin cc: linux-kernel Subject: Re: [patch 1/5] i386 generic cmpxchg In-Reply-To: <4364171C.7020103@yahoo.com.au> Message-ID: References: <436416AD.3050709@yahoo.com.au> <4364171C.7020103@yahoo.com.au> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1597 Lines: 46 Hi Nick, On Sun, 30 Oct 2005, Nick Piggin wrote: +#define cmpxchg(ptr,o,n) \ +({ \ + __typeof__(*(ptr)) __ret; \ + if (likely(boot_cpu_data.x86 > 3)) \ + __ret = __cmpxchg((ptr), (unsigned long)(o), \ + (unsigned long)(n), sizeof(*(ptr))); \ + else \ + __ret = cmpxchg_386((ptr), (unsigned long)(o), \ + (unsigned long)(n), sizeof(*(ptr))); \ + __ret; \ +}) +#endif How about something similar to the following to remove the branch on optimised kernels? static inline int __is_i386(void) { #ifdef CONFIG_M386 return boot_cpu_data.x86 == 3; #else return 0 #endif } #define cmpxchg(ptr,o,n) \ ({ \ __typeof__(*(ptr)) __ret; \ if (likely(!__is_i386())) \ __ret = __cmpxchg((ptr), (unsigned long)(o), \ (unsigned long)(n), sizeof(*(ptr))); \ else \ __ret = cmpxchg_386((ptr), (unsigned long)(o), \ (unsigned long)(n), sizeof(*(ptr))); \ __ret; \ }) - 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/