--- mm/memory.c 25 Jan 2002 20:15:16 -0000 1.2 +++ mm/memory.c 13 May 2002 00:05:05 -0000 @@ -118,8 +118,11 @@ static inline void free_one_pgd(pgd_t * } pmd = pmd_offset(dir, 0); pgd_clear(dir); - for (j = 0; j < PTRS_PER_PMD ; j++) { + for (j = 0; j < (PTRS_PER_PMD - (PREFETCH_STRIDE/sizeof(*pmd))) ; j++) { prefetchw(pmd + j + PREFETCH_STRIDE/sizeof(*pmd)); + free_one_pmd(pmd+j); + } + for (; j < PTRS_PER_PMD ; j++) { free_one_pmd(pmd+j); } pmd_free(pmd);