x86_64 expertise needed re: BUG() at pageattr:107
From: John W. Linville
Date: Mon Nov 01 2004 - 17:56:26 EST
The x86_64 version of pageattr.c contains the following definition
of revert_page():
static void revert_page(unsigned long address, pgprot_t ref_prot)
{
pgd_t *pgd;
pmd_t *pmd;
pte_t large_pte;
pgd = pgd_offset_k(address);
pmd = pmd_offset(pgd, address);
BUG_ON(pmd_val(*pmd) & _PAGE_PSE);
pgprot_val(ref_prot) |= _PAGE_PSE;
large_pte = mk_pte_phys(__pa(address) & LARGE_PAGE_MASK, ref_prot);
set_pte((pte_t *)pmd, large_pte);
}
Please notice the BUG_ON() (originally at line pageattr.c:107).
I notice that the x86 version of revert_page() has no similar check.
Would someone please explain:
a) why is this a bug?;
b) what is likely to have triggered it?; and,
c) why is x86_64 different from x86?
I've Googled a few references to this problem (latest 10/10/2004),
but I've seen no solutions. I do not currently have a reproducible
test case, although I have a report (which dates from around 2.6.7)
of seeing this problem when installing the e1000 driver module.
I'd be happy to see some educated guesses... :-)
Thanks for any input!
John
--
John W. Linville
linville@xxxxxxxxxxxxx
-
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/