Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch In XEN PV, the idt vector table is not required to ...
details: https://anonhg.NetBSD.org/src/rev/8421bf935de4
branches: trunk
changeset: 357286:8421bf935de4
user: cherry <cherry%NetBSD.org@localhost>
date: Sat Nov 04 08:50:47 2017 +0000
description:
In XEN PV, the idt vector table is not required to be altered at
runtime, since only entries for exceptions/traps are registered with
the hypervisor and interrupts are managed via a completely different
mechanism.
This change uses the idt_vec_reserve() mechanism nevertheless,
modifying it slightly to only do namespace management in XEN, while on
native it will continue to do idt entry init as before.
Rationale: Consistent API usage and potential future merging of
XEN/non-XEN code.
There are no functional changes in this commit.
diffstat:
sys/arch/amd64/amd64/machdep.c | 6 ++++--
sys/arch/amd64/include/segments.h | 6 +++---
sys/arch/i386/i386/machdep.c | 6 ++++--
sys/arch/i386/include/segments.h | 6 +++---
sys/arch/x86/x86/idt.c | 12 +++++++++---
sys/arch/xen/conf/files.xen | 3 ++-
6 files changed, 25 insertions(+), 14 deletions(-)
diffs (186 lines):
diff -r 590520f5b5cb -r 8421bf935de4 sys/arch/amd64/amd64/machdep.c
--- a/sys/arch/amd64/amd64/machdep.c Sat Nov 04 08:33:28 2017 +0000
+++ b/sys/arch/amd64/amd64/machdep.c Sat Nov 04 08:50:47 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.274 2017/10/29 10:25:28 maxv Exp $ */
+/* $NetBSD: machdep.c,v 1.275 2017/11/04 08:50:47 cherry Exp $ */
/*
* Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007, 2008, 2011
@@ -110,7 +110,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.274 2017/10/29 10:25:28 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.275 2017/11/04 08:50:47 cherry Exp $");
/* #define XENDEBUG_LOW */
@@ -1747,6 +1747,7 @@
GSEL(GCODE_SEL, SEL_KPL));
#else /* XEN */
pmap_changeprot_local(idt_vaddr, VM_PROT_READ|VM_PROT_WRITE);
+ idt_vec_reserve(x);
xen_idt[xen_idt_idx].vector = x;
switch (x) {
@@ -1776,6 +1777,7 @@
setgate(&idt[128], &IDTVEC(osyscall), 0, SDT_SYS386IGT, SEL_UPL,
GSEL(GCODE_SEL, SEL_KPL));
#else
+ idt_vec_reserve(128);
xen_idt[xen_idt_idx].vector = 128;
xen_idt[xen_idt_idx].flags = SEL_KPL;
xen_idt[xen_idt_idx].cs = GSEL(GCODE_SEL, SEL_KPL);
diff -r 590520f5b5cb -r 8421bf935de4 sys/arch/amd64/include/segments.h
--- a/sys/arch/amd64/include/segments.h Sat Nov 04 08:33:28 2017 +0000
+++ b/sys/arch/amd64/include/segments.h Sat Nov 04 08:50:47 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: segments.h,v 1.32 2017/11/01 07:14:29 maxv Exp $ */
+/* $NetBSD: segments.h,v 1.33 2017/11/04 08:50:47 cherry Exp $ */
/*
* Copyright (c) 1990 The Regents of the University of California.
@@ -245,12 +245,12 @@
void cpu_init_idt(void);
void update_descriptor(void *, void *);
-#if !defined(XEN)
+
void idt_vec_reserve(int);
int idt_vec_alloc(int, int);
void idt_vec_set(int, void (*)(void));
void idt_vec_free(int);
-#endif
+
struct lwp;
void cpu_segregs64_zero(struct lwp *);
diff -r 590520f5b5cb -r 8421bf935de4 sys/arch/i386/i386/machdep.c
--- a/sys/arch/i386/i386/machdep.c Sat Nov 04 08:33:28 2017 +0000
+++ b/sys/arch/i386/i386/machdep.c Sat Nov 04 08:50:47 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.797 2017/10/29 10:01:21 maxv Exp $ */
+/* $NetBSD: machdep.c,v 1.798 2017/11/04 08:50:47 cherry Exp $ */
/*
* Copyright (c) 1996, 1997, 1998, 2000, 2004, 2006, 2008, 2009, 2017
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.797 2017/10/29 10:01:21 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.798 2017/11/04 08:50:47 cherry Exp $");
#include "opt_beep.h"
#include "opt_compat_freebsd.h"
@@ -1355,6 +1355,7 @@
xen_idt_idx = 0;
for (x = 0; x < 32; x++) {
KASSERT(xen_idt_idx < MAX_XEN_IDT);
+ idt_vec_reserve(x);
xen_idt[xen_idt_idx].vector = x;
switch (x) {
@@ -1377,6 +1378,7 @@
xen_idt_idx++;
}
KASSERT(xen_idt_idx < MAX_XEN_IDT);
+ idt_vec_reserve(128);
xen_idt[xen_idt_idx].vector = 128;
xen_idt[xen_idt_idx].flags = SEL_UPL;
xen_idt[xen_idt_idx].cs = GSEL(GCODE_SEL, SEL_KPL);
diff -r 590520f5b5cb -r 8421bf935de4 sys/arch/i386/include/segments.h
--- a/sys/arch/i386/include/segments.h Sat Nov 04 08:33:28 2017 +0000
+++ b/sys/arch/i386/include/segments.h Sat Nov 04 08:50:47 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: segments.h,v 1.62 2017/09/17 09:41:35 maxv Exp $ */
+/* $NetBSD: segments.h,v 1.63 2017/11/04 08:50:47 cherry Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
@@ -200,12 +200,12 @@
void cpu_init_idt(void);
void update_descriptor(union descriptor *, union descriptor *);
-#if !defined(XEN)
+
void idt_vec_reserve(int);
int idt_vec_alloc(int, int);
void idt_vec_set(int, void (*)(void));
void idt_vec_free(int);
-#endif
+
#endif /* _KERNEL */
diff -r 590520f5b5cb -r 8421bf935de4 sys/arch/x86/x86/idt.c
--- a/sys/arch/x86/x86/idt.c Sat Nov 04 08:33:28 2017 +0000
+++ b/sys/arch/x86/x86/idt.c Sat Nov 04 08:50:47 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: idt.c,v 1.5 2017/08/07 17:10:09 maxv Exp $ */
+/* $NetBSD: idt.c,v 1.6 2017/11/04 08:50:47 cherry Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998, 2000, 2009 The NetBSD Foundation, Inc.
@@ -65,7 +65,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: idt.c,v 1.5 2017/08/07 17:10:09 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: idt.c,v 1.6 2017/11/04 08:50:47 cherry Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -75,9 +75,12 @@
#include <machine/segments.h>
+/* On xen PV this is just numberspace management - used in x86/intr.c */
#if !defined(XEN)
struct gate_descriptor *idt;
+#endif
+
static char idt_allocmap[NIDT];
/*
@@ -120,8 +123,10 @@
{
KASSERT(idt_allocmap[vec] == 1);
+#if !defined(XEN)
setgate(&idt[vec], function, 0, SDT_SYS386IGT, SEL_KPL,
GSEL(GCODE_SEL, SEL_KPL));
+#endif
}
/*
@@ -131,8 +136,9 @@
idt_vec_free(int vec)
{
+#if !defined(XEN)
unsetgate(&idt[vec]);
+#endif
idt_allocmap[vec] = 0;
}
-#endif /* !defined(XEN) */
diff -r 590520f5b5cb -r 8421bf935de4 sys/arch/xen/conf/files.xen
--- a/sys/arch/xen/conf/files.xen Sat Nov 04 08:33:28 2017 +0000
+++ b/sys/arch/xen/conf/files.xen Sat Nov 04 08:50:47 2017 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: files.xen,v 1.157 2017/11/04 07:01:45 cherry Exp $
+# $NetBSD: files.xen,v 1.158 2017/11/04 08:50:47 cherry Exp $
# NetBSD: files.x86,v 1.10 2003/10/08 17:30:00 bouyer Exp
# NetBSD: files.i386,v 1.254 2004/03/25 23:32:10 jmc Exp
@@ -140,6 +140,7 @@
file arch/x86/x86/identcpu.c machdep
file arch/xen/x86/intr.c machdep
file arch/xen/x86/xen_ipi.c multiprocessor
+file arch/x86/x86/idt.c machdep
file arch/x86/x86/pmap.c machdep
file arch/x86/x86/pmap_tlb.c machdep
file arch/x86/x86/procfs_machdep.c procfs
Home |
Main Index |
Thread Index |
Old Index