Module Name:    src
Committed By:   cherry
Date:           Sat Dec 22 21:27:22 UTC 2018

Modified Files:
        src/sys/arch/amd64/amd64: cpufunc.S
        src/sys/arch/i386/i386: cpufunc.S i386func.S
        src/sys/arch/xen/x86: xenfunc.c

Log Message:
Introduce a weak alias method of exporting different implementations
of the same API.

For eg: the amd64 native implementation of invlpg() now becomes
amd64_invlpg() with a weak symbol export of invlpg(), while the XEN
implementation becomes xen_invlpg(), also weakly exported as invlpg()

Note that linking in both together without having an override function
named invlpg() would be a mistake, as we have limited control over
which of the two options would emerge as the finally exported invlpg()
resulting in a potential situation where the wrong function is finally
exported. This change avoids this situation.

We should however include an override function invlpg() in that case,
such that it is able to then pass on the call to the appropriate
backing function (amd64_invlpg() in the case of native, and
xen_invlpg() in the case of under XEN virtualisation) at runtime.

This change does not introduce such a function and therefore does not
alter builds to include native as well as XEN implementations in the
same binary. This will be done later, with the introduction of XEN
PVHVM mode, where precisely such a runtime switch is required.

There are no operational changes introduced by this change.


To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 src/sys/arch/amd64/amd64/cpufunc.S
cvs rdiff -u -r1.25 -r1.26 src/sys/arch/i386/i386/cpufunc.S
cvs rdiff -u -r1.18 -r1.19 src/sys/arch/i386/i386/i386func.S
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/xen/x86/xenfunc.c

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.33 src/sys/arch/amd64/amd64/cpufunc.S:1.34
--- src/sys/arch/amd64/amd64/cpufunc.S:1.33	Sat Jul 21 06:09:13 2018
+++ src/sys/arch/amd64/amd64/cpufunc.S	Sat Dec 22 21:27:22 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpufunc.S,v 1.33 2018/07/21 06:09:13 maxv Exp $	*/
+/*	$NetBSD: cpufunc.S,v 1.34 2018/12/22 21:27:22 cherry Exp $	*/
 
 /*
  * Copyright (c) 1998, 2007, 2008 The NetBSD Foundation, Inc.
@@ -63,18 +63,53 @@ ENTRY(x86_mfence)
 	ret
 END(x86_mfence)
 
+/*
+ * These functions below should always be accessed via the corresponding wrapper
+ * function names defined in x86/include/cpufunc.h and exported as WEAK_ALIAS()
+ *
+ * We use this rather roundabout method so that a runtime wrapper function may
+ * be made available for PVHVM, which could override both native and PV aliases
+ * and decide which to invoke at run time.
+ */
+
+WEAK_ALIAS(invlpg, amd64_invlpg)
+WEAK_ALIAS(lidt, amd64_lidt)
+WEAK_ALIAS(lldt, amd64_lldt)
+WEAK_ALIAS(ltr, amd64_ltr)
+WEAK_ALIAS(lcr0, amd64_lcr0)
+WEAK_ALIAS(rcr0, amd64_rcr0)
+WEAK_ALIAS(rcr2, amd64_rcr2)
+WEAK_ALIAS(lcr2, amd64_lcr2)
+WEAK_ALIAS(rcr3, amd64_rcr3)
+WEAK_ALIAS(lcr3, amd64_lcr3)
+WEAK_ALIAS(tlbflush, amd64_tlbflush)
+WEAK_ALIAS(tlbflushg, amd64_tlbflushg)
+WEAK_ALIAS(rdr0, amd64_rdr0)
+WEAK_ALIAS(ldr0, amd64_ldr0)
+WEAK_ALIAS(rdr1, amd64_rdr1)
+WEAK_ALIAS(ldr1, amd64_ldr1)
+WEAK_ALIAS(rdr2, amd64_rdr2)
+WEAK_ALIAS(ldr2, amd64_ldr2)
+WEAK_ALIAS(rdr3, amd64_rdr3)
+WEAK_ALIAS(ldr3, amd64_ldr3)
+WEAK_ALIAS(rdr6, amd64_rdr6)
+WEAK_ALIAS(ldr6, amd64_ldr6)
+WEAK_ALIAS(rdr7, amd64_rdr7)
+WEAK_ALIAS(ldr7, amd64_ldr7)
+WEAK_ALIAS(wbinvd, amd64_wbinvd)
+
 #ifndef XEN
