aboutsummaryrefslogtreecommitdiff
path: root/sys/amd64
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2020-11-04 16:42:20 +0000
committerMark Johnston <markj@FreeBSD.org>2020-11-04 16:42:20 +0000
commitcff169880e88bbb6ee1b39713bdd7acba2aca201 (patch)
tree6d5a3b10879eac742105ce9d242c593299521a3a /sys/amd64
parentf7db0c9532521496366564e579d0eadc9134dad0 (diff)
Notes
Diffstat (limited to 'sys/amd64')
-rw-r--r--sys/amd64/amd64/machdep.c8
-rw-r--r--sys/amd64/amd64/mp_machdep.c19
-rw-r--r--sys/amd64/amd64/pmap.c9
-rw-r--r--sys/amd64/include/intr_machdep.h5
4 files changed, 24 insertions, 17 deletions
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c
index 28380bf10f210..a21a93610e51f 100644
--- a/sys/amd64/amd64/machdep.c
+++ b/sys/amd64/amd64/machdep.c
@@ -670,10 +670,10 @@ cpu_setregs(void)
static struct gate_descriptor idt0[NIDT];
struct gate_descriptor *idt = &idt0[0]; /* interrupt descriptor table */
-static char dblfault_stack[PAGE_SIZE] __aligned(16);
-static char mce0_stack[PAGE_SIZE] __aligned(16);
-static char nmi0_stack[PAGE_SIZE] __aligned(16);
-static char dbg0_stack[PAGE_SIZE] __aligned(16);
+static char dblfault_stack[DBLFAULT_STACK_SIZE] __aligned(16);
+static char mce0_stack[MCE_STACK_SIZE] __aligned(16);
+static char nmi0_stack[NMI_STACK_SIZE] __aligned(16);
+static char dbg0_stack[DBG_STACK_SIZE] __aligned(16);
CTASSERT(sizeof(struct nmi_pcpu) == 16);
/*
diff --git a/sys/amd64/amd64/mp_machdep.c b/sys/amd64/amd64/mp_machdep.c
index fb6a12278177c..efbacb4215f6f 100644
--- a/sys/amd64/amd64/mp_machdep.c
+++ b/sys/amd64/amd64/mp_machdep.c
@@ -305,22 +305,22 @@ init_secondary(void)
pc->pc_common_tss.tss_rsp0 = 0;
/* The doublefault stack runs on IST1. */
- np = ((struct nmi_pcpu *)&doublefault_stack[PAGE_SIZE]) - 1;
+ np = ((struct nmi_pcpu *)&doublefault_stack[DBLFAULT_STACK_SIZE]) - 1;
np->np_pcpu = (register_t)pc;
pc->pc_common_tss.tss_ist1 = (long)np;
/* The NMI stack runs on IST2. */
- np = ((struct nmi_pcpu *) &nmi_stack[PAGE_SIZE]) - 1;
+ np = ((struct nmi_pcpu *)&nmi_stack[NMI_STACK_SIZE]) - 1;
np->np_pcpu = (register_t)pc;
pc->pc_common_tss.tss_ist2 = (long)np;
/* The MC# stack runs on IST3. */
- np = ((struct nmi_pcpu *) &mce_stack[PAGE_SIZE]) - 1;
+ np = ((struct nmi_pcpu *)&mce_stack[MCE_STACK_SIZE]) - 1;
np->np_pcpu = (register_t)pc;
pc->pc_common_tss.tss_ist3 = (long)np;
/* The DB# stack runs on IST4. */
- np = ((struct nmi_pcpu *) &dbg_stack[PAGE_SIZE]) - 1;
+ np = ((struct nmi_pcpu *)&dbg_stack[DBG_STACK_SIZE]) - 1;
np->np_pcpu = (register_t)pc;
pc->pc_common_tss.tss_ist4 = (long)np;
@@ -481,13 +481,14 @@ native_start_all_aps(void)
/* allocate and set up an idle stack data page */
bootstacks[cpu] = (void *)kmem_malloc(kstack_pages * PAGE_SIZE,
M_WAITOK | M_ZERO);
- doublefault_stack = (char *)kmem_malloc(PAGE_SIZE, M_WAITOK |
- M_ZERO);
- mce_stack = (char *)kmem_malloc(PAGE_SIZE, M_WAITOK | M_ZERO);
+ doublefault_stack = (char *)kmem_malloc(DBLFAULT_STACK_SIZE,
+ M_WAITOK | M_ZERO);
+ mce_stack = (char *)kmem_malloc(MCE_STACK_SIZE,
+ M_WAITOK | M_ZERO);
nmi_stack = (char *)kmem_malloc_domainset(
- DOMAINSET_PREF(domain), PAGE_SIZE, M_WAITOK | M_ZERO);
+ DOMAINSET_PREF(domain), NMI_STACK_SIZE, M_WAITOK | M_ZERO);
dbg_stack = (char *)kmem_malloc_domainset(
- DOMAINSET_PREF(domain), PAGE_SIZE, M_WAITOK | M_ZERO);
+ DOMAINSET_PREF(domain), DBG_STACK_SIZE, M_WAITOK | M_ZERO);
dpcpu = (void *)kmem_malloc_domainset(DOMAINSET_PREF(domain),
DPCPU_SIZE, M_WAITOK | M_ZERO);
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index e6bcf319ef8cd..3f9709ca9c556 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -157,6 +157,7 @@ __FBSDID("$FreeBSD$");
#include <x86/ifunc.h>
#include <machine/cpu.h>
#include <machine/cputypes.h>
+#include <machine/intr_machdep.h>
#include <machine/md_var.h>
#include <machine/pcb.h>
#include <machine/specialreg.h>
@@ -10481,17 +10482,17 @@ pmap_pti_init(void)
CPU_FOREACH(i) {
/* Doublefault stack IST 1 */
va = __pcpu[i].pc_common_tss.tss_ist1 + sizeof(struct nmi_pcpu);
- pmap_pti_add_kva_locked(va - PAGE_SIZE, va, false);
+ pmap_pti_add_kva_locked(va - DBLFAULT_STACK_SIZE, va, false);
/* NMI stack IST 2 */
va = __pcpu[i].pc_common_tss.tss_ist2 + sizeof(struct nmi_pcpu);
- pmap_pti_add_kva_locked(va - PAGE_SIZE, va, false);
+ pmap_pti_add_kva_locked(va - NMI_STACK_SIZE, va, false);
/* MC# stack IST 3 */
va = __pcpu[i].pc_common_tss.tss_ist3 +
sizeof(struct nmi_pcpu);
- pmap_pti_add_kva_locked(va - PAGE_SIZE, va, false);
+ pmap_pti_add_kva_locked(va - MCE_STACK_SIZE, va, false);
/* DB# stack IST 4 */
va = __pcpu[i].pc_common_tss.tss_ist4 + sizeof(struct nmi_pcpu);
- pmap_pti_add_kva_locked(va - PAGE_SIZE, va, false);
+ pmap_pti_add_kva_locked(va - DBG_STACK_SIZE, va, false);
}
pmap_pti_add_kva_locked((vm_offset_t)kernphys + KERNBASE,
(vm_offset_t)etext, true);
diff --git a/sys/amd64/include/intr_machdep.h b/sys/amd64/include/intr_machdep.h
index 3dd3a9ce5d426..48af1fd1d5784 100644
--- a/sys/amd64/include/intr_machdep.h
+++ b/sys/amd64/include/intr_machdep.h
@@ -41,4 +41,9 @@ struct nmi_pcpu {
register_t __padding; /* pad to 16 bytes */
};
+#define DBLFAULT_STACK_SIZE PAGE_SIZE
+#define NMI_STACK_SIZE PAGE_SIZE
+#define MCE_STACK_SIZE PAGE_SIZE
+#define DBG_STACK_SIZE PAGE_SIZE
+
#endif /* !__MACHINE_INTR_MACHDEP_H__ */