typedef unsigned long pte_basic_t;
 #endif
 
+#include <asm/bug.h>
+
 /*
  * Clear page using the dcbz instruction, which doesn't cause any
  * memory traffic (except to write out any cache lines which get
 {
        unsigned int i;
 
+       WARN_ON((unsigned long)addr & (L1_CACHE_BYTES - 1));
+
        for (i = 0; i < PAGE_SIZE / L1_CACHE_BYTES; i++, addr += L1_CACHE_BYTES)
                dcbz(addr);
 }
 
        stwu    r9,16(r3)
 
 _GLOBAL(copy_page)
+       rlwinm  r5, r3, 0, L1_CACHE_BYTES - 1
        addi    r3,r3,-4
+
+0:     twnei   r5, 0   /* WARN if r3 is not cache aligned */
+       EMIT_BUG_ENTRY 0b,__FILE__,__LINE__, BUGFLAG_WARNING
+
        addi    r4,r4,-4
 
        li      r5,4