-ENTRY(invlpg)
+ENTRY(amd64_invlpg)
 	invlpg	(%rdi)
 	ret
-END(invlpg)
+END(amd64_invlpg)
 
-ENTRY(lidt)
+ENTRY(amd64_lidt)
 	lidt	(%rdi)
 	ret
-END(lidt)
+END(amd64_lidt)
 
-ENTRY(lldt)
+ENTRY(amd64_lldt)
 	cmpl	%edi, CPUVAR(CURLDT)
 	jne	1f
 	ret
@@ -82,42 +117,42 @@ ENTRY(lldt)
 	movl	%edi, CPUVAR(CURLDT)
 	lldt	%di
 	ret
-END(lldt)
+END(amd64_lldt)
 
-ENTRY(ltr)
+ENTRY(amd64_ltr)
 	ltr	%di
 	ret
-END(ltr)
+END(amd64_ltr)
 
-ENTRY(lcr0)
+ENTRY(amd64_lcr0)
 	movq	%rdi, %cr0
 	ret
-END(lcr0)
+END(amd64_lcr0)
 
-ENTRY(rcr0)
+ENTRY(amd64_rcr0)
 	movq	%cr0, %rax
 	ret
-END(rcr0)
+END(amd64_rcr0)
 
-ENTRY(lcr2)
+ENTRY(amd64_lcr2)
 	movq	%rdi, %cr2
 	ret
-END(lcr2)
+END(amd64_lcr2)
 
-ENTRY(rcr2)
+ENTRY(amd64_rcr2)
 	movq	%cr2, %rax
 	ret
-END(rcr2)
+END(amd64_rcr2)
 
-ENTRY(lcr3)
+ENTRY(amd64_lcr3)
 	movq	%rdi, %cr3
 	ret
-END(lcr3)
+END(amd64_lcr3)
 
-ENTRY(rcr3)
+ENTRY(amd64_rcr3)
 	movq	%cr3, %rax
 	ret
-END(rcr3)
+END(amd64_rcr3)
 #endif
 
 ENTRY(lcr4)
@@ -159,7 +194,7 @@ END(rcr8)
  * If PGE is not in use, we reload CR3.
  */
 #ifndef XEN
-ENTRY(tlbflushg)
+ENTRY(amd64_tlbflushg)
 	movq	%cr4, %rax
 	testq	$CR4_PGE, %rax
 	jz	1f
@@ -168,74 +203,74 @@ ENTRY(tlbflushg)
 	movq	%rdx, %cr4
 	movq	%rax, %cr4
 	ret
-END(tlbflushg)
+END(amd64_tlbflushg)
 
-ENTRY(tlbflush)
+ENTRY(amd64_tlbflush)
 1:
 	movq	%cr3, %rax
 	movq	%rax, %cr3
 	ret
-END(tlbflush)
+END(amd64_tlbflush)
 
-ENTRY(ldr0)
+ENTRY(amd64_ldr0)
 	movq	%rdi, %dr0
 	ret
-END(ldr0)
+END(amd64_ldr0)
 
-ENTRY(rdr0)
+ENTRY(amd64_rdr0)
 	movq	%dr0, %rax
 	ret
-END(rdr0)
+END(amd64_rdr0)
 
-ENTRY(ldr1)
+ENTRY(amd64_ldr1)
 	movq	%rdi, %dr1
 	ret
-END(ldr1)
+END(amd64_ldr1)
 
-ENTRY(rdr1)
+ENTRY(amd64_rdr1)
 	movq	%dr1, %rax
 	ret
-END(rdr1)
+END(amd64_rdr1)
 
