[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20111121155331.a1726ffe.akpm@linux-foundation.org>
Date: Mon, 21 Nov 2011 15:53:31 -0800
From: Andrew Morton <akpm@...ux-foundation.org>
To: David Daney <ddaney.cavm@...il.com>
Cc: Linus Torvalds <torvalds@...ux-foundation.org>,
David Rientjes <rientjes@...gle.com>,
linux-mips@...ux-mips.org, ralf@...ux-mips.org,
linux-kernel@...r.kernel.org, David Daney <david.daney@...ium.com>,
linux-arch@...r.kernel.org, Robin Holt <holt@....com>
Subject: Re: [patch] hugetlb: remove dummy definitions of HPAGE_MASK and
HPAGE_SIZE
On Mon, 21 Nov 2011 15:47:32 -0800
David Daney <ddaney.cavm@...il.com> wrote:
> Just to expand on this lovely topic...
>
> On 11/21/2011 02:43 PM, Linus Torvalds wrote:
> > On Mon, Nov 21, 2011 at 2:23 PM, David Daney<ddaney.cavm@...il.com> wrote:
> >>
> >> This whole comment strikes me as somewhat dishonest, as at the time David
> >> Rientjes wrote it, he knew that there were dependencies on these symbols in
> >> the linux-next tree.
> >>
> >> Now we can add these:
> >> +#define HPAGE_SHIFT ({ BUG(); 0; })
> >> +#define HPAGE_SIZE ({ BUG(); 0; })
> >> +#define HPAGE_MASK ({ BUG(); 0; })
> >
> > Hell no.
> >
> > We don't do run-time BUG() things. No way, no how.
> >
>
> These symbols are on dead code paths, so they are eliminated by the
> compiler's Dead Code Elimination (DCE) optimizations, and the BUG() code
> never gets emitted to the final executable.
>
> I agree that it is not the best thing to do, but given the current state
> of the art in build bug macros, it is the best we could have done.
>
> What I think we need instead, and for which I will send a patch soon, is
> something like this:
>
> extern void you_are_screwed() __attribute__ ((error("BUILD_BUG_ON_USED
> failed")));
> #define BUILD_BUG_ON_USED() you_are_screwed()
> #define HPAGE_SHIFT ({ BUILD_BUG_ON_USED(); 0; })
>
> This allows us to use the symbols in straight line C code without a ton
> of ugly #ifdefery, but give us build time error checking.
The way we usually handle that is to emit a call to a
this_function_does_not_exist(), so it fails at link time.
I guess we should do that to all those follow_hugetlb_page() and
friends.
gcc has had issues at times where it incorrectly emits references to
this_function_does_not_exist(), but that hasn't happened in a couple of
years as far as I know.
--
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