Messages in this thread | | | Subject | Re: [PATCH] x86: fix PAE pmd_bad bootup warning | From | Dave Hansen <> | Date | Thu, 08 May 2008 09:42:21 -0700 |
| |
On Thu, 2008-05-08 at 18:19 +0200, Hans Rosenfeld wrote: > On Thu, May 08, 2008 at 08:51:22AM -0700, Dave Hansen wrote: > > Is there anything in your dmesg? > > mm/memory.c:127: bad pmd ffff810076801040(80000000720000e7). > > > There was a discussion on LKML in the last couple of days about > > pmd_bad() triggering on huge pages. Perhaps we're clearing the mapping > > with the pmd_none_or_clear_bad(), and *THAT* is leaking the page. > > That makes sense. I remember that explicitly munmapping the huge page > would still work, but it doesn't. I don't quite remember what I did back > then to test this, but I probably made some mistake there that led me to > some false conclusions.
I can't see how it would possibly work with the code that we have today, so I guess it was just a false assumption.
static inline int pmd_none_or_clear_bad(pmd_t *pmd) { if (pmd_none(*pmd)) return 1; if (unlikely(pmd_bad(*pmd))) { pmd_clear_bad(pmd); return 1; } return 0; }
void pmd_clear_bad(pmd_t *pmd) { pmd_ERROR(*pmd); pmd_clear(pmd); }
That pmd_clear() will simply zero out the pmd and leak the page.
Sounds like Linus had the right idea:
> I'd much rather have pdm_bad() etc fixed up instead, so that they do a > more proper test (not thinking that a PSE page is bad, since it clearly > isn't). And then, make them dependent on DEBUG_VM, because doing the > proper test will be more expensive.
-- Dave
| |