-ENTRY(ldr2)
+ENTRY(amd64_ldr2)
 	movq	%rdi, %dr2
 	ret
-END(ldr2)
+END(amd64_ldr2)
 
-ENTRY(rdr2)
+ENTRY(amd64_rdr2)
 	movq	%dr2, %rax
 	ret
-END(rdr2)
+END(amd64_rdr2)
 
-ENTRY(ldr3)
+ENTRY(amd64_ldr3)
 	movq	%rdi, %dr3
 	ret
-END(ldr3)
+END(amd64_ldr3)
 
-ENTRY(rdr3)
+ENTRY(amd64_rdr3)
 	movq	%dr3, %rax
 	ret
-END(rdr3)
+END(amd64_rdr3)
 
-ENTRY(ldr6)
+ENTRY(amd64_ldr6)
 	movq	%rdi, %dr6
 	ret
-END(ldr6)
+END(amd64_ldr6)
 
-ENTRY(rdr6)
+ENTRY(amd64_rdr6)
 	movq	%dr6, %rax
 	ret
-END(rdr6)
+END(amd64_rdr6)
 
-ENTRY(ldr7)
+ENTRY(amd64_ldr7)
 	movq	%rdi, %dr7
 	ret
-END(ldr7)
+END(amd64_ldr7)
 
-ENTRY(rdr7)
+ENTRY(amd64_rdr7)
 	movq	%dr7, %rax
 	ret
-END(rdr7)
+END(amd64_rdr7)
 
 ENTRY(x86_disable_intr)
 	cli

Index: src/sys/arch/i386/i386/cpufunc.S
diff -u src/sys/arch/i386/i386/cpufunc.S:1.25 src/sys/arch/i386/i386/cpufunc.S:1.26
--- src/sys/arch/i386/i386/cpufunc.S:1.25	Thu Oct 18 04:11:14 2018
+++ src/sys/arch/i386/i386/cpufunc.S	Sat Dec 22 21:27:22 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpufunc.S,v 1.25 2018/10/18 04:11:14 cherry Exp $	*/
+/*	$NetBSD: cpufunc.S,v 1.26 2018/12/22 21:27:22 cherry 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.25 2018/10/18 04:11:14 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpufunc.S,v 1.26 2018/12/22 21:27:22 cherry Exp $");
 
 #include "opt_xen.h"
 
@@ -47,6 +47,18 @@ __KERNEL_RCSID(0, "$NetBSD: cpufunc.S,v 
 
 #include "assym.h"
 
+/*
+ * These functions below should always be accessed via the corresponding wrapper
+ * function names defined in x86/include/cpufunc.h and exported as WEAK_ALIAS()
+ *
+ * We use this rather roundabout method so that a runtime wrapper function may
+ * be made available for PVHVM, which could override both native and PV aliases
+ * and decide which to invoke at run time.
+ */
+
+WEAK_ALIAS(lidt, i386_lidt)
+WEAK_ALIAS(rcr3, i386_rcr3)
+
 ENTRY(x86_lfence)
 	lock
 	addl	$0, -4(%esp)
@@ -66,17 +78,17 @@ ENTRY(x86_mfence)
 END(x86_mfence)
 
 #ifndef XEN
-ENTRY(lidt)
+ENTRY(i386_lidt)
 	movl	4(%esp), %eax
 	lidt	(%eax)
 	ret
-END(lidt)
+END(i386_lidt)
 #endif /* XEN */
 
-ENTRY(rcr3)
+ENTRY(i386_rcr3)
 	movl	%cr3, %eax
 	ret
-END(rcr3)
+END(i386_rcr3)
 
 ENTRY(lcr4)
 	movl	4(%esp), %eax

