Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F144491328
D27076.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D27076.diff
View Options
Index: head/sys/amd64/amd64/machdep.c
===================================================================
--- head/sys/amd64/amd64/machdep.c
+++ head/sys/amd64/amd64/machdep.c
@@ -670,10 +670,10 @@
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);
/*
Index: head/sys/amd64/amd64/mp_machdep.c
===================================================================
--- head/sys/amd64/amd64/mp_machdep.c
+++ head/sys/amd64/amd64/mp_machdep.c
@@ -305,22 +305,22 @@
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 @@
/* 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);
Index: head/sys/amd64/amd64/pmap.c
===================================================================
--- head/sys/amd64/amd64/pmap.c
+++ head/sys/amd64/amd64/pmap.c
@@ -157,6 +157,7 @@
#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 @@
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);
Index: head/sys/amd64/include/intr_machdep.h
===================================================================
--- head/sys/amd64/include/intr_machdep.h
+++ head/sys/amd64/include/intr_machdep.h
@@ -41,4 +41,9 @@
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__ */
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Feb 9, 7:33 PM (4 h, 25 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28601028
Default Alt Text
D27076.diff (4 KB)
Attached To
Mode
D27076: amd64: Make it easier to configure exception stack sizes
Attached
Detach File
Event Timeline
Log In to Comment