Re: [patch] hugetlb: remove dummy definitions of HPAGE_MASK andHPAGE_SIZE

From: Andrew Morton
Date: Mon Nov 21 2011 - 18:53:35 EST


On Mon, 21 Nov 2011 15:47:32 -0800
David Daney <ddaney.cavm@xxxxxxxxx> 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@xxxxxxxxx> 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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/