diff --git a/arch/x86/lib/clear_page_64.S b/arch/x86/lib/clear_page_64.S
index 5e2af3a..7978115 100644
--- a/arch/x86/lib/clear_page_64.S
+++ b/arch/x86/lib/clear_page_64.S
@@ -15,26 +15,13 @@
  * %rdi	- page
  */
 ENTRY(clear_page)
-
-	ALTERNATIVE_2 "jmp clear_page_orig", "", X86_FEATURE_REP_GOOD, \
-		      "jmp clear_page_c_e", X86_FEATURE_ERMS
-
-	movl $4096/8,%ecx
-	xorl %eax,%eax
-	rep stosq
-	ret
-ENDPROC(clear_page)
-EXPORT_SYMBOL(clear_page)
-
-ENTRY(clear_page_orig)
-
 	xorl   %eax,%eax
 	movl   $4096/64,%ecx
 	.p2align 4
-.Lloop:
-	decl	%ecx
-#define PUT(x) movq %rax,x*8(%rdi)
-	movq %rax,(%rdi)
+.Lloop_nocache:
+	decl        %ecx
+#define PUT(x) movnti %rax,x*8(%rdi)
+	movnti %rax,(%rdi)
 	PUT(1)
 	PUT(2)
 	PUT(3)
@@ -42,15 +29,10 @@ ENTRY(clear_page_orig)
 	PUT(5)
 	PUT(6)
 	PUT(7)
-	leaq	64(%rdi),%rdi
-	jnz	.Lloop
-	nop
-	ret
-ENDPROC(clear_page_orig)
-
-ENTRY(clear_page_c_e)
-	movl $4096,%ecx
-	xorl %eax,%eax
-	rep stosb
+#undef PUT
+	leaq        64(%rdi),%rdi
+	jnz        .Lloop_nocache
+	// sfence not needed as full cacheline is cleared
 	ret
-ENDPROC(clear_page_c_e)
+ENDPROC(clear_page)
+EXPORT_SYMBOL(clear_page)
