Messages in this thread Patch in this message | | | Date | Tue, 22 Mar 2005 16:03:57 -0800 | From | "David S. Miller" <> | Subject | Re: [PATCH 1/5] freepgt: free_pgtables use vma list |
| |
Ok, this patch, on top of Hugh's original freepgt patch, gets me a working system. It includes Hugh's bug fix, plus the ceiling masking roll-over fix of mine.
It should get ppc working too, I bet.
--- mm/memory.c.hugh 2005-03-22 16:01:07.000000000 -0800 +++ mm/memory.c 2005-03-22 16:00:08.000000000 -0800 @@ -127,11 +127,6 @@ unsigned long next; unsigned long start; - if (end - 1 > ceiling - 1) - end -= PMD_SIZE; - if (addr > end - 1) - return; - start = addr; pmd = pmd_offset(pud, addr); do { @@ -144,7 +139,11 @@ start &= PUD_MASK; if (start < floor) return; - ceiling &= PUD_MASK; + if (ceiling) { + ceiling &= PUD_MASK; + if (!ceiling) + return; + } if (end - 1 > ceiling - 1) return; @@ -173,7 +172,11 @@ start &= PGDIR_MASK; if (start < floor) return; - ceiling &= PGDIR_MASK; + if (ceiling) { + ceiling &= PGDIR_MASK; + if (!ceiling) + return; + } if (end - 1 > ceiling - 1) return; @@ -201,8 +204,14 @@ if (!addr) return; } - ceiling &= PMD_MASK; - if (addr > ceiling - 1) + if (ceiling) { + ceiling &= PMD_MASK; + if (!ceiling) + return; + } + if (end - 1 > ceiling - 1) + end -= PMD_SIZE; + if (addr > end - 1) return; start = addr; @@ -214,7 +223,7 @@ free_pud_range(tlb, pgd, addr, next, floor, ceiling); } while (pgd++, addr = next, addr != end); - if (!tlb_is_full_mm(tlb) && start < end) + if (!tlb_is_full_mm(tlb)) flush_tlb_pgtables(tlb->mm, start, end); } - 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/
| |