All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: James Bottomley <James.Bottomley@SteelEye.com>
Cc: "Cameron, Steve" <Steve.Cameron@hp.com>,
	"Miller, Mike (OS Dev)" <Mike.Miller@hp.com>,
	Hisashi Hifumi <hifumi.hisashi@oss.ntt.co.jp>,
	jens.axboe@oracle.com, linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org
Subject: Re: [PATCH] cciss: Fix warnings during compilation under 32bitenvironment
Date: Fri, 20 Apr 2007 14:12:18 -0700	[thread overview]
Message-ID: <20070420141218.a0222472.akpm@linux-foundation.org> (raw)
In-Reply-To: <1177100459.3718.45.camel@mulgrave.il.steeleye.com>

On Fri, 20 Apr 2007 16:20:59 -0400
James Bottomley <James.Bottomley@SteelEye.com> wrote:

> On Fri, 2007-04-20 at 12:30 -0700, Andrew Morton wrote:
> > On Fri, 20 Apr 2007 14:50:06 -0400
> > James Bottomley <James.Bottomley@SteelEye.com> wrote:
> > 
> > > > CONFIG_LBD=y gives us an additional 3kb of instructions on i386
> > > > allnoconfig.  Other architectures might do less well.  It's not a huge
> > > > difference, but that's the way in which creeping bloatiness happens.
> > > 
> > > OK, sure, but if we really care about this saving, then unconditionally
> > > casting to u64 is therefore wrong as well ... this is starting to open
> > > quite a large can of worms ...
> > > 
> > > For the record, if we have to do this, I fancy sector_upper_32() ... we
> > > should already have some similar accessor for dma_addr_t as well.
> > 
> > hm.  How about this?
> > 
> > --- a/include/linux/kernel.h~upper-32-bits
> > +++ a/include/linux/kernel.h
> > @@ -40,6 +40,17 @@ extern const char linux_proc_banner[];
> >  #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
> >  #define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
> >  
> > +/**
> > + * upper_32_bits - return bits 32-63 of a number
> > + * @n: the number we're accessing
> > + *
> > + * A basic shift-right of a 64- or 32-bit quantity.  Use this to suppress
> > + * the "right shift count >= width of type" warning when that quantity is
> > + * 32-bits.
> > + */
> > +#define upper_32_bits(n) (((u64)(n)) >> 32)
> 
> Won't this have the unwanted side effect of promoting everything in a
> calculation to long long on 32 bit platforms, even if n was only 32
> bits?

bummer.

> > +
> > +
> >  #define	KERN_EMERG	"<0>"	/* system is unusable			*/
> >  #define	KERN_ALERT	"<1>"	/* action must be taken immediately	*/
> >  #define	KERN_CRIT	"<2>"	/* critical conditions			*/
> > _
> > 
> > It seems to generate the desired code.  I avoided Alan's ((n >> 31) >> 1)
> > trick because it'll generate peculiar results with signed 64-bit
> > quantities.
> 
> I've seen the trick done similarly with ((n >> 16) >> 16) which
> shouldn't have the issue.

That works if we know the caller is treating the return value as 32 bits,
but we don't know that.

If we have

#define upper_32_bits(x)  ((x >> 16) >> 16)

then

	upper_32_bits(0x8888777766665555)

will return 0x88887777 if it's treated as 32-bits, but it'll return
0xffffffff88887777 if the caller is using 64-bits.

I spose

#define upper_32_bits(x)  ((u32)((x >> 16) >> 16))

will do the trick.



  reply	other threads:[~2007-04-20 21:12 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <6.0.0.20.2.20070418160231.043f23c8@172.19.0.2>
2007-04-19 15:09 ` [PATCH] cciss: Fix warnings during compilation under 32bit environment Miller, Mike (OS Dev)
2007-04-19 15:09   ` Miller, Mike (OS Dev)
2007-04-19 15:18   ` James Bottomley
2007-04-19 15:18     ` James Bottomley
2007-04-19 16:12     ` Miller, Mike (OS Dev)
2007-04-19 16:12       ` Miller, Mike (OS Dev)
2007-04-19 16:22       ` James Bottomley
2007-04-19 16:26         ` [PATCH] cciss: Fix warnings during compilation under 32bitenvironment Miller, Mike (OS Dev)
2007-04-19 16:26           ` Miller, Mike (OS Dev)
2007-04-19 16:27         ` Cameron, Steve
2007-04-19 16:27           ` Cameron, Steve
2007-04-20  5:20           ` Andrew Morton
2007-04-20  5:20             ` Andrew Morton
2007-04-20 13:10             ` James Bottomley
2007-04-20 13:36               ` Alan Cox
2007-04-20 18:43               ` Andrew Morton
2007-04-20 18:50                 ` James Bottomley
2007-04-20 19:30                   ` Andrew Morton
2007-04-20 20:20                     ` James Bottomley
2007-04-20 21:12                       ` Andrew Morton [this message]
2007-04-20 21:39                         ` John Anthony Kazos Jr.
2007-04-21  0:55                           ` [PATCH] utilities: add helper functions for safe 64-bit integer operations as 32-bit halves John Anthony Kazos Jr.
2007-04-21 10:08                             ` Andrew Morton
2007-04-21 13:06                               ` John Anthony Kazos Jr.
2007-04-21 21:01                               ` Alan Cox
2007-04-21 21:06                                 ` Andrew Morton
2007-04-22  9:18                                   ` Christoph Hellwig
2007-04-22 12:38                                     ` Alan Cox
2007-04-22 12:35                                       ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070420141218.a0222472.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=James.Bottomley@SteelEye.com \
    --cc=Mike.Miller@hp.com \
    --cc=Steve.Cameron@hp.com \
    --cc=hifumi.hisashi@oss.ntt.co.jp \
    --cc=jens.axboe@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.