Module Name:    src
Committed By:   martin
Date:           Tue Mar 13 15:47:45 UTC 2018

Modified Files:
        src/sys/arch/amd64/amd64 [netbsd-8]: genassym.cf locore.S machdep.c
        src/sys/arch/i386/i386 [netbsd-8]: genassym.cf locore.S machdep.c
        src/sys/arch/x86/include [netbsd-8]: cpu.h
        src/sys/arch/x86/x86 [netbsd-8]: intr.c pmap.c sys_machdep.c
        src/sys/arch/xen/x86 [netbsd-8]: cpu.c

Log Message:
Pullup the following revisions via patch, requested by maxv in ticket #629:

        sys/arch/amd64/amd64/genassym.cf                1.63,1.64
        sys/arch/amd64/amd64/locore.S                   1.144
        sys/arch/amd64/amd64/machdep.c                  1.281-1.283
        sys/arch/i386/i386/genassym.cf                  1.105-1.106
        sys/arch/i386/i386/locore.S                     1.155
        sys/arch/i386/i386/machdep.c                    1.802 (adapted),1.803
        sys/arch/x86/include/cpu.h                      1.85
        sys/arch/x86/x86/intr.c                         1.115-1.116
        sys/arch/x86/x86/pmap.c                         1.275
        sys/arch/x86/x86/sys_machdep.c                  1.45
        sys/arch/xen/x86/cpu.c                          1.117

Stop sharing the double-fault stack.
Merge the TSS structures into one single cpu_tss structure, and
allocate it dynamically.


To generate a diff of this commit:
cvs rdiff -u -r1.60 -r1.60.10.1 src/sys/arch/amd64/amd64/genassym.cf
cvs rdiff -u -r1.123.6.3 -r1.123.6.4 src/sys/arch/amd64/amd64/locore.S
cvs rdiff -u -r1.255.6.3 -r1.255.6.4 src/sys/arch/amd64/amd64/machdep.c
cvs rdiff -u -r1.99 -r1.99.10.1 src/sys/arch/i386/i386/genassym.cf
cvs rdiff -u -r1.145.6.2 -r1.145.6.3 src/sys/arch/i386/i386/locore.S
cvs rdiff -u -r1.782.6.3 -r1.782.6.4 src/sys/arch/i386/i386/machdep.c
cvs rdiff -u -r1.71.2.1 -r1.71.2.2 src/sys/arch/x86/include/cpu.h
cvs rdiff -u -r1.101.2.1 -r1.101.2.2 src/sys/arch/x86/x86/intr.c
cvs rdiff -u -r1.245.6.3 -r1.245.6.4 src/sys/arch/x86/x86/pmap.c
cvs rdiff -u -r1.35.6.2 -r1.35.6.3 src/sys/arch/x86/x86/sys_machdep.c
cvs rdiff -u -r1.110 -r1.110.6.1 src/sys/arch/xen/x86/cpu.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/genassym.cf
diff -u src/sys/arch/amd64/amd64/genassym.cf:1.60 src/sys/arch/amd64/amd64/genassym.cf:1.60.10.1
--- src/sys/arch/amd64/amd64/genassym.cf:1.60	Fri Nov 20 11:58:00 2015
+++ src/sys/arch/amd64/amd64/genassym.cf	Tue Mar 13 15:47:44 2018
@@ -1,4 +1,4 @@
-#	$NetBSD: genassym.cf,v 1.60 2015/11/20 11:58:00 maxv Exp $
+#	$NetBSD: genassym.cf,v 1.60.10.1 2018/03/13 15:47:44 martin Exp $
 
 #
 # Copyright (c) 1998, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -223,6 +223,8 @@ define	TF_REGSIZE		offsetof(struct trapf
 # Total size includes registers pushed by hardware
 define	FRAMESIZE		sizeof(struct trapframe)
 
