linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* prefetch inconsistency in copy_page()
@ 2017-07-11  9:42 Ard Biesheuvel
  2017-07-11 17:52 ` Will Deacon
  0 siblings, 1 reply; 5+ messages in thread
From: Ard Biesheuvel @ 2017-07-11  9:42 UTC (permalink / raw)
  To: linux-arm-kernel

Hi all,

No big deal, but I spotted an inconsistency in how copy_page() does
its prefetching. With the code as-is, it prefetches 2 lines at the
start of the function, but it is off by one line in the loop, i.e., it
prefetches 3 lines ahead (and skips a line at entry). So imo, we need
either

"""
@@ -30,9 +30,10 @@
  */
 ENTRY(copy_page)
 alternative_if ARM64_HAS_NO_HW_PREFETCH
-       # Prefetch two cache lines ahead.
+       # Prefetch three cache lines ahead.
        prfm    pldl1strm, [x1, #128]
        prfm    pldl1strm, [x1, #256]
+       prfm    pldl1strm, [x1, #384]
 alternative_else_nop_endif

        ldp     x2, x3, [x1]
"""

or

"""
@@ -50,7 +51,7 @@ alternative_else_nop_endif
        subs    x18, x18, #128

 alternative_if ARM64_HAS_NO_HW_PREFETCH
-       prfm    pldl1strm, [x1, #384]
+       prfm    pldl1strm, [x1, #256]
 alternative_else_nop_endif

        stnp    x2, x3, [x0]

"""

to make things consistent again.

Thoughts?

-- 
Ard.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-07-11 18:26 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-11  9:42 prefetch inconsistency in copy_page() Ard Biesheuvel
2017-07-11 17:52 ` Will Deacon
2017-07-11 17:53   ` Pinski, Andrew
2017-07-11 17:58     ` Ard Biesheuvel
2017-07-11 18:26       ` Will Deacon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).