Give large kernel stack to the initial thread . Otherwise, ZFS

overflows the stack during root mount in some configurations.

Tested by:	Fabian Keil <freebsd-listen@fabiankeil.de> (previous version)
Sponsored by:	The FreeBSD Foundation
MFC after:	2 weeks
This commit is contained in:
Konstantin Belousov 2015-08-04 13:50:52 +00:00
parent 1da17fb7be
commit 3208d3ff46
4 changed files with 9 additions and 3 deletions

View File

@ -103,6 +103,7 @@ ASSYM(V_SYSCALL, offsetof(struct vmmeter, v_syscall));
ASSYM(V_INTR, offsetof(struct vmmeter, v_intr));
/* ASSYM(UPAGES, UPAGES);*/
ASSYM(KSTACK_PAGES, KSTACK_PAGES);
ASSYM(TD0_KSTACK_PAGES, TD0_KSTACK_PAGES);
ASSYM(PAGE_SIZE, PAGE_SIZE);
ASSYM(NPTEPG, NPTEPG);
ASSYM(NPDEPG, NPDEPG);

View File

@ -731,7 +731,7 @@ no_kernend:
movl %esi,R(IdlePTD)
/* Allocate KSTACK */
ALLOCPAGES(KSTACK_PAGES)
ALLOCPAGES(TD0_KSTACK_PAGES)
movl %esi,R(p0kpa)
addl $KERNBASE, %esi
movl %esi, R(proc0kstack)
@ -800,7 +800,7 @@ no_kernend:
/* Map proc0's KSTACK in the physical way ... */
movl R(p0kpa), %eax
movl $(KSTACK_PAGES), %ecx
movl $(TD0_KSTACK_PAGES), %ecx
fillkptphys($PG_RW)
/* Map ISA hole */

View File

@ -2445,7 +2445,7 @@ init386(first)
#endif
thread0.td_kstack = proc0kstack;
thread0.td_kstack_pages = KSTACK_PAGES;
thread0.td_kstack_pages = TD0_KSTACK_PAGES;
/*
* This may be done better later if it gets more high level

View File

@ -114,6 +114,11 @@
#define KSTACK_PAGES 2 /* Includes pcb! */
#endif
#define KSTACK_GUARD_PAGES 1 /* pages of kstack guard; 0 disables */
#if KSTACK_PAGES < 4
#define TD0_KSTACK_PAGES 4
#else
#define TD0_KSTACK_PAGES KSTACK_PAGES
#endif
/*
* Ceiling on amount of swblock kva space, can be changed via