Messages in this thread Patch in this message | | | Date | Sat, 3 Apr 2004 19:02:58 +0200 | From | Andrea Arcangeli <> | Subject | Re: [RFC][PATCH 1/3] radix priority search tree - objrmap complexity fix |
| |
can you try this potential fix too? (maybe you want to try this first thing)
this is from Hugh's anobjramp patches.
I merged it once, then I got a crash report, so I backed it out since it was working anyways, but it was due a merging error that it didn't work correctly, the below version should be fine and it seems really needed.
I'll upload a new kernel with this applied.
--- x/arch/ppc/mm/pgtable.c.~1~ 2004-02-20 17:26:33.000000000 +0100 +++ x/arch/ppc/mm/pgtable.c 2004-04-03 18:51:35.072468040 +0200 @@ -86,9 +86,14 @@ pte_t *pte_alloc_one_kernel(struct mm_st extern int mem_init_done; extern void *early_get_page(void); - if (mem_init_done) + if (mem_init_done) { pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT); - else + if (pte) { + struct page *ptepage = virt_to_page(pte); + ptepage->mapping = (void *) mm; + ptepage->index = address & PMD_MASK; + } + } else pte = (pte_t *)early_get_page(); if (pte) clear_page(pte); @@ -106,8 +111,11 @@ struct page *pte_alloc_one(struct mm_str #endif pte = alloc_pages(flags, 0); - if (pte) + if (pte) { + pte->mapping = (void *) mm; + pte->index = address & PMD_MASK; clear_highpage(pte); + } return pte; } @@ -116,6 +124,7 @@ void pte_free_kernel(pte_t *pte) #ifdef CONFIG_SMP hash_page_sync(); #endif + virt_to_page(pte)->mapping = NULL; free_page((unsigned long)pte); } @@ -124,6 +133,7 @@ void pte_free(struct page *pte) #ifdef CONFIG_SMP hash_page_sync(); #endif + pte->mapping = NULL; __free_page(pte); } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |