On 16.06.2025 15:02, Jan Beulich wrote: > --- /dev/null > +++ b/xen/arch/x86/scrub_page.S > @@ -0,0 +1,39 @@ > + .file __FILE__ > + > +#include <asm/asm_defns.h> > +#include <xen/page-size.h> > +#include <xen/scrub.h> > + > +FUNC(scrub_page_cold) > + mov $PAGE_SIZE/32, %ecx > + mov $SCRUB_PATTERN, %rax > + > +0: movnti %rax, (%rdi) > + movnti %rax, 8(%rdi) > + movnti %rax, 16(%rdi) > + movnti %rax, 24(%rdi) > + add $32, %rdi > + sub $1, %ecx > + jnz 0b > + > + sfence > + ret > +END(scrub_page_cold) > + > + .macro scrub_page_stosb > + mov $PAGE_SIZE, %ecx > + mov $SCRUB_BYTE_PATTERN, %eax > + rep stosb > + ret > + .endm > + > + .macro scrub_page_stosq > + mov $PAGE_SIZE/8, %ecx > + mov $SCRUB_PATTERN, %rax > + rep stosq > + ret > + .endm > + > +FUNC(scrub_page_hot) > + ALTERNATIVE scrub_page_stosq, scrub_page_stosb, X86_FEATURE_ERMS > +END(scrub_page_hot)
Bah, I've noticed only now that I failed to do the ret -> RET conversion here during the most recent re-basing. Jan