Hi Uwe, On Tue, 2008-02-26 at 15:38 +0100, Uwe Kleine-König wrote: > Moreover a "grep PageTables /proc/meminfo" resulted in > > 9x __dec_zone_state with item == NR_PAGETABLE > 7x __inc_zone_state with item == NR_PAGETABLE > > All those 16 calles where done via __(inc|dec)_zone_page_state. > > ... some time later ... > > I got it. This code is currently in free_pgd_slow(): > > pte = pmd_page(*pmd); > pmd_clear(pmd); > dec_zone_page_state(virt_to_page((unsigned long *)pgd), NR_PAGETABLE); > pte_lock_deinit(pte); > pte_free(mm, pte); > pmd_free(mm, pmd); > > So because (since 2f569af) pte_free does dec_zone_page_state and > pte_lock_deinit, these two happen twice here. Ah, good. I wonder if there are any other pte_lock_deinit hidden in the arch code... nope, arm is the only architecture that does it. > Removing the calls to dec_zone_page_state() and pte_lock_deinit() in > free_pgd_slow() fixed it for me. That is imho the best way to fix it. > For a complete fix we might want to change the type of pte? You mean instead of a "struct page *" use a pgtable_t ? Yes, that would be cleaner even if it is the same type. -- blue skies, Martin. "Reality continues to ruin my life." - Calvin. - To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html