Module Name:    src
Committed By:   maxv
Date:           Sat Sep  7 18:33:16 UTC 2019

Modified Files:
        src/sys/arch/amd64/amd64: cpufunc.S
        src/sys/arch/i386/i386: cpufunc.S
        src/sys/arch/x86/include: cpufunc.h

Log Message:
Convert rdmsr_locked and wrmsr_locked to inlines.


To generate a diff of this commit:
cvs rdiff -u -r1.43 -r1.44 src/sys/arch/amd64/amd64/cpufunc.S
cvs rdiff -u -r1.34 -r1.35 src/sys/arch/i386/i386/cpufunc.S
cvs rdiff -u -r1.35 -r1.36 src/sys/arch/x86/include/cpufunc.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/amd64/amd64/cpufunc.S
diff -u src/sys/arch/amd64/amd64/cpufunc.S:1.43 src/sys/arch/amd64/amd64/cpufunc.S:1.44
--- src/sys/arch/amd64/amd64/cpufunc.S:1.43	Fri Jul  5 17:08:55 2019
+++ src/sys/arch/amd64/amd64/cpufunc.S	Sat Sep  7 18:33:16 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpufunc.S,v 1.43 2019/07/05 17:08:55 maxv Exp $	*/
+/*	$NetBSD: cpufunc.S,v 1.44 2019/09/07 18:33:16 maxv Exp $	*/
 
 /*
  * Copyright (c) 1998, 2007, 2008 The NetBSD Foundation, Inc.
@@ -167,26 +167,6 @@ END(x86_write_flags)
 STRONG_ALIAS(x86_write_psl,x86_write_flags)
 #endif /* XENPV */
 
-ENTRY(rdmsr_locked)
-	movq	%rdi, %rcx
-	xorq	%rax, %rax
-	movl	$OPTERON_MSR_PASSCODE, %edi
-	rdmsr
-	shlq	$32, %rdx
-	orq	%rdx, %rax
-	ret
-END(rdmsr_locked)
-
-ENTRY(wrmsr_locked)
-	movq	%rdi, %rcx
-	movq	%rsi, %rax
-	movq	%rsi, %rdx
-	shrq	$32, %rdx
-	movl	$OPTERON_MSR_PASSCODE, %edi
-	wrmsr
-	ret
-END(wrmsr_locked)
-
 /*
  * Support for reading MSRs in the safe manner (returns EFAULT on fault)
  */

Index: src/sys/arch/i386/i386/cpufunc.S
diff -u src/sys/arch/i386/i386/cpufunc.S:1.34 src/sys/arch/i386/i386/cpufunc.S:1.35
--- src/sys/arch/i386/i386/cpufunc.S:1.34	Fri Jul  5 17:08:55 2019
+++ src/sys/arch/i386/i386/cpufunc.S	Sat Sep  7 18:33:16 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpufunc.S,v 1.34 2019/07/05 17:08:55 maxv Exp $	*/
+/*	$NetBSD: cpufunc.S,v 1.35 2019/09/07 18:33:16 maxv Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2007 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
 #include <sys/errno.h>
 
 #include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: cpufunc.S,v 1.34 2019/07/05 17:08:55 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpufunc.S,v 1.35 2019/09/07 18:33:16 maxv Exp $");
 
 #include "opt_xen.h"
 
@@ -91,26 +91,6 @@ STRONG_ALIAS(x86_write_psl,x86_write_fla
 STRONG_ALIAS(x86_read_psl,x86_read_flags)
 #endif	/* XENPV */
 
-ENTRY(rdmsr_locked)
-	movl	4(%esp), %ecx
-	pushl	%edi
-	movl	$OPTERON_MSR_PASSCODE, %edi
-	rdmsr
-	popl	%edi
-	ret
-END(rdmsr_locked)
-
-ENTRY(wrmsr_locked)
-	movl	4(%esp), %ecx
-	movl	8(%esp), %eax
-	movl	12(%esp), %edx
-	pushl	%edi
-	movl	$OPTERON_MSR_PASSCODE, %edi
-	wrmsr
-	popl	%edi
-	ret
-END(wrmsr_locked)
-
 /*
  * Support for reading MSRs in the safe manner (returns EFAULT on fault)
  */

Index: src/sys/arch/x86/include/cpufunc.h
diff -u src/sys/arch/x86/include/cpufunc.h:1.35 src/sys/arch/x86/include/cpufunc.h:1.36
--- src/sys/arch/x86/include/cpufunc.h:1.35	Sat Sep  7 11:09:03 2019
+++ src/sys/arch/x86/include/cpufunc.h	Sat Sep  7 18:33:16 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpufunc.h,v 1.35 2019/09/07 11:09:03 maxv Exp $	*/
+/*	$NetBSD: cpufunc.h,v 1.36 2019/09/07 18:33:16 maxv Exp $	*/
 
 /*
  * Copyright (c) 1998, 2007, 2019 The NetBSD Foundation, Inc.
@@ -419,8 +419,21 @@ rdmsr(u_int msr)
 	return (low | ((uint64_t)high << 32));
 }
 
-uint64_t	rdmsr_locked(u_int);
-int		rdmsr_safe(u_int, uint64_t *);
+static inline uint64_t
+rdmsr_locked(u_int msr)
+{
+	uint32_t low, high, pass = OPTERON_MSR_PASSCODE;
+
+	__asm volatile (
+		"rdmsr"
+		: "=a" (low), "=d" (high)
+		: "c" (msr), "D" (pass)
+	);
+
+	return (low | ((uint64_t)high << 32));
+}
+
+int	rdmsr_safe(u_int, uint64_t *);
 
 static inline void
 wrmsr(u_int msr, uint64_t val)
@@ -437,7 +450,20 @@ wrmsr(u_int msr, uint64_t val)
 	);
 }
 
-void		wrmsr_locked(u_int, uint64_t);
+static inline void
+wrmsr_locked(u_int msr, uint64_t val)
+{
+	uint32_t low, high, pass = OPTERON_MSR_PASSCODE;
+
+	low = val;
+	high = val >> 32;
+	__asm volatile (
+		"wrmsr"
+		:
+		: "a" (low), "d" (high), "c" (msr), "D" (pass)
+		: "memory"
+	);
+}
 
 #endif /* _KERNEL */
 

Reply via email to