Hello,
With the latest linaro-kernel release (ll_20130321.0), LPAE seems to be broken on Versatile Express (and possible other targets too) as it hangs very early in the boot process when enabled. KVM builds depend on LPAE, so it would be good to see this fixed on next release.
Attached you can find said fix.
Regards.
On 04/04/2013 12:13 PM, Alexander Spyridakis wrote:
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index b4f9e2b0..3e8f2b2 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c @@ -634,6 +634,7 @@ static void __init alloc_init_pte(pmd_t *pmd, unsigned long addr, { pte_t *start_pte = early_pte_alloc(pmd); pte_t *pte = start_pte + pte_index(addr);
- early_pte_install(pmd, start_pte, type->prot_l1);
/* If replacing a section mapping, the whole section must be replaced */ BUG_ON(pmd_bad(*pmd) && ((addr | end) & ~PMD_MASK)); @@ -642,7 +643,6 @@ static void __init alloc_init_pte(pmd_t *pmd, unsigned long addr, set_pte_ext(pte, pfn_pte(pfn, __pgprot(type->prot_pte)), 0); pfn++; } while (pte++, addr += PAGE_SIZE, addr != end);
- early_pte_install(pmd, start_pte, type->prot_l1);
}
We have got an alternate fix. Can you please check if it works for you?
--- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c @@ -636,7 +636,7 @@ static void __init alloc_init_pte(pmd_t *pmd, unsigned long addr, pte_t *pte = start_pte + pte_index(addr);
/* If replacing a section mapping, the whole section must be replaced */ - BUG_ON(pmd_bad(*pmd) && ((addr | end) & ~PMD_MASK)); + BUG_ON(!pmd_none(*pmd) && pmd_bad(*pmd) && ((addr | end) & ~PMD_MASK));
do { set_pte_ext(pte, pfn_pte(pfn, __pgprot(type->prot_pte)), 0);
linaro-kernel@lists.linaro.org