Index: src/sys/arch/i386/i386/i386func.S
diff -u src/sys/arch/i386/i386/i386func.S:1.18 src/sys/arch/i386/i386/i386func.S:1.19
--- src/sys/arch/i386/i386/i386func.S:1.18	Sun Nov 27 14:49:21 2016
+++ src/sys/arch/i386/i386/i386func.S	Sat Dec 22 21:27:22 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: i386func.S,v 1.18 2016/11/27 14:49:21 kamil Exp $	*/
+/*	$NetBSD: i386func.S,v 1.19 2018/12/22 21:27:22 cherry Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2007, 2008 The NetBSD Foundation, Inc.
@@ -36,20 +36,53 @@
  */
 
 #include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: i386func.S,v 1.18 2016/11/27 14:49:21 kamil Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i386func.S,v 1.19 2018/12/22 21:27:22 cherry Exp $");
 
 #include <machine/specialreg.h>
 #include <machine/segments.h>
 
 #include "assym.h"
 
-ENTRY(invlpg)
+/*
+ * These functions below should always be accessed via the corresponding wrapper
+ * function names defined in x86/include/cpufunc.h and exported as WEAK_ALIAS()
+ *
+ * We use this rather roundabout method so that a runtime wrapper function may
+ * be made available for PVHVM, which could override both native and PV aliases
+ * and decide which to invoke at run time.
+ */
+
+WEAK_ALIAS(invlpg, i386_invlpg)
+WEAK_ALIAS(lldt, i386_lldt)
+WEAK_ALIAS(ltr, i386_ltr)
+WEAK_ALIAS(lcr0, i386_lcr0)
+WEAK_ALIAS(rcr0, i386_rcr0)
+WEAK_ALIAS(lcr3, i386_lcr3)
+WEAK_ALIAS(tlbflush, i386_tlbflush)
+WEAK_ALIAS(tlbflushg, i386_tlbflushg)
+WEAK_ALIAS(rdr0, i386_rdr0)
+WEAK_ALIAS(ldr0, i386_ldr0)
+WEAK_ALIAS(rdr1, i386_rdr1)
+WEAK_ALIAS(ldr1, i386_ldr1)
+WEAK_ALIAS(rdr2, i386_rdr2)
+WEAK_ALIAS(ldr2, i386_ldr2)
+WEAK_ALIAS(rdr3, i386_rdr3)
+WEAK_ALIAS(ldr3, i386_ldr3)
+WEAK_ALIAS(rdr6, i386_rdr6)
+WEAK_ALIAS(ldr6, i386_ldr6)
+WEAK_ALIAS(rdr7, i386_rdr7)
+WEAK_ALIAS(ldr7, i386_ldr7)
+WEAK_ALIAS(rcr2, i386_rcr2)
+WEAK_ALIAS(lcr2, i386_lcr2)
+WEAK_ALIAS(wbinvd, i386_wbinvd)
+
+ENTRY(i386_invlpg)
 	movl	4(%esp), %eax
 	invlpg	(%eax)
 	ret
-END(invlpg)
+END(i386_invlpg)
 
-ENTRY(lldt)
+ENTRY(i386_lldt)
 	movl	4(%esp), %eax
 	cmpl	%eax, CPUVAR(CURLDT)
 	jne	1f
@@ -58,30 +91,30 @@ ENTRY(lldt)
 	movl	%eax, CPUVAR(CURLDT)
 	lldt	%ax
 	ret
-END(lldt)
+END(i386_lldt)
 
-ENTRY(ltr)
+ENTRY(i386_ltr)
 	movl	4(%esp), %eax
 	ltr	%ax
 	ret
-END(ltr)
+END(i386_ltr)
 
-ENTRY(lcr0)
+ENTRY(i386_lcr0)
 	movl	4(%esp), %eax
 	movl	%eax, %cr0
 	ret
-END(lcr0)
+END(i386_lcr0)
 
-ENTRY(rcr0)
+ENTRY(i386_rcr0)
 	movl	%cr0, %eax
 	ret
-END(rcr0)
+END(i386_rcr0)
 
-ENTRY(lcr3)
+ENTRY(i386_lcr3)
 	movl	4(%esp), %eax
 	movl	%eax, %cr3
 	ret
