'And' the given page address with PAGE_MASK to help GCC.

With the patch:

        00000024 <__flush_dcache_icache>:
          24:   54 63 00 26     rlwinm  r3,r3,0,0,19
          28:   39 40 00 40     li      r10,64
          2c:   7c 69 1b 78     mr      r9,r3
          30:   7d 49 03 a6     mtctr   r10
          34:   7c 00 48 6c     dcbst   0,r9
          38:   39 29 00 20     addi    r9,r9,32
          3c:   7c 00 48 6c     dcbst   0,r9
          40:   39 29 00 20     addi    r9,r9,32
          44:   42 00 ff f0     bdnz    34 <__flush_dcache_icache+0x10>
          48:   7c 00 04 ac     hwsync
          4c:   39 20 00 40     li      r9,64
          50:   7d 29 03 a6     mtctr   r9
          54:   7c 00 1f ac     icbi    0,r3
          58:   38 63 00 20     addi    r3,r3,32
          5c:   7c 00 1f ac     icbi    0,r3
          60:   38 63 00 20     addi    r3,r3,32
          64:   42 00 ff f0     bdnz    54 <__flush_dcache_icache+0x30>
          68:   7c 00 04 ac     hwsync
          6c:   4c 00 01 2c     isync
          70:   4e 80 00 20     blr

Without the patch:

        00000024 <__flush_dcache_icache>:
          24:   54 6a 00 34     rlwinm  r10,r3,0,0,26
          28:   39 23 10 1f     addi    r9,r3,4127
          2c:   7d 2a 48 50     subf    r9,r10,r9
          30:   55 29 d9 7f     rlwinm. r9,r9,27,5,31
          34:   41 82 00 94     beq     c8 <__flush_dcache_icache+0xa4>
          38:   71 28 00 01     andi.   r8,r9,1
          3c:   38 c9 ff ff     addi    r6,r9,-1
          40:   7d 48 53 78     mr      r8,r10
          44:   7d 27 4b 78     mr      r7,r9
          48:   40 82 00 6c     bne     b4 <__flush_dcache_icache+0x90>
          4c:   54 e7 f8 7e     rlwinm  r7,r7,31,1,31
          50:   7c e9 03 a6     mtctr   r7
          54:   7c 00 40 6c     dcbst   0,r8
          58:   39 08 00 20     addi    r8,r8,32
          5c:   7c 00 40 6c     dcbst   0,r8
          60:   39 08 00 20     addi    r8,r8,32
          64:   42 00 ff f0     bdnz    54 <__flush_dcache_icache+0x30>
          68:   7c 00 04 ac     hwsync
          6c:   71 28 00 01     andi.   r8,r9,1
          70:   39 09 ff ff     addi    r8,r9,-1
          74:   40 82 00 2c     bne     a0 <__flush_dcache_icache+0x7c>
          78:   55 29 f8 7e     rlwinm  r9,r9,31,1,31
          7c:   7d 29 03 a6     mtctr   r9
          80:   7c 00 57 ac     icbi    0,r10
          84:   39 4a 00 20     addi    r10,r10,32
          88:   7c 00 57 ac     icbi    0,r10
          8c:   39 4a 00 20     addi    r10,r10,32
          90:   42 00 ff f0     bdnz    80 <__flush_dcache_icache+0x5c>
          94:   7c 00 04 ac     hwsync
          98:   4c 00 01 2c     isync
          9c:   4e 80 00 20     blr
          a0:   7c 00 57 ac     icbi    0,r10
          a4:   2c 08 00 00     cmpwi   r8,0
          a8:   39 4a 00 20     addi    r10,r10,32
          ac:   40 82 ff cc     bne     78 <__flush_dcache_icache+0x54>
          b0:   4b ff ff e4     b       94 <__flush_dcache_icache+0x70>
          b4:   7c 00 50 6c     dcbst   0,r10
          b8:   2c 06 00 00     cmpwi   r6,0
          bc:   39 0a 00 20     addi    r8,r10,32
          c0:   40 82 ff 8c     bne     4c <__flush_dcache_icache+0x28>
          c4:   4b ff ff a4     b       68 <__flush_dcache_icache+0x44>
          c8:   7c 00 04 ac     hwsync
          cc:   7c 00 04 ac     hwsync
          d0:   4c 00 01 2c     isync
          d4:   4e 80 00 20     blr

Signed-off-by: Christophe Leroy <christophe.le...@csgroup.eu>
---
 arch/powerpc/mm/mem.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index 9a5542f4de92..460ab5000a3f 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -522,7 +522,7 @@ EXPORT_SYMBOL(flush_dcache_icache_page);
  */
 static void __flush_dcache_icache(void *p)
 {
-       unsigned long addr = (unsigned long)p;
+       unsigned long addr = (unsigned long)p & PAGE_MASK;
 
        clean_dcache_range(addr, addr + PAGE_SIZE);
 
-- 
2.25.0

Reply via email to