Module Name: src Committed By: snj Date: Sat Oct 3 23:49:50 UTC 2009
Modified Files: src/sys/arch/amd64/amd64 [netbsd-5]: machdep.c src/sys/arch/i386/i386 [netbsd-5]: machdep.c Log Message: Pull up following revision(s) (requested by bouyer in ticket #1054): sys/arch/amd64/amd64/machdep.c: revision 1.124 sys/arch/i386/i386/machdep.c: revision 1.660 Prepare for PCI frontend support in Xen3 domUs: call x86_bus_space_init() and x86_bus_space_mallocok() if we have ISA or PCI devices configured; not only for non-Xen or dom0 Xen On Xen, always call PHYSDEVOP_SET_IOPL on context switch on amd64, also call PHYSDEVOP_SET_IOPL from x86_64_proc0_tss_ldt_init() To generate a diff of this commit: cvs rdiff -u -r1.102.4.10 -r1.102.4.11 src/sys/arch/amd64/amd64/machdep.c cvs rdiff -u -r1.644.4.10 -r1.644.4.11 src/sys/arch/i386/i386/machdep.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.102.4.10 src/sys/arch/amd64/amd64/machdep.c:1.102.4.11 --- src/sys/arch/amd64/amd64/machdep.c:1.102.4.10 Sat Apr 4 17:39:09 2009 +++ src/sys/arch/amd64/amd64/machdep.c Sat Oct 3 23:49:50 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.102.4.10 2009/04/04 17:39:09 snj Exp $ */ +/* $NetBSD: machdep.c,v 1.102.4.11 2009/10/03 23:49:50 snj Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007, 2008 @@ -112,7 +112,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.102.4.10 2009/04/04 17:39:09 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.102.4.11 2009/10/03 23:49:50 snj Exp $"); /* #define XENDEBUG_LOW */ @@ -131,6 +131,8 @@ #ifndef XEN #include "opt_physmem.h" #endif +#include "isa.h" +#include "pci.h" #include <sys/param.h> #include <sys/systm.h> @@ -365,7 +367,7 @@ format_bytes(pbuf, sizeof(pbuf), ptoa(uvmexp.free)); printf("avail memory = %s\n", pbuf); -#if !defined(XEN) || defined(DOM0OPS) +#if NISA > 0 || NPCI > 0 /* Safe for i/o port / memory space allocation to use malloc now. */ x86_bus_space_mallocok(); #endif @@ -391,12 +393,10 @@ struct cpu_info *ci; ci = curcpu(); HYPERVISOR_stack_switch(GSEL(GDATA_SEL, SEL_KPL), new->pcb_rsp0); - if (xendomain_is_privileged()) { - struct physdev_op physop; - physop.cmd = PHYSDEVOP_SET_IOPL; - physop.u.set_iopl.iopl = new->pcb_iopl; - HYPERVISOR_physdev_op(&physop); - } + struct physdev_op physop; + physop.cmd = PHYSDEVOP_SET_IOPL; + physop.u.set_iopl.iopl = new->pcb_iopl; + HYPERVISOR_physdev_op(&physop); if (new->pcb_fpcpu != ci) { HYPERVISOR_fpu_taskswitch(1); } @@ -429,10 +429,16 @@ #if !defined(XEN) lldt(pcb->pcb_ldt_sel); #else + { + struct physdev_op physop; 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 */ } @@ -1399,7 +1405,7 @@ __PRINTK(("pcb_cr3 0x%lx\n", xen_start_info.pt_base - KERNBASE)); #endif -#if !defined(XEN) || defined(DOM0OPS) +#if NISA > 0 || NPCI > 0 x86_bus_space_init(); #endif Index: src/sys/arch/i386/i386/machdep.c diff -u src/sys/arch/i386/i386/machdep.c:1.644.4.10 src/sys/arch/i386/i386/machdep.c:1.644.4.11 --- src/sys/arch/i386/i386/machdep.c:1.644.4.10 Sat Apr 4 17:39:09 2009 +++ src/sys/arch/i386/i386/machdep.c Sat Oct 3 23:49:50 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.644.4.10 2009/04/04 17:39:09 snj Exp $ */ +/* $NetBSD: machdep.c,v 1.644.4.11 2009/10/03 23:49:50 snj 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.644.4.10 2009/04/04 17:39:09 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.644.4.11 2009/10/03 23:49:50 snj Exp $"); #include "opt_beep.h" #include "opt_compat_ibcs2.h" @@ -513,7 +513,7 @@ printf("avail memory = %s\n", pbuf); /* Safe for i/o port / memory space allocation to use malloc now. */ -#if !defined(XEN) || defined(DOM0OPS) +#if NISA > 0 || NPCI > 0 x86_bus_space_mallocok(); #endif @@ -580,21 +580,20 @@ HYPERVISOR_stack_switch(GSEL(GDATA_SEL, SEL_KPL), pcb->pcb_esp0); - if (xendomain_is_privileged()) { - int iopl = pcb->pcb_iopl; #ifdef XEN3 - struct physdev_op physop; - physop.cmd = PHYSDEVOP_SET_IOPL; - physop.u.set_iopl.iopl = iopl; - HYPERVISOR_physdev_op(&physop); + struct physdev_op physop; + physop.cmd = PHYSDEVOP_SET_IOPL; + physop.u.set_iopl.iopl = pcb->pcb_iopl; + HYPERVISOR_physdev_op(&physop); #else + if (xendomain_is_privileged()) { dom0_op_t op; op.cmd = DOM0_IOPL; op.u.iopl.domain = DOMID_SELF; - op.u.iopl.iopl = iopl; + op.u.iopl.iopl = pcb->pcb_iopl; HYPERVISOR_dom0_op(&op); -#endif } +#endif } #endif /* XEN */