-END(lcr3)
+END(i386_lcr3)
 
 /*
  * Big hammer: flush all TLB entries, including ones from PTE's
@@ -103,7 +136,7 @@ END(lcr3)
  * first since i486 does not have CR4.  Note: the feature flag may
  * be present while the actual PGE functionality not yet enabled.
  */
-ENTRY(tlbflushg)
+ENTRY(i386_tlbflushg)
 	testl	$CPUID_PGE, _C_LABEL(cpu_feature)
 	jz	1f
 	movl	%cr4, %eax
@@ -114,96 +147,96 @@ ENTRY(tlbflushg)
 	movl	%edx, %cr4
 	movl	%eax, %cr4
 	ret
-END(tlbflushg)
+END(i386_tlbflushg)
 
-ENTRY(tlbflush)
+ENTRY(i386_tlbflush)
 1:
 	movl	%cr3, %eax
 	movl	%eax, %cr3
 	ret
-END(tlbflush)
+END(i386_tlbflush)
 
-ENTRY(ldr0)
+ENTRY(i386_ldr0)
 	movl	4(%esp), %eax
 	movl	%eax, %dr0
 	ret
-END(ldr0)
+END(i386_ldr0)
 
-ENTRY(rdr0)
+ENTRY(i386_rdr0)
 	movl	%dr0, %eax
 	ret
-END(rdr0)
+END(i386_rdr0)
 
-ENTRY(ldr1)
+ENTRY(i386_ldr1)
 	movl	4(%esp), %eax
 	movl	%eax, %dr1
 	ret
-END(ldr1)
+END(i386_ldr1)
 
-ENTRY(rdr1)
+ENTRY(i386_rdr1)
 	movl	%dr1, %eax
 	ret
-END(rdr1)
+END(i386_rdr1)
 
-ENTRY(ldr2)
+ENTRY(i386_ldr2)
 	movl	4(%esp), %eax
 	movl	%eax, %dr2
 	ret
-END(ldr2)
+END(i386_ldr2)
 
-ENTRY(rdr2)
+ENTRY(i386_rdr2)
 	movl	%dr2, %eax
 	ret
-END(rdr2)
+END(i386_rdr2)
 
-ENTRY(ldr3)
+ENTRY(i386_ldr3)
 	movl	4(%esp), %eax
 	movl	%eax, %dr3
 	ret
-END(ldr3)
+END(i386_ldr3)
 
-ENTRY(rdr3)
+ENTRY(i386_rdr3)
 	movl	%dr3, %eax
 	ret
-END(rdr3)
+END(i386_rdr3)
 
-ENTRY(ldr6)
+ENTRY(i386_ldr6)
 	movl	4(%esp), %eax
 	movl	%eax, %dr6
 	ret
-END(ldr6)
+END(i386_ldr6)
 
-ENTRY(rdr6)
+ENTRY(i386_rdr6)
 	movl	%dr6, %eax
 	ret
-END(rdr6)
+END(i386_rdr6)
 
-ENTRY(ldr7)
+ENTRY(i386_ldr7)
 	movl	4(%esp), %eax
 	movl	%eax, %dr7
 	ret
-END(ldr7)
+END(i386_ldr7)
 
-ENTRY(rdr7)
+ENTRY(i386_rdr7)
 	movl	%dr7, %eax
 	ret
-END(rdr7)
+END(i386_rdr7)
 
-ENTRY(rcr2)
+ENTRY(i386_rcr2)
 	movl	%cr2, %eax
 	ret
-END(rcr2)
+END(i386_rcr2)
 
-ENTRY(lcr2)
+ENTRY(i386_lcr2)
 	movl	4(%esp), %eax
 	movl	%eax, %cr2
 	ret
-END(lcr2)
+END(i386_lcr2)
 
-ENTRY(wbinvd)
+ENTRY(i386_wbinvd)
 	wbinvd
 	ret
-END(wbinvd)
+END(i386_wbinvd)
 
 ENTRY(x86_disable_intr)
 	cli

