Re: mtd: kernel BUG at arch/x86/mm/pat.c:279!

From: H. Peter Anvin
Date: Sun Sep 09 2012 - 13:01:40 EST


On 09/09/2012 08:31 AM, Linus Torvalds wrote:
On Sun, Sep 9, 2012 at 7:56 AM, Suresh Siddha <suresh.b.siddha@xxxxxxxxx> wrote:

yes but that is not a valid range I think because of the supported
physical address bit limits of the processor and also the max
architecture limit of 52 address bits.

But how could the caller possibly know that? None of those internal
PAT limits are exposed anywhere.

So doing the BUG_ON() is wrong. I'd suggest changing it to an EINVAL.

In fact, BUG_ON() is *always* wrong, unless it's a "my internal data
structures are so messed up that I cannot continue".


I suspect the right answer is doing something like:

u64 max_phys = 1ULL << boot_cpu_data.x86_phys_bits;

if (start >= max_phys || end > max_phys || start >= end)
return -EINVAL;

... although max_phys perhaps should be precalculated and stored in struct cpuinfo_x86 instead of being generated de novo.

-hpa

--
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel. I don't speak on their behalf.

--
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/