+define	TSS_RSP0		offsetof(struct cpu_tss, tss.tss_rsp0)
+
 define	CPU_INFO_SCRATCH	offsetof(struct cpu_info, ci_scratch)
 define	CPU_INFO_SELF		offsetof(struct cpu_info, ci_self)
 define	CPU_INFO_RESCHED	offsetof(struct cpu_info, ci_want_resched)
@@ -233,7 +235,7 @@ define	CPU_INFO_CURLWP		offsetof(struct 
 define	CPU_INFO_CURLDT		offsetof(struct cpu_info, ci_curldt)
 define	CPU_INFO_IDLELWP	offsetof(struct cpu_info, ci_data.cpu_idlelwp)
 define	CPU_INFO_PMAP		offsetof(struct cpu_info, ci_pmap)
-define	CPU_INFO_RSP0		offsetof(struct cpu_info, ci_tss.tss_rsp0)
+define	CPU_INFO_TSS		offsetof(struct cpu_info, ci_tss)
 define	CPU_INFO_NSYSCALL	offsetof(struct cpu_info, ci_data.cpu_nsyscall)
 define	CPU_INFO_NTRAP		offsetof(struct cpu_info, ci_data.cpu_ntrap)
 define	CPU_INFO_NINTR		offsetof(struct cpu_info, ci_data.cpu_nintr)

Index: src/sys/arch/amd64/amd64/locore.S
diff -u src/sys/arch/amd64/amd64/locore.S:1.123.6.3 src/sys/arch/amd64/amd64/locore.S:1.123.6.4
--- src/sys/arch/amd64/amd64/locore.S:1.123.6.3	Wed Mar  7 14:50:56 2018
+++ src/sys/arch/amd64/amd64/locore.S	Tue Mar 13 15:47:44 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.S,v 1.123.6.3 2018/03/07 14:50:56 martin Exp $	*/
+/*	$NetBSD: locore.S,v 1.123.6.4 2018/03/13 15:47:44 martin Exp $	*/
 
 /*
  * Copyright-o-rama!
@@ -1099,7 +1099,8 @@ skip_save:
 	/* Switch ring0 stack */
 #ifndef XEN
 	movq	PCB_RSP0(%r14),%rax
-	movq	%rax,CPUVAR(RSP0)
+	movq	CPUVAR(TSS),%rdi
+	movq	%rax,TSS_RSP0(%rdi)
 #else
 	movq	%r14,%rdi
 	callq	_C_LABEL(x86_64_switch_context);

Index: src/sys/arch/amd64/amd64/machdep.c
diff -u src/sys/arch/amd64/amd64/machdep.c:1.255.6.3 src/sys/arch/amd64/amd64/machdep.c:1.255.6.4
--- src/sys/arch/amd64/amd64/machdep.c:1.255.6.3	Mon Jan  1 19:09:03 2018
+++ src/sys/arch/amd64/amd64/machdep.c	Tue Mar 13 15:47:44 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.255.6.3 2018/01/01 19:09:03 snj Exp $	*/
+/*	$NetBSD: machdep.c,v 1.255.6.4 2018/03/13 15:47:44 martin 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.255.6.3 2018/01/01 19:09:03 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.255.6.4 2018/03/13 15:47:44 martin Exp $");
 
 /* #define XENDEBUG_LOW  */
 
@@ -291,8 +291,6 @@ struct pool x86_dbregspl;
 phys_ram_seg_t mem_clusters[VM_PHYSSEG_MAX];
 int mem_cluster_cnt;
 
-char x86_64_doubleflt_stack[4096];
-
 int cpu_dump(void);
 int cpu_dumpsize(void);
 u_long cpu_dump_mempagecnt(void);
@@ -502,19 +500,25 @@ x86_64_proc0_tss_ldt_init(void)
 void
 cpu_init_tss(struct cpu_info *ci)
 {
-	struct x86_64_tss *tss = &ci->ci_tss;
+	struct cpu_tss *cputss;
 	uintptr_t p;
 
-	tss->tss_iobase = IOMAP_INVALOFF << 16;
-	/* tss->tss_ist[0] is filled by cpu_intr_init */
+	cputss = (struct cpu_tss *)uvm_km_alloc(kernel_map,
+	    sizeof(struct cpu_tss), 0, UVM_KMF_WIRED|UVM_KMF_ZERO);
+
+	cputss->tss.tss_iobase = IOMAP_INVALOFF << 16;
+	/* cputss->tss.tss_ist[0] is filled by cpu_intr_init */
 
 	/* double fault */
-	tss->tss_ist[1] = (uint64_t)x86_64_doubleflt_stack + PAGE_SIZE - 16;
+	p = uvm_km_alloc(kernel_map, PAGE_SIZE, 0, UVM_KMF_WIRED);
+	cputss->tss.tss_ist[1] = p + PAGE_SIZE - 16;
 
 	/* NMI */
 	p = uvm_km_alloc(kernel_map, PAGE_SIZE, 0, UVM_KMF_WIRED);
-	tss->tss_ist[2] = p + PAGE_SIZE - 16;
-	ci->ci_tss_sel = tss_alloc(tss);
+	cputss->tss.tss_ist[2] = p + PAGE_SIZE - 16;
+
+	ci->ci_tss = cputss;
+	ci->ci_tss_sel = tss_alloc(&cputss->tss);
 }
 
 void

Index: src/sys/arch/i386/i386/genassym.cf
diff -u src/sys/arch/i386/i386/genassym.cf:1.99 src/sys/arch/i386/i386/genassym.cf:1.99.10.1
--- src/sys/arch/i386/i386/genassym.cf:1.99	Wed Aug 26 03:00:53 2015
+++ src/sys/arch/i386/i386/genassym.cf	Tue Mar 13 15:47:44 2018
@@ -1,4 +1,4 @@
-#	$NetBSD: genassym.cf,v 1.99 2015/08/26 03:00:53 uebayasi Exp $
+#	$NetBSD: genassym.cf,v 1.99.10.1 2018/03/13 15:47:44 martin Exp $
 
 #
 # Copyright (c) 1998, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -256,6 +256,11 @@ else
 define	IH_NEXT			offsetof(struct intrhand, ih_next)
 endif
 
+define	TSS_TSS			offsetof(struct cpu_tss, tss)
+define	TSS_ESP0		offsetof(struct cpu_tss, tss.tss_esp0)
+define	TSS_IOBASE		offsetof(struct cpu_tss, tss.tss_iobase)
+define	TSS_IOMAP		offsetof(struct cpu_tss, iomap)
+
 define	CPU_INFO_SELF		offsetof(struct cpu_info, ci_self)
 define	CPU_INFO_RESCHED	offsetof(struct cpu_info, ci_want_resched)
 define	CPU_INFO_WANT_PMAPLOAD	offsetof(struct cpu_info, ci_want_pmapload)
@@ -267,10 +272,6 @@ define	CPU_INFO_CURLDT		offsetof(struct 
 define	CPU_INFO_IDLELWP	offsetof(struct cpu_info, ci_data.cpu_idlelwp)
 define	CPU_INFO_PMAP		offsetof(struct cpu_info, ci_pmap)
 define	CPU_INFO_TSS		offsetof(struct cpu_info, ci_tss)
-define	CPU_INFO_TSS_SEL	offsetof(struct cpu_info, ci_tss_sel)
-define	CPU_INFO_ESP0		offsetof(struct cpu_info, ci_tss.tss_esp0)
-define	CPU_INFO_IOBASE		offsetof(struct cpu_info, ci_tss.tss_iobase)
-define	CPU_INFO_IOMAP		offsetof(struct cpu_info, ci_iomap)
 define	IOMAP_INVALOFF		IOMAP_INVALOFF
 define	CPU_INFO_NSYSCALL	offsetof(struct cpu_info, ci_data.cpu_nsyscall)
 define	CPU_INFO_NTRAP		offsetof(struct cpu_info, ci_data.cpu_ntrap)

Index: src/sys/arch/i386/i386/locore.S
diff -u src/sys/arch/i386/i386/locore.S:1.145.6.2 src/sys/arch/i386/i386/locore.S:1.145.6.3
--- src/sys/arch/i386/i386/locore.S:1.145.6.2	Sat Sep  9 17:29:40 2017
+++ src/sys/arch/i386/i386/locore.S	Tue Mar 13 15:47:44 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.S,v 1.145.6.2 2017/09/09 17:29:40 snj Exp $	*/
+/*	$NetBSD: locore.S,v 1.145.6.3 2018/03/13 15:47:44 martin Exp $	*/
 
 /*
  * Copyright-o-rama!
@@ -128,7 +128,7 @@
  */
 
 #include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.145.6.2 2017/09/09 17:29:40 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.145.6.3 2018/03/13 15:47:44 martin Exp $");
 
 #include "opt_compat_oldboot.h"
 #include "opt_copy_symtab.h"
@@ -1112,7 +1112,8 @@ skip_save:
 	addl	$4,%esp
 #else
 	movl	PCB_ESP0(%ebx),%eax
-	movl	%eax,CPUVAR(ESP0)
+	movl	CPUVAR(TSS),%ecx
+	movl	%eax,TSS_ESP0(%ecx)
 #endif
 
 	/* Don't bother with the rest if switching to a system process. */
@@ -1136,7 +1137,8 @@ skip_save:
 	movl	PCB_IOMAP(%ebx),%eax
 	orl	%eax,%eax
 	jnz	.Lcopy_iobitmap
-	movl	$(IOMAP_INVALOFF << 16),CPUVAR(IOBASE)
+	movl	CPUVAR(TSS),%eax
+	movl	$(IOMAP_INVALOFF << 16),TSS_IOBASE(%eax)
 .Liobitmap_done:
 
 	/* Is this process using RAS (restartable atomic sequences)? */
@@ -1200,13 +1202,14 @@ switch_return:
 	pushl	%esi
 	pushl	%edi
 	movl	%eax,%esi		/* pcb_iomap */
-	movl	CPUVAR(SELF),%edi
-	leal	CPU_INFO_IOMAP(%edi),%edi
+	movl	CPUVAR(TSS),%edi
+	leal	TSS_IOMAP(%edi),%edi
 	rep
 	movsl
 	popl	%edi
 	popl	%esi
-	movl	$((CPU_INFO_IOMAP - CPU_INFO_TSS) << 16),CPUVAR(IOBASE)
+	movl	CPUVAR(TSS),%eax
+	movl	$((TSS_IOMAP - TSS_TSS) << 16),TSS_IOBASE(%eax)
 	jmp	.Liobitmap_done
 END(cpu_switchto)
 

Index: src/sys/arch/i386/i386/machdep.c
diff -u src/sys/arch/i386/i386/machdep.c:1.782.6.3 src/sys/arch/i386/i386/machdep.c:1.782.6.4
--- src/sys/arch/i386/i386/machdep.c:1.782.6.3	Thu Mar  8 11:33:15 2018
+++ src/sys/arch/i386/i386/machdep.c	Tue Mar 13 15:47:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.782.6.3 2018/03/08 11:33:15 martin Exp $	*/
+/*	$NetBSD: machdep.c,v 1.782.6.4 2018/03/13 15:47:45 martin 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.782.6.3 2018/03/08 11:33:15 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.782.6.4 2018/03/13 15:47:45 martin Exp $");
 
 #include "opt_beep.h"
 #include "opt_compat_ibcs2.h"
@@ -483,8 +483,8 @@ cpu_startup(void)
 	gdt_init();
 	i386_proc0_tss_ldt_init();
 
-#ifndef XEN
 	cpu_init_tss(&cpu_info_primary);
+#ifndef XEN
 	ltr(cpu_info_primary.ci_tss_sel);
 #endif
 
@@ -618,10 +618,10 @@ cpu_set_tss_gates(struct cpu_info *ci)
 
 	ci->ci_doubleflt_stack = (char *)uvm_km_alloc(kernel_map, USPACE, 0,
 	    UVM_KMF_WIRED);
-
-	tss_init(&ci->ci_doubleflt_tss, ci->ci_doubleflt_stack,
+	tss_init(&ci->ci_tss->dblflt_tss, ci->ci_doubleflt_stack,
 	    IDTVEC(tss_trap08));
-	setsegment(&sd, &ci->ci_doubleflt_tss, sizeof(struct i386tss) - 1,
+
+	setsegment(&sd, &ci->ci_tss->dblflt_tss, sizeof(struct i386tss) - 1,
 	    SDT_SYS386TSS, SEL_KPL, 0, 0);
 	ci->ci_gdt[GTRAPTSS_SEL].sd = sd;
 
@@ -638,10 +638,10 @@ cpu_set_tss_gates(struct cpu_info *ci)
 	 */
 	ci->ci_ddbipi_stack = (char *)uvm_km_alloc(kernel_map, USPACE, 0,
 	    UVM_KMF_WIRED);
-	tss_init(&ci->ci_ddbipi_tss, ci->ci_ddbipi_stack,
+	tss_init(&ci->ci_tss->ddbipi_tss, ci->ci_ddbipi_stack,
 	    x2apic_mode ? Xx2apic_intrddbipi : Xintrddbipi);
 
-	setsegment(&sd, &ci->ci_ddbipi_tss, sizeof(struct i386tss) - 1,
+	setsegment(&sd, &ci->ci_tss->ddbipi_tss, sizeof(struct i386tss) - 1,
 	    SDT_SYS386TSS, SEL_KPL, 0, 0);
 	ci->ci_gdt[GIPITSS_SEL].sd = sd;
 
@@ -649,6 +649,7 @@ cpu_set_tss_gates(struct cpu_info *ci)
 	    GSEL(GIPITSS_SEL, SEL_KPL));
 #endif
 }
+#endif /* XEN */
 
 /*
  * Set up TSS and I/O bitmap.
@@ -656,15 +657,24 @@ cpu_set_tss_gates(struct cpu_info *ci)
 void
 cpu_init_tss(struct cpu_info *ci)
 {
-	struct i386tss *tss = &ci->ci_tss;
+	struct cpu_tss *cputss;
 
-	tss->tss_iobase = IOMAP_INVALOFF << 16;
-	tss->tss_ss0 = GSEL(GDATA_SEL, SEL_KPL);
-	tss->tss_ldt = GSEL(GLDT_SEL, SEL_KPL);
-	tss->tss_cr3 = rcr3();
-	ci->ci_tss_sel = tss_alloc(tss);
+	cputss = (struct cpu_tss *)uvm_km_alloc(kernel_map,
+	    sizeof(struct cpu_tss), 0, UVM_KMF_WIRED|UVM_KMF_ZERO);
+
+	cputss->tss.tss_iobase = IOMAP_INVALOFF << 16;
+
+#ifndef XEN
+	cputss->tss.tss_ss0 = GSEL(GDATA_SEL, SEL_KPL);
+	cputss->tss.tss_ldt = GSEL(GLDT_SEL, SEL_KPL);
+	cputss->tss.tss_cr3 = rcr3();
+#endif
+
+	ci->ci_tss = cputss;
+#ifndef XEN
+	ci->ci_tss_sel = tss_alloc(&cputss->tss);
+#endif
 }
-#endif /* XEN */
 
 void *
 getframe(struct lwp *l, int sig, int *onstack)

Index: src/sys/arch/x86/include/cpu.h
diff -u src/sys/arch/x86/include/cpu.h:1.71.2.1 src/sys/arch/x86/include/cpu.h:1.71.2.2
--- src/sys/arch/x86/include/cpu.h:1.71.2.1	Thu Mar  8 11:33:15 2018
+++ src/sys/arch/x86/include/cpu.h	Tue Mar 13 15:47:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.h,v 1.71.2.1 2018/03/08 11:33:15 martin Exp $	*/
+/*	$NetBSD: cpu.h,v 1.71.2.2 2018/03/13 15:47:45 martin Exp $	*/
 
 /*-
  * Copyright (c) 1990 The Regents of the University of California.
@@ -84,6 +84,15 @@ struct pmap;
 #define	NIOPORTS	1024		/* # of ports we allow to be mapped */
 #define	IOMAPSIZE	(NIOPORTS / 8)	/* I/O bitmap size in bytes */
 
+struct cpu_tss {
+#ifdef i386
+	struct i386tss dblflt_tss;
+	struct i386tss ddbipi_tss;
+#endif
+	struct i386tss tss;
+	uint8_t iomap[IOMAPSIZE];
+} __packed;
+
 /*
  * a bunch of this belongs in cpuvar.h; move it later..
  */
@@ -183,13 +192,6 @@ struct cpu_info {
 	u_int ci_cflush_lsize;	/* CLFLUSH insn line size */
 	struct x86_cache_info ci_cinfo[CAI_COUNT];
 
-	union descriptor *ci_gdt;
-
-#ifdef i386
-	struct i386tss	ci_doubleflt_tss;
-	struct i386tss	ci_ddbipi_tss;
-#endif
-
 #ifdef PAE
 	uint32_t	ci_pae_l3_pdirpa; /* PA of L3 PD */
 	pd_entry_t *	ci_pae_l3_pdir; /* VA pointer to L3 PD */
@@ -222,8 +224,11 @@ struct cpu_info {
 	device_t	ci_temperature;	/* Intel coretemp(4) or equivalent */
 	device_t	ci_vm;		/* Virtual machine guest driver */
 
-	struct i386tss	ci_tss;		/* Per-cpu TSS; shared among LWPs */
-	char		ci_iomap[IOMAPSIZE]; /* I/O Bitmap */
+	/*
+	 * Segmentation-related data.
+	 */
+	union descriptor *ci_gdt;
+	struct cpu_tss	*ci_tss;		/* Per-cpu TSSes; shared among LWPs */
 	int ci_tss_sel;			/* TSS selector of this cpu */
 
 	/*

Index: src/sys/arch/x86/x86/intr.c
diff -u src/sys/arch/x86/x86/intr.c:1.101.2.1 src/sys/arch/x86/x86/intr.c:1.101.2.2
--- src/sys/arch/x86/x86/intr.c:1.101.2.1	Sat Jan 13 21:50:31 2018
+++ src/sys/arch/x86/x86/intr.c	Tue Mar 13 15:47:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: intr.c,v 1.101.2.1 2018/01/13 21:50:31 snj Exp $	*/
+/*	$NetBSD: intr.c,v 1.101.2.2 2018/03/13 15:47:45 martin Exp $	*/
 
 /*-
  * Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -133,7 +133,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.101.2.1 2018/01/13 21:50:31 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.101.2.2 2018/03/13 15:47:45 martin Exp $");
 
 #include "opt_intrdebug.h"
 #include "opt_multiprocessor.h"
@@ -1359,7 +1359,7 @@ cpu_intr_init(struct cpu_info *ci)
 	ci->ci_intrstack = (char *)istack + redzone_const_or_zero(PAGE_SIZE) +
 	    INTRSTACKSIZE - 33 * sizeof(register_t);
 #if defined(__x86_64__)
-	ci->ci_tss.tss_ist[0] = (uintptr_t)ci->ci_intrstack & ~0xf;
+	ci->ci_tss->tss.tss_ist[0] = (uintptr_t)ci->ci_intrstack & ~0xf;
 #endif /* defined(__x86_64__) */
 #endif /* defined(INTRSTACKSIZE) */
 	ci->ci_idepth = -1;

Index: src/sys/arch/x86/x86/pmap.c
diff -u src/sys/arch/x86/x86/pmap.c:1.245.6.3 src/sys/arch/x86/x86/pmap.c:1.245.6.4
--- src/sys/arch/x86/x86/pmap.c:1.245.6.3	Tue Mar  6 08:45:59 2018
+++ src/sys/arch/x86/x86/pmap.c	Tue Mar 13 15:47:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.245.6.3 2018/03/06 08:45:59 martin Exp $	*/
+/*	$NetBSD: pmap.c,v 1.245.6.4 2018/03/13 15:47:45 martin 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.245.6.3 2018/03/06 08:45:59 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.245.6.4 2018/03/13 15:47:45 martin Exp $");
 
 #include "opt_user_ldt.h"
 #include "opt_lockdebug.h"
@@ -2833,8 +2833,8 @@ pmap_load(void)
 
 #ifdef i386
 #ifndef XEN
-	ci->ci_tss.tss_ldt = pmap->pm_ldt_sel;
-	ci->ci_tss.tss_cr3 = pcb->pcb_cr3;
+	ci->ci_tss->tss.tss_ldt = pmap->pm_ldt_sel;
+	ci->ci_tss->tss.tss_cr3 = pcb->pcb_cr3;
 #endif /* !XEN */
 #endif /* i386 */
 

Index: src/sys/arch/x86/x86/sys_machdep.c
diff -u src/sys/arch/x86/x86/sys_machdep.c:1.35.6.2 src/sys/arch/x86/x86/sys_machdep.c:1.35.6.3
--- src/sys/arch/x86/x86/sys_machdep.c:1.35.6.2	Sat Sep  9 17:29:41 2017
+++ src/sys/arch/x86/x86/sys_machdep.c	Tue Mar 13 15:47:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: sys_machdep.c,v 1.35.6.2 2017/09/09 17:29:41 snj Exp $	*/
+/*	$NetBSD: sys_machdep.c,v 1.35.6.3 2018/03/13 15:47:45 martin Exp $	*/
 
 /*
  * Copyright (c) 1998, 2007, 2009, 2017 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sys_machdep.c,v 1.35.6.2 2017/09/09 17:29:41 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sys_machdep.c,v 1.35.6.3 2018/03/13 15:47:45 martin Exp $");
 
 #include "opt_mtrr.h"
 #include "opt_pmc.h"
@@ -500,9 +500,9 @@ x86_set_ioperm(struct lwp *l, void *args
 
 	kpreempt_disable();
 	ci = curcpu();
-	memcpy(ci->ci_iomap, pcb->pcb_iomap, sizeof(ci->ci_iomap));
-	ci->ci_tss.tss_iobase =
-	    ((uintptr_t)ci->ci_iomap - (uintptr_t)&ci->ci_tss) << 16;
+	memcpy(ci->ci_tss->iomap, pcb->pcb_iomap, IOMAPSIZE);
+	ci->ci_tss->tss.tss_iobase =
+	    ((uintptr_t)&ci->ci_tss->iomap - (uintptr_t)&ci->ci_tss->tss) << 16;
 	kpreempt_enable();
 
 	return error;

Index: src/sys/arch/xen/x86/cpu.c
diff -u src/sys/arch/xen/x86/cpu.c:1.110 src/sys/arch/xen/x86/cpu.c:1.110.6.1
--- src/sys/arch/xen/x86/cpu.c:1.110	Thu Mar 23 18:08:06 2017
+++ src/sys/arch/xen/x86/cpu.c	Tue Mar 13 15:47:45 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.c,v 1.110 2017/03/23 18:08:06 maxv Exp $	*/
+/*	$NetBSD: cpu.c,v 1.110.6.1 2018/03/13 15:47:45 martin Exp $	*/
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.110 2017/03/23 18:08:06 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.110.6.1 2018/03/13 15:47:45 martin Exp $");
 
 #include "opt_ddb.h"
 #include "opt_multiprocessor.h"
@@ -389,6 +389,7 @@ cpu_attach_common(device_t parent, devic
 #ifdef TRAPLOG
 		ci->ci_tlog_base = kmem_zalloc(sizeof(struct tlog), KM_SLEEP);
 #endif
+		cpu_init_tss(ci);
 	} else {
 		aprint_naive(": %s Processor\n",
 		    caa->cpu_role == CPU_ROLE_SP ? "Single" : "Boot");

Reply via email to