Index: src/sys/arch/xen/x86/xenfunc.c
diff -u src/sys/arch/xen/x86/xenfunc.c:1.22 src/sys/arch/xen/x86/xenfunc.c:1.23
--- src/sys/arch/xen/x86/xenfunc.c:1.22	Thu Oct 18 04:17:18 2018
+++ src/sys/arch/xen/x86/xenfunc.c	Sat Dec 22 21:27:22 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: xenfunc.c,v 1.22 2018/10/18 04:17:18 cherry Exp $	*/
+/*	$NetBSD: xenfunc.c,v 1.23 2018/12/22 21:27:22 cherry Exp $	*/
 
 /*
  * Copyright (c) 2004 Christian Limpach.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xenfunc.c,v 1.22 2018/10/18 04:17:18 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xenfunc.c,v 1.23 2018/12/22 21:27:22 cherry Exp $");
 
 #include <sys/param.h>
 
@@ -45,8 +45,74 @@ __KERNEL_RCSID(0, "$NetBSD: xenfunc.c,v 
 
 void xen_set_ldt(vaddr_t, uint32_t);
 
+/*
+ * We don't need to export these declarations, since they are used via
+ * linker aliasing. They should always be accessed via the
+ * corresponding wrapper function names defined in
+ * x86/include/cpufunc.h and exported as __weak_alias()
+ *
+ * We use this rather roundabout method so that a runtime wrapper
+ * function may be made available for PVHVM, which could override both
+ * native and PV aliases and decide which to invoke at run time.
+ */
+
+void xen_invlpg(vaddr_t);
+void xen_lidt(struct region_descriptor *);
+void xen_lldt(u_short);
+void xen_ltr(u_short);
+void xen_lcr0(u_long);
+u_long xen_rcr0(void);
+void xen_tlbflush(void);
+void xen_tlbflushg(void);
+register_t xen_rdr0(void);
+void xen_ldr0(register_t);
+register_t xen_rdr1(void);
+void xen_ldr1(register_t);
+register_t xen_rdr2(void);
+void xen_ldr2(register_t);
+register_t xen_rdr3(void);
+void xen_ldr3(register_t);
+register_t xen_rdr6(void);
+void xen_ldr6(register_t);
+register_t xen_rdr7(void);
+void xen_ldr7(register_t);
+void xen_wbinvd(void);
+vaddr_t xen_rcr2(void);
+
+__weak_alias(invlpg, xen_invlpg);
+__weak_alias(lidt, xen_lidt);
+__weak_alias(lldt, xen_lldt);
+__weak_alias(ltr, xen_ltr);
+__weak_alias(lcr0, xen_lcr0);
+__weak_alias(rcr0, xen_rcr0);
+__weak_alias(tlbflush, xen_tlbflush);
+__weak_alias(tlbflushg, xen_tlbflushg);
+__weak_alias(rdr0, xen_rdr0);
+__weak_alias(ldr0, xen_ldr0);
+__weak_alias(rdr1, xen_rdr1);
+__weak_alias(ldr1, xen_ldr1);
+__weak_alias(rdr2, xen_rdr2);
+__weak_alias(ldr2, xen_ldr2);
+__weak_alias(rdr3, xen_rdr3);
+__weak_alias(ldr3, xen_ldr3);
+__weak_alias(rdr6, xen_rdr6);
+__weak_alias(ldr6, xen_ldr6);
+__weak_alias(rdr7, xen_rdr7);
+__weak_alias(ldr7, xen_ldr7);
+__weak_alias(wbinvd, xen_wbinvd);
+__weak_alias(rcr2, xen_rcr2);
+
+#ifdef __x86_64__
+void xen_setusergs(int);
+__weak_alias(setusergs, xen_setusergs);
+#else
+void xen_lcr3(vaddr_t);
+__weak_alias(lcr3, xen_lcr3);
+
+#endif
+
 void 
-invlpg(vaddr_t addr)
+xen_invlpg(vaddr_t addr)
 {
 	int s = splvm(); /* XXXSMP */
 	xpq_queue_invlpg(addr);
@@ -54,7 +120,7 @@ invlpg(vaddr_t addr)
 }  
 
 void
