I ran into some issues with the use of the dcbz instruction in the
kernel for ppc32. I'm now looking at porting our work to ppc64, and
when I looked around a bit, I found that the dcbz instruction doesn't
appear to be used in ppc64.
This leads me to ask:
1) Is it in fact true that ppc64 does not use dcbz in the kernel?
2) If so, why not? Presumably it would be a win in some cases,
otherwise they wouldn't be using it in ppc32. Is there some other
factore in play for ppc64?
Thanks,
Chris
Hi,
I ran into some issues with the use of the dcbz instruction in the
kernel for ppc32. I'm now looking at porting our work to ppc64, and
when I looked around a bit, I found that the dcbz instruction doesn't
appear to be used in ppc64.
This leads me to ask:
1) Is it in fact true that ppc64 does not use dcbz in the kernel?
2) If so, why not? Presumably it would be a win in some cases,
otherwise they wouldn't be using it in ppc32. Is there some other
factore in play for ppc64?
include/asm-ppc64/page.h:clear_page() uses it:
static __inline__ void clear_page(void *addr)
{
unsigned long lines, line_size;
line_size = systemcfg->dCacheL1LineSize;
lines = naca->dCacheL1LinesPerPage;
__asm__ __volatile__(
"mtctr %1 # clear_page\n\
1: dcbz 0,%0\n\
add %0,%0,%3\n\
bdnz+ 1b"
: "=r" (addr)
: "r" (lines), "0" (addr), "r" (line_size)
: "ctr", "memory");
}
Anton
Anton Blanchard wrote:
quoted
1) Is it in fact true that ppc64 does not use dcbz in the kernel?
2) If so, why not? Presumably it would be a win in some cases,
otherwise they wouldn't be using it in ppc32. Is there some other
factore in play for ppc64?
include/asm-ppc64/page.h:clear_page() uses it:
Hmm. As of 2.6.9 at least, clear_page() is only ever called by
clear_user_page(), which in turn is only ever called by
drivers/media/video/video-buf.c. I'm not using that driver, which
explains why the instruction didn't show up when I disassembled the kernel.
Still, ppc32 also uses it in cacheable_memzero and __copy_tofrom_user.
It's also used in cacheable_memcpy, but that routine doesn't seem to be
used anywhere.
Chris
Hmm. As of 2.6.9 at least, clear_page() is only ever called by
clear_user_page(), which in turn is only ever called by
drivers/media/video/video-buf.c. I'm not using that driver, which
explains why the instruction didn't show up when I disassembled the kernel.
Dont forget mm/memory.c:clear_user_highpage -> clear_user_page.
Anton