Module Name:    src
Committed By:   maxv
Date:           Sun Aug 27 09:32:13 UTC 2017

Modified Files:
        src/sys/arch/i386/i386: machdep.c
        src/sys/arch/x86/include: cpu.h
        src/sys/arch/x86/x86: cpu.c

Log Message:
style, and move some i386-specific code into i386/


To generate a diff of this commit:
cvs rdiff -u -r1.791 -r1.792 src/sys/arch/i386/i386/machdep.c
cvs rdiff -u -r1.77 -r1.78 src/sys/arch/x86/include/cpu.h
cvs rdiff -u -r1.133 -r1.134 src/sys/arch/x86/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/i386/i386/machdep.c
diff -u src/sys/arch/i386/i386/machdep.c:1.791 src/sys/arch/i386/i386/machdep.c:1.792
--- src/sys/arch/i386/i386/machdep.c:1.791	Sat Aug 12 19:06:23 2017
+++ src/sys/arch/i386/i386/machdep.c	Sun Aug 27 09:32:12 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.791 2017/08/12 19:06:23 kre Exp $	*/
+/*	$NetBSD: machdep.c,v 1.792 2017/08/27 09:32:12 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.791 2017/08/12 19:06:23 kre Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.792 2017/08/27 09:32:12 maxv Exp $");
 
 #include "opt_beep.h"
 #include "opt_compat_freebsd.h"
@@ -560,7 +560,80 @@ i386_tls_switch(lwp_t *l)
 }
 #endif /* XEN */
 
+/* XXX */
+#define IDTVEC(name)	__CONCAT(X, name)
+typedef void (vector)(void);
+
 #ifndef XEN
+static void	tss_init(struct i386tss *, void *, void *);
+
+static void
+tss_init(struct i386tss *tss, void *stack, void *func)
+{
+	KASSERT(curcpu()->ci_pmap == pmap_kernel());
+
+	memset(tss, 0, sizeof *tss);
+	tss->tss_esp0 = tss->tss_esp = (int)((char *)stack + USPACE - 16);
+	tss->tss_ss0 = GSEL(GDATA_SEL, SEL_KPL);
+	tss->__tss_cs = GSEL(GCODE_SEL, SEL_KPL);
+	tss->tss_fs = GSEL(GCPU_SEL, SEL_KPL);
+	tss->tss_gs = tss->__tss_es = tss->__tss_ds =
+	    tss->__tss_ss = GSEL(GDATA_SEL, SEL_KPL);
+	/* %cr3 contains the value associated to pmap_kernel */
+	tss->tss_cr3 = rcr3();
+	tss->tss_esp = (int)((char *)stack + USPACE - 16);
+	tss->tss_ldt = GSEL(GLDT_SEL, SEL_KPL);
+	tss->__tss_eflags = PSL_MBO | PSL_NT;	/* XXX not needed? */
+	tss->__tss_eip = (int)func;
+}
+
+extern vector IDTVEC(tss_trap08);
+#if defined(DDB) && defined(MULTIPROCESSOR)
+extern vector Xintrddbipi, Xx2apic_intrddbipi;
+extern int ddb_vec;
+#endif
+
+void
+cpu_set_tss_gates(struct cpu_info *ci)
+{
+	struct segment_descriptor sd;
+	void *doubleflt_stack;
+
+	doubleflt_stack = (void *)uvm_km_alloc(kernel_map, USPACE, 0,
+	    UVM_KMF_WIRED);
+	tss_init(&ci->ci_doubleflt_tss, doubleflt_stack, IDTVEC(tss_trap08));
+
+	setsegment(&sd, &ci->ci_doubleflt_tss, sizeof(struct i386tss) - 1,
+	    SDT_SYS386TSS, SEL_KPL, 0, 0);
+	ci->ci_gdt[GTRAPTSS_SEL].sd = sd;
+
+	setgate(&idt[8], NULL, 0, SDT_SYSTASKGT, SEL_KPL,
+	    GSEL(GTRAPTSS_SEL, SEL_KPL));
+
+#if defined(DDB) && defined(MULTIPROCESSOR)
+	/*
+	 * Set up separate handler for the DDB IPI, so that it doesn't
+	 * stomp on a possibly corrupted stack.
+	 *
+	 * XXX overwriting the gate set in db_machine_init.
+	 * Should rearrange the code so that it's set only once.
+	 */
+	void *ddbipi_stack;
+
+	ddbipi_stack = (void *)uvm_km_alloc(kernel_map, USPACE, 0,
+	    UVM_KMF_WIRED);
+	tss_init(&ci->ci_ddbipi_tss, ddbipi_stack,
+	    x2apic_mode ? Xx2apic_intrddbipi : Xintrddbipi);
+
+	setsegment(&sd, &ci->ci_ddbipi_tss, sizeof(struct i386tss) - 1,
+	    SDT_SYS386TSS, SEL_KPL, 0, 0);
+	ci->ci_gdt[GIPITSS_SEL].sd = sd;
+
+	setgate(&idt[ddb_vec], NULL, 0, SDT_SYSTASKGT, SEL_KPL,
+	    GSEL(GIPITSS_SEL, SEL_KPL));
+#endif
+}
+
 /*
  * Set up TSS and I/O bitmap.
  */
