While the performance varies quite a bit on older (pre-ERMS) and newer (ERMS) hardware, so far we've been going with just a single flavor of these two functions, and oddly enough with ones not consistent with one another. Using plain memcpy() / memset() on MMIO (video frame buffer) is generally okay, but the ERMS variant of memcpy() turned out to regress (boot) performance in a way easily visible to the human eye.
v3, apart from the new 1st patch, submitted mainly upon request, as otherwise there was just some re-basing over the 3.5 years since v2. 01: x86: suppress ERMS for internal use when MISC_ENABLE.FAST_STRING is clear 02: x86: re-work memset() 03: x86: re-work memcpy() 04: x86: control memset() and memcpy() inlining 05: x86: introduce "hot" and "cold" page clearing functions 06: page-alloc: make scrub_on_page() static 07: mm: allow page scrubbing routine(s) to be arch controlled Jan