Messages in this thread | | | Subject | Re: adjust prefetch in free_one_pgd() | From | Alan Cox <> | Date | 02 Aug 2002 14:04:21 +0100 |
| |
On Fri, 2002-08-02 at 01:12, David Mosberger wrote: > diff -Nru a/mm/memory.c b/mm/memory.c > --- a/mm/memory.c Thu Aug 1 17:02:14 2002 > +++ b/mm/memory.c Thu Aug 1 17:02:14 2002 > @@ -110,7 +110,7 @@ > pmd = pmd_offset(dir, 0); > pgd_clear(dir); > for (j = 0; j < PTRS_PER_PMD ; j++) { > - prefetchw(pmd+j+(PREFETCH_STRIDE/16)); > + prefetchw(pmd + j + PREFETCH_STRIDE/sizeof(*pmd)); >
It isnt a case of PREFETCH_STRIDE - thats the optimal fetchahead. You must never prefetch an address beyond the end of an object. So you actually need two loops one prefetching, then one to finish the job off which does not prefetch.
Otherwise one day your page ends up against the ISA or PCI address space or something else undesirable and on some cpus the prefetch then variously confuses the PCI device or corrupts the cache.
Prefetching stuff you don't need is bad manners anyway 8)
- 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/
| |