Re: sparsemem panic in 2.6.17-rc5-mm1 and -mm2

Andrew Morton
2006-06-07T16:33:26Z

On Wed, 07 Jun 2006 10:26:03 +0100
Andy Whitcroft <apw@shadowen.org> wrote:

> > btw Andy, that UNALIGNED_ZONE_BOUNDARIES message is useless. Only 0.1% of
> > users even have the knowledge how to recompile their kernel, let alone the
> > inclination. Can we do something smarter here?
>
> Yes, valid point there. The overall plan is that this should never come
> out as the option should be on unless the architecture is ensuring
> alignment. Right now the only architecture which is so marked is x86.
> I wonder if we should also be tainting the kernel at that point so its
> obvious to 'us' that a kernel has this problem?

Better to make things just work if we can.

> The other option is to just turn the check on all the time. It is two
> shift and mask + a compare on two cache lines that we definatly are
> examining anyhow to make the merge checks.

Sounds OK to me.

Note that the code can be optimised:

if (page_zone_id(page) != page_zone_id(buddy))

...

static inline int page_zone_id(struct page *page)
{
return (page->flags >> ZONETABLE_PGSHIFT) & ZONETABLE_MASK;
}

We don't need to perform the shift to make that comparison. If the
compiler's sufficiently smart it will be able to optimise that for us.

<checks>

shrl $30, %edx #, <variable>.flags
shrl $30, %eax #, <variable>.flags
cmpl %eax, %edx # <variable>.flags, <variable>.flags

Nope, not smart enough.