From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joakim Tjernlund Subject: Re: linux-next: build warning in Linus'tree Date: Wed, 26 May 2010 12:21:51 +0200 Message-ID: References: <20100526110506.f2f4f22c.sfr@canb.auug.org.au> <20100525182040.f1882d0a.akpm@linux-foundation.org> <20100526140900.5b091c16.sfr@canb.auug.org.au> <20100525234116.71889c71.akpm@linux-foundation.org> <20100526171424.447fac18.sfr@canb.auug.org.au> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Return-path: Received: from gw1.transmode.se ([213.115.205.20]:34133 "EHLO gw1.transmode.se" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752265Ab0EZKWg (ORCPT ); Wed, 26 May 2010 06:22:36 -0400 In-Reply-To: <20100526171424.447fac18.sfr@canb.auug.org.au> Sender: linux-next-owner@vger.kernel.org List-ID: To: Stephen Rothwell Cc: Andrew Morton , linux-kernel@vger.kernel.org, linux-next@vger.kernel.org, Linus Stephen Rothwell wrote on 2010/05/26 09:14:24: > > Hi Andrew, Joakim, > > On Tue, 25 May 2010 23:41:16 -0700 Andrew Morton wrote: > > > > On Wed, 26 May 2010 08:29:45 +0200 Joakim Tjernlund > wrote: > > > > > Stephen Rothwell wrote on 2010/05/26 06:09:00: > > > > > > > > On Tue, 25 May 2010 18:20:40 -0700 Andrew Morton foundation.org> wrote: > > > > > > > > > > hmpf. Does this fix? > > > > > > > > No. > > > > > > > > The problem is that __LITTLE_ENDIAN is only defined in > > > > linux/byteorder/little_endian.h which is only included by little endian > > > > architectures ... > > > > > > Ah, not sure how to fix this ATM. Perhaps best to revert > > > crc32: use __BYTE_ORDER macro for endian detection > > > for now. > > > > yup. > > We also need to revert b3b77c8caef1750ebeea1054e39e358550ea9f55 ("endian: > #define __BYTE_ORDER") in order to get rid of the other warning I pointed out: > > In file included from fs/jfs/jfs_types.h:33, > from fs/jfs/jfs_incore.h:26, > from fs/jfs/file.c:22: > fs/jfs/endian24.h:36:101: warning: "__LITTLE_ENDIAN" is not defined > > I get this warning on powerpc builds for most of the files in fs/jfs ... endian24.h has: #if (defined(__KERNEL__) && defined(__LITTLE_ENDIAN)) || (defined(__BYTE_ORDER) && (__BYTE_ORDER == __LITTLE_ENDIAN)) That won't work for BE CPU's. Perhaps something like this will? #if defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN) && (__BYTE_ORDER == __LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN) The kernel borrows __LITTLE_ENDIAN/__BIG_ENDIAN from user space but does not impl. the full semantics that user space has. Adding full user space semantics isn't easy as it clashes with current use of __LITTLE_ENDIAN/__BIG_ENDIAN. If my suggestion above works, then one could start transforming current uses of __BYTE_ORDER, into similar constructs and once all are done, #define both __LITTLE_ENDIAN/__BIG_ENDIAN and move back to #if __BYTE_ORDER == __LITTLE_ENDIAN Jocke