@@ -904,8 +977,7 @@ setsegment(struct segment_descriptor *sd
 	sd->sd_hibase = (int)base >> 24;
 }
 
-#define	IDTVEC(name)	__CONCAT(X, name)
-typedef void (vector)(void);
+/* XXX */
 extern vector IDTVEC(syscall);
 extern vector *IDTVEC(exceptions)[];
 #ifdef XEN

Index: src/sys/arch/x86/include/cpu.h
diff -u src/sys/arch/x86/include/cpu.h:1.77 src/sys/arch/x86/include/cpu.h:1.78
--- src/sys/arch/x86/include/cpu.h:1.77	Sun Aug 27 08:38:32 2017
+++ src/sys/arch/x86/include/cpu.h	Sun Aug 27 09:32:13 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.h,v 1.77 2017/08/27 08:38:32 maxv Exp $	*/
+/*	$NetBSD: cpu.h,v 1.78 2017/08/27 09:32:13 maxv Exp $	*/
 
 /*-
  * Copyright (c) 1990 The Regents of the University of California.
@@ -403,6 +403,9 @@ extern void (*x86_cpu_idle)(void);
 #define	cpu_idle() (*x86_cpu_idle)()
 
 /* machdep.c */
+#ifdef i386
+void	cpu_set_tss_gates(struct cpu_info *);
+#endif
 void	cpu_reset(void);
 
 /* longrun.c */
@@ -429,9 +432,6 @@ extern vm_guest_t vm_guest;
 /* cpu_topology.c */
 void	x86_cpu_topology(struct cpu_info *);
 
-/* vm_machdep.c */
-void	cpu_proc_fork(struct proc *, struct proc *);
-
 /* locore.s */
 struct region_descriptor;
 void	lgdt(struct region_descriptor *);
@@ -458,10 +458,10 @@ void	i8254_initclocks(void);
 #endif
 
 /* cpu.c */
-
 void	cpu_probe_features(struct cpu_info *);
 
 /* vm_machdep.c */
+void	cpu_proc_fork(struct proc *, struct proc *);
 paddr_t	kvtop(void *);
 
 #ifdef USER_LDT

Index: src/sys/arch/x86/x86/cpu.c
diff -u src/sys/arch/x86/x86/cpu.c:1.133 src/sys/arch/x86/x86/cpu.c:1.134
--- src/sys/arch/x86/x86/cpu.c:1.133	Sun Aug 27 08:38:32 2017
+++ src/sys/arch/x86/x86/cpu.c	Sun Aug 27 09:32:12 2017
@@ -1,6 +1,6 @@
-/*	$NetBSD: cpu.c,v 1.133 2017/08/27 08:38:32 maxv Exp $	*/
+/*	$NetBSD: cpu.c,v 1.134 2017/08/27 09:32:12 maxv Exp $	*/
 
