Messages in this thread | | | Date | Sun, 09 Sep 2012 10:01:33 -0700 | From | "H. Peter Anvin" <> | Subject | Re: mtd: kernel BUG at arch/x86/mm/pat.c:279! |
| |
On 09/09/2012 08:31 AM, Linus Torvalds wrote: > On Sun, Sep 9, 2012 at 7:56 AM, Suresh Siddha <suresh.b.siddha@intel.com> 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.
| |