Module Name: src Committed By: maxv Date: Sat Jul 22 08:23:19 UTC 2017
Modified Files: src/sys/arch/amd64/amd64: machdep.c src/sys/arch/i386/i386: machdep.c src/sys/arch/x86/x86: pmap.c Log Message: Initialize these kpm fields in pmap_bootstrap. To generate a diff of this commit: cvs rdiff -u -r1.256 -r1.257 src/sys/arch/amd64/amd64/machdep.c cvs rdiff -u -r1.783 -r1.784 src/sys/arch/i386/i386/machdep.c cvs rdiff -u -r1.254 -r1.255 src/sys/arch/x86/x86/pmap.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/machdep.c diff -u src/sys/arch/amd64/amd64/machdep.c:1.256 src/sys/arch/amd64/amd64/machdep.c:1.257 --- src/sys/arch/amd64/amd64/machdep.c:1.256 Fri Jul 14 13:21:29 2017 +++ src/sys/arch/amd64/amd64/machdep.c Sat Jul 22 08:23:19 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.256 2017/07/14 13:21:29 maxv Exp $ */ +/* $NetBSD: machdep.c,v 1.257 2017/07/22 08:23:19 maxv Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007, 2008, 2011 @@ -111,7 +111,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.256 2017/07/14 13:21:29 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.257 2017/07/22 08:23:19 maxv Exp $"); /* #define XENDEBUG_LOW */ @@ -472,25 +472,21 @@ x86_64_proc0_tss_ldt_init(void) pcb->pcb_rsp0 = (uvm_lwp_getuarea(l) + USPACE - 16) & ~0xf; pcb->pcb_iopl = SEL_KPL; pcb->pcb_dbregs = NULL; - - pmap_kernel()->pm_ldt_sel = GSYSSEL(GLDT_SEL, SEL_KPL); pcb->pcb_cr0 = rcr0() & ~CR0_TS; l->l_md.md_regs = (struct trapframe *)pcb->pcb_rsp0 - 1; #if !defined(XEN) - lldt(pmap_kernel()->pm_ldt_sel); + lldt(GSYSSEL(GLDT_SEL, SEL_KPL)); #else - { struct physdev_op physop; - xen_set_ldt((vaddr_t) ldtstore, LDT_SIZE >> 3); + xen_set_ldt((vaddr_t)ldtstore, LDT_SIZE >> 3); /* Reset TS bit and set kernel stack for interrupt handlers */ HYPERVISOR_fpu_taskswitch(1); HYPERVISOR_stack_switch(GSEL(GDATA_SEL, SEL_KPL), pcb->pcb_rsp0); physop.cmd = PHYSDEVOP_SET_IOPL; physop.u.set_iopl.iopl = pcb->pcb_iopl; HYPERVISOR_physdev_op(&physop); - } -#endif /* XEN */ +#endif } /* Index: src/sys/arch/i386/i386/machdep.c diff -u src/sys/arch/i386/i386/machdep.c:1.783 src/sys/arch/i386/i386/machdep.c:1.784 --- src/sys/arch/i386/i386/machdep.c:1.783 Sat Jul 1 10:44:42 2017 +++ src/sys/arch/i386/i386/machdep.c Sat Jul 22 08:23:18 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.783 2017/07/01 10:44:42 maxv Exp $ */ +/* $NetBSD: machdep.c,v 1.784 2017/07/22 08:23:18 maxv Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2000, 2004, 2006, 2008, 2009 @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.783 2017/07/01 10:44:42 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.784 2017/07/22 08:23:18 maxv Exp $"); #include "opt_beep.h" #include "opt_compat_ibcs2.h" @@ -497,13 +497,9 @@ cpu_startup(void) void i386_proc0_tss_ldt_init(void) { - struct lwp *l; - struct pcb *pcb __diagused; - - l = &lwp0; - pcb = lwp_getpcb(l); + struct lwp *l = &lwp0; + struct pcb *pcb = lwp_getpcb(l); - pmap_kernel()->pm_ldt_sel = GSEL(GLDT_SEL, SEL_KPL); pcb->pcb_cr0 = rcr0() & ~CR0_TS; pcb->pcb_esp0 = uvm_lwp_getuarea(l) + USPACE - 16; pcb->pcb_iopl = SEL_KPL; @@ -513,7 +509,7 @@ i386_proc0_tss_ldt_init(void) pcb->pcb_dbregs = NULL; #ifndef XEN - lldt(pmap_kernel()->pm_ldt_sel); + lldt(GSEL(GLDT_SEL, SEL_KPL)); #else HYPERVISOR_fpu_taskswitch(1); XENPRINTF(("lwp tss sp %p ss %04x/%04x\n", Index: src/sys/arch/x86/x86/pmap.c diff -u src/sys/arch/x86/x86/pmap.c:1.254 src/sys/arch/x86/x86/pmap.c:1.255 --- src/sys/arch/x86/x86/pmap.c:1.254 Sun Jun 25 22:16:46 2017 +++ src/sys/arch/x86/x86/pmap.c Sat Jul 22 08:23:19 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.254 2017/06/25 22:16:46 bouyer Exp $ */ +/* $NetBSD: pmap.c,v 1.255 2017/07/22 08:23:19 maxv Exp $ */ /* * Copyright (c) 2008, 2010, 2016, 2017 The NetBSD Foundation, Inc. @@ -171,7 +171,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.254 2017/06/25 22:16:46 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.255 2017/07/22 08:23:19 maxv Exp $"); #include "opt_user_ldt.h" #include "opt_lockdebug.h" @@ -1265,6 +1265,10 @@ pmap_bootstrap(vaddr_t kva_start) kcpuset_create(&kpm->pm_cpus, true); kcpuset_create(&kpm->pm_kernel_cpus, true); + kpm->pm_ldt = NULL; + kpm->pm_ldt_len = 0; + kpm->pm_ldt_sel = GSYSSEL(GLDT_SEL, SEL_KPL); + /* * the above is just a rough estimate and not critical to the proper * operation of the system.