-lidt(struct region_descriptor *rd)
+xen_lidt(struct region_descriptor *rd)
 {
 	/* 
 	 * We need to do this because we can't assume kmem_alloc(9)
@@ -99,7 +165,7 @@ lidt(struct region_descriptor *rd)
 }
 
 void
-lldt(u_short sel)
+xen_lldt(u_short sel)
 {
 #ifndef __x86_64__
 	struct cpu_info *ci;
@@ -118,19 +184,19 @@ lldt(u_short sel)
 }
 
 void
-ltr(u_short sel)
+xen_ltr(u_short sel)
 {
 	panic("XXX ltr not supported\n");
 }
 
 void
-lcr0(u_long val)
+xen_lcr0(u_long val)
 {
 	panic("XXX lcr0 not supported\n");
 }
 
 u_long
-rcr0(void)
+xen_rcr0(void)
 {
 	/* XXX: handle X86_CR0_TS ? */
 	return 0;
@@ -138,7 +204,7 @@ rcr0(void)
 
 #ifndef __x86_64__
 void
-lcr3(vaddr_t val)
+xen_lcr3(vaddr_t val)
 {
 	int s = splvm(); /* XXXSMP */
 	xpq_queue_pt_switch(xpmap_ptom_masked(val));
@@ -147,7 +213,7 @@ lcr3(vaddr_t val)
 #endif
 
 void
-tlbflush(void)
+xen_tlbflush(void)
 {
 	int s = splvm(); /* XXXSMP */
 	xpq_queue_tlb_flush();
@@ -155,110 +221,110 @@ tlbflush(void)
 }
 
 void
-tlbflushg(void)
+xen_tlbflushg(void)
 {
 	tlbflush();
 }
 
 register_t
-rdr0(void)
+xen_rdr0(void)
 {
 
 	return HYPERVISOR_get_debugreg(0);
 }
 
 void
-ldr0(register_t val)
+xen_ldr0(register_t val)
 {
 
 	HYPERVISOR_set_debugreg(0, val);
 }
 
 register_t
-rdr1(void)
+xen_rdr1(void)
 {
 
 	return HYPERVISOR_get_debugreg(1);
 }
 
 void
-ldr1(register_t val)
+xen_ldr1(register_t val)
 {
 
 	HYPERVISOR_set_debugreg(1, val);
 }
 
 register_t
-rdr2(void)
+xen_rdr2(void)
 {
 
 	return HYPERVISOR_get_debugreg(2);
 }
 
 void
-ldr2(register_t val)
+xen_ldr2(register_t val)
 {
 
 	HYPERVISOR_set_debugreg(2, val);
 }
 
 register_t
-rdr3(void)
+xen_rdr3(void)
 {
 
 	return HYPERVISOR_get_debugreg(3);
 }
 
 void
-ldr3(register_t val)
+xen_ldr3(register_t val)
 {
 
 	HYPERVISOR_set_debugreg(3, val);
 }
 register_t
-rdr6(void)
+xen_rdr6(void)
 {
 
 	return HYPERVISOR_get_debugreg(6);
 }
 
 void
-ldr6(register_t val)
+xen_ldr6(register_t val)
 {
 
 	HYPERVISOR_set_debugreg(6, val);
 }
 
 register_t
-rdr7(void)
+xen_rdr7(void)
 {
 
 	return HYPERVISOR_get_debugreg(7);
 }
 
 void
-ldr7(register_t val)
+xen_ldr7(register_t val)
 {
 
 	HYPERVISOR_set_debugreg(7, val);
 }
 
 void
-wbinvd(void)
+xen_wbinvd(void)
 {
 
 	xpq_flush_cache();
 }
 
 vaddr_t
-rcr2(void)
+xen_rcr2(void)
 {
 	return curcpu()->ci_vcpu->arch.cr2;
 }
 
 #ifdef __x86_64__
 void
-setusergs(int gssel)
+xen_setusergs(int gssel)
 {
 	HYPERVISOR_set_segment_base(SEGBASE_GS_USER_SEL, gssel);
 }

Reply via email to