-/*-
+/*
  * Copyright (c) 2000-2012 NetBSD Foundation, Inc.
  * All rights reserved.
  *
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.133 2017/08/27 08:38:32 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.134 2017/08/27 09:32:12 maxv Exp $");
 
 #include "opt_ddb.h"
 #include "opt_mpbios.h"		/* for MPDEBUG */
@@ -164,15 +164,13 @@ struct cpu_info cpu_info_primary __align
 	.ci_curldt = -1,
 #ifdef TRAPLOG
 	.ci_tlog_base = &tlog_primary,
-#endif /* !TRAPLOG */
+#endif
 };
 
 struct cpu_info *cpu_info_list = &cpu_info_primary;
 
-static void	cpu_set_tss_gates(struct cpu_info *);
-
 #ifdef i386
-static void	tss_init(struct i386tss *, void *, void *);
+void		cpu_set_tss_gates(struct cpu_info *);
 #endif
 
 static void	cpu_init_idle_lwp(struct cpu_info *);
@@ -187,8 +185,6 @@ uint32_t cpu_feature[7] __read_mostly; /
 			 * [6] structured extended features cpuid.7:%ecx
 			 */
 
-extern char x86_64_doubleflt_stack[];
-
 #ifdef MULTIPROCESSOR
 bool x86_mp_online;
 paddr_t mp_trampoline_paddr = MP_TRAMPOLINE;
@@ -395,7 +391,9 @@ cpu_attach(device_t parent, device_t sel
 		cpu_intr_init(ci);
 		cpu_get_tsc_freq(ci);
 		cpu_init(ci);
+#ifdef i386
 		cpu_set_tss_gates(ci);
+#endif
 		pmap_cpu_init_late(ci);
 #if NLAPIC > 0
 		if (caa->cpu_role != CPU_ROLE_SP) {
@@ -434,7 +432,9 @@ cpu_attach(device_t parent, device_t sel
 		 */
 		cpu_intr_init(ci);
 		gdt_alloc_cpu(ci);
+#ifdef i386
 		cpu_set_tss_gates(ci);
+#endif
 		pmap_cpu_init_late(ci);
 		cpu_start_secondary(ci);
 		if (ci->ci_flags & CPUF_PRESENT) {
@@ -501,7 +501,6 @@ cpu_rescan(device_t self, const char *if
 	cfaa.ci = ci;
 
 	if (ifattr_match(ifattr, "cpufeaturebus")) {
-
 		if (ci->ci_frequency == NULL) {
 			cfaa.name = "frequency";
 			ci->ci_frequency = config_found_ia(self,
@@ -799,7 +798,7 @@ cpu_hatch(void *v)
 	cpu_probe(ci);
 
 	ci->ci_data.cpu_cc_freq = cpu_info_primary.ci_data.cpu_cc_freq;
-	/* cpu_get_tsc_freq(ci); */ 
+	/* cpu_get_tsc_freq(ci); */
 
 	KDASSERT((ci->ci_flags & CPUF_PRESENT) == 0);
 
@@ -815,7 +814,7 @@ cpu_hatch(void *v)
 	/*
 	 * Wait to be brought online.  Use 'monitor/mwait' if available,
 	 * in order to make the TSC drift as much as possible. so that
-	 * we can detect it later.  If not available, try 'pause'. 
+	 * we can detect it later.  If not available, try 'pause'.
 	 * We'd like to use 'hlt', but we have interrupts off.
 	 */
 	while ((ci->ci_flags & CPUF_GO) == 0) {
@@ -924,7 +923,7 @@ cpu_copy_trampoline(void)
 	 */
 	extern u_char cpu_spinup_trampoline[];
 	extern u_char cpu_spinup_trampoline_end[];
-	
+
 	vaddr_t mp_trampoline_vaddr;
 
 	mp_trampoline_vaddr = uvm_km_alloc(kernel_map, PAGE_SIZE, 0,
@@ -943,84 +942,6 @@ cpu_copy_trampoline(void)
 }
 #endif
 
-#ifdef i386
-static void
-tss_init(struct i386tss *tss, void *stack, void *func)
-{
-	KASSERT(curcpu()->ci_pmap == pmap_kernel());
-
-	memset(tss, 0, sizeof *tss);
-	tss->tss_esp0 = tss->tss_esp = (int)((char *)stack + USPACE - 16);
-	tss->tss_ss0 = GSEL(GDATA_SEL, SEL_KPL);
-	tss->__tss_cs = GSEL(GCODE_SEL, SEL_KPL);
-	tss->tss_fs = GSEL(GCPU_SEL, SEL_KPL);
-	tss->tss_gs = tss->__tss_es = tss->__tss_ds =
-	    tss->__tss_ss = GSEL(GDATA_SEL, SEL_KPL);
-	/* %cr3 contains the value associated to pmap_kernel */
-	tss->tss_cr3 = rcr3();
-	tss->tss_esp = (int)((char *)stack + USPACE - 16);
-	tss->tss_ldt = GSEL(GLDT_SEL, SEL_KPL);
-	tss->__tss_eflags = PSL_MBO | PSL_NT;	/* XXX not needed? */
-	tss->__tss_eip = (int)func;
-}
-
-/* XXX */
-#define IDTVEC(name)	__CONCAT(X, name)
-typedef void (vector)(void);
-extern vector IDTVEC(tss_trap08);
-#if defined(DDB) && defined(MULTIPROCESSOR)
-extern vector Xintrddbipi, Xx2apic_intrddbipi;
-extern int ddb_vec;
-#endif
-
-static void
-cpu_set_tss_gates(struct cpu_info *ci)
-{
-	struct segment_descriptor sd;
-	void *doubleflt_stack;
-
-	doubleflt_stack = (void *)uvm_km_alloc(kernel_map, USPACE, 0,
-	    UVM_KMF_WIRED);
-	tss_init(&ci->ci_doubleflt_tss, doubleflt_stack, IDTVEC(tss_trap08));
-
-	setsegment(&sd, &ci->ci_doubleflt_tss, sizeof(struct i386tss) - 1,
-	    SDT_SYS386TSS, SEL_KPL, 0, 0);
-	ci->ci_gdt[GTRAPTSS_SEL].sd = sd;
-
-	setgate(&idt[8], NULL, 0, SDT_SYSTASKGT, SEL_KPL,
-	    GSEL(GTRAPTSS_SEL, SEL_KPL));
-
-#if defined(DDB) && defined(MULTIPROCESSOR)
-	/*
-	 * Set up separate handler for the DDB IPI, so that it doesn't
-	 * stomp on a possibly corrupted stack.
-	 *
-	 * XXX overwriting the gate set in db_machine_init.
-	 * Should rearrange the code so that it's set only once.
-	 */
-	void *ddbipi_stack;
-
-	ddbipi_stack = (void *)uvm_km_alloc(kernel_map, USPACE, 0,
-	    UVM_KMF_WIRED);
-	tss_init(&ci->ci_ddbipi_tss, ddbipi_stack,
-	    x2apic_mode ? Xx2apic_intrddbipi : Xintrddbipi);
-
-	setsegment(&sd, &ci->ci_ddbipi_tss, sizeof(struct i386tss) - 1,
-	    SDT_SYS386TSS, SEL_KPL, 0, 0);
-	ci->ci_gdt[GIPITSS_SEL].sd = sd;
-
-	setgate(&idt[ddb_vec], NULL, 0, SDT_SYSTASKGT, SEL_KPL,
-	    GSEL(GIPITSS_SEL, SEL_KPL));
-#endif
-}
-#else
-static void
-cpu_set_tss_gates(struct cpu_info *ci)
-{
-
-}
-#endif	/* i386 */
-
 #ifdef MULTIPROCESSOR
 int
 mp_cpu_start(struct cpu_info *ci, paddr_t target)
@@ -1300,7 +1221,7 @@ cpu_load_pmap(struct pmap *pmap, struct 
 	for (i = 0 ; i < PDP_SIZE; i++) {
 		l3_pd[i] = pmap->pm_pdirpa[i] | PG_V;
 	}
-	
+
 	if (interrupts_enabled)
 		x86_enable_intr();
 	tlbflush();

Reply via email to