[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <200911051658.36265.rusty@rustcorp.com.au>
Date: Thu, 5 Nov 2009 16:58:36 +1030
From: Rusty Russell <rusty@...tcorp.com.au>
To: Stephen Rothwell <sfr@...b.auug.org.au>
Cc: Hollis Blanchard <hollisb@...ibm.com>,
Jan Beulich <JBeulich@...ell.com>, akpm@...ux-foundation.org,
linuxppc-dev@...ts.ozlabs.org, kvm-ppc@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-next@...r.kernel.org
Subject: Re: [PATCH] BUILD_BUG_ON: make it handle more cases
On Thu, 5 Nov 2009 10:50:20 am Stephen Rothwell wrote:
> Hi Rusty,
>
> On Tue, 20 Oct 2009 14:15:33 +1030 Rusty Russell <rusty@...tcorp.com.au> wrote:
> >
> > +#ifndef __OPTIMIZE__
> > +#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
> > +#else
> > +extern int __build_bug_on_failed;
> > +#define BUILD_BUG_ON(condition) \
> > + do { \
> > + ((void)sizeof(char[1 - 2*!!(condition)])); \
> > + if (condition) __build_bug_on_failed = 1; \
> > + } while(0)
> > +#endif
> > +#define MAYBE_BUILD_BUG_ON(condition) BUILD_BUG_ON(condition)
> > +
>
> I decided to try this in linux-next, but an x86_64 allmodconfig build
> gave this (gcc 4.4.0):
>
> ERROR: "__build_bug_on_failed" [drivers/net/virtio_net.ko] undefined!
> ERROR: "__build_bug_on_failed" [drivers/block/virtio_blk.ko] undefined!
>
> I assume that this is caused by the "MAYBE_BUILD_BUG_ON(fbit >= 32)" in
> virtio_has_feature() (in include/linux/virtio_config.h) which is called
> all over the place. Unfortunately, virtio_has_feature() gets uninlined
> in those two files ...
Huh? virtio_has_feature does:
if (__builtin_constant_p(fbit))
BUILD_BUG_ON(fbit >= 32);
else
BUG_ON(fbit >= 32);
So, if it's not a constant, gcc should throw away that first branch. If it
is, it should optimize it away (and no, these are not real bugs AFAICT).
I did a 4.3.3 allmodconfig with this patch on 64-bit a few days back and all
was fine. Will try 4.4.0 now.
Thanks,
Rusty.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists