svn commit: r183962 - in projects/releng_6_xen/sys/i386: conf i386
include/xen isa pci xen
Kip Macy
kmacy at FreeBSD.org
Thu Oct 16 22:45:07 UTC 2008
Author: kmacy
Date: Thu Oct 16 22:45:07 2008
New Revision: 183962
URL: http://svn.freebsd.org/changeset/base/183962
Log:
- Fix floating point handling for xen
- Enable SMP
Modified:
projects/releng_6_xen/sys/i386/conf/XEN
projects/releng_6_xen/sys/i386/i386/machdep.c
projects/releng_6_xen/sys/i386/include/xen/xen-os.h
projects/releng_6_xen/sys/i386/isa/npx.c
projects/releng_6_xen/sys/i386/pci/pci_cfgreg.c
projects/releng_6_xen/sys/i386/pci/pci_pir.c
projects/releng_6_xen/sys/i386/xen/pmap.c
Modified: projects/releng_6_xen/sys/i386/conf/XEN
==============================================================================
--- projects/releng_6_xen/sys/i386/conf/XEN Thu Oct 16 20:56:09 2008 (r183961)
+++ projects/releng_6_xen/sys/i386/conf/XEN Thu Oct 16 22:45:07 2008 (r183962)
@@ -67,8 +67,8 @@ options INVARIANT_SUPPORT # Extra sanit
#options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
# To make an SMP kernel, the next two lines are needed
-#options SMP # Symmetric MultiProcessor Kernel
-#device apic # I/O APIC
+options SMP # Symmetric MultiProcessor Kernel
+device apic # I/O APIC
options PAE
@@ -104,6 +104,8 @@ device splash # Splash screen and scre
# Add suspend/resume support for the i8254.
#device pmtimer # native
+device pci
+
# Serial (COM) ports
device uart # Generic UART driver
Modified: projects/releng_6_xen/sys/i386/i386/machdep.c
==============================================================================
--- projects/releng_6_xen/sys/i386/i386/machdep.c Thu Oct 16 20:56:09 2008 (r183961)
+++ projects/releng_6_xen/sys/i386/i386/machdep.c Thu Oct 16 22:45:07 2008 (r183962)
@@ -152,7 +152,6 @@ uint32_t arch_i386_xbox_memsize = 0;
void Xhypervisor_callback(void);
void failsafe_callback(void);
-int gdtset;
extern trap_info_t trap_table[];
struct proc_ldt default_proc_ldt;
extern int init_first;
@@ -1195,7 +1194,7 @@ void
cpu_idle(void)
{
-#ifdef SMP
+#if defined(SMP) && !defined(XEN)
if (mp_grab_cpu_hlt())
return;
#endif
Modified: projects/releng_6_xen/sys/i386/include/xen/xen-os.h
==============================================================================
--- projects/releng_6_xen/sys/i386/include/xen/xen-os.h Thu Oct 16 20:56:09 2008 (r183961)
+++ projects/releng_6_xen/sys/i386/include/xen/xen-os.h Thu Oct 16 22:45:07 2008 (r183962)
@@ -37,7 +37,7 @@ extern int gdtset;
static inline int
smp_processor_id(void)
{
- if (likely(gdtset))
+ if (__predict_true(gdtset))
return PCPU_GET(cpuid);
return 0;
}
Modified: projects/releng_6_xen/sys/i386/isa/npx.c
==============================================================================
--- projects/releng_6_xen/sys/i386/isa/npx.c Thu Oct 16 20:56:09 2008 (r183961)
+++ projects/releng_6_xen/sys/i386/isa/npx.c Thu Oct 16 22:45:07 2008 (r183962)
@@ -69,6 +69,9 @@ __FBSDID("$FreeBSD$");
#include <machine/ucontext.h>
#include <machine/intr_machdep.h>
+#ifdef XEN
+#include <machine/xen/hypervisor.h>
+#endif
#ifdef DEV_ISA
#include <isa/isavar.h>
#endif
@@ -101,10 +104,15 @@ __FBSDID("$FreeBSD$");
#define fxsave(addr) __asm __volatile("fxsave %0" : "=m" (*(addr)))
#define ldmxcsr(__csr) __asm __volatile("ldmxcsr %0" : : "m" (__csr))
#endif
+#ifdef XEN
+#define start_emulating() (HYPERVISOR_fpu_taskswitch(1))
+#define stop_emulating() (HYPERVISOR_fpu_taskswitch(0))
+#else
#define start_emulating() __asm("smsw %%ax; orb %0,%%al; lmsw %%ax" \
: : "n" (CR0_TS) : "ax")
#define stop_emulating() __asm("clts")
+#endif
#else /* !(__GNUCLIKE_ASM && !lint) */
void fldcw(caddr_t addr);
Modified: projects/releng_6_xen/sys/i386/pci/pci_cfgreg.c
==============================================================================
--- projects/releng_6_xen/sys/i386/pci/pci_cfgreg.c Thu Oct 16 20:56:09 2008 (r183961)
+++ projects/releng_6_xen/sys/i386/pci/pci_cfgreg.c Thu Oct 16 22:45:07 2008 (r183962)
@@ -82,9 +82,10 @@ static struct mtx pcicfg_mtx;
static int pcireg_cfgread(int bus, int slot, int func, int reg, int bytes);
static void pcireg_cfgwrite(int bus, int slot, int func, int reg, int data, int bytes);
+#ifndef XEN
static int pcireg_cfgopen(void);
-
static int pciereg_cfgopen(void);
+#endif
static int pciereg_cfgread(int bus, int slot, int func, int reg,
int bytes);
static void pciereg_cfgwrite(int bus, int slot, int func, int reg,
@@ -105,6 +106,7 @@ pci_i386_map_intline(int line)
return (line);
}
+#ifndef XEN
static u_int16_t
pcibios_get_version(void)
{
@@ -125,6 +127,7 @@ pcibios_get_version(void)
}
return (args.ebx & 0xffff);
}
+#endif
/*
* Initialise access to PCI configuration space
@@ -132,6 +135,9 @@ pcibios_get_version(void)
int
pci_cfgregopen(void)
{
+#ifdef XEN
+ return (0);
+#else
static int opened = 0;
u_int16_t vid, did;
u_int16_t v;
@@ -171,6 +177,7 @@ pci_cfgregopen(void)
}
return(1);
+#endif /* !XEN */
}
/*
@@ -349,6 +356,7 @@ pcireg_cfgwrite(int bus, int slot, int f
mtx_unlock_spin(&pcicfg_mtx);
}
+#ifndef XEN
/* check whether the configuration mechanism has been correctly identified */
static int
pci_cfgcheck(int maxdev)
@@ -526,6 +534,7 @@ pciereg_cfgopen(void)
devmax = 32;
return (1);
}
+#endif /* !XEN */
#define PCIE_PADDR(bar, reg, bus, slot, func) \
((bar) | \
Modified: projects/releng_6_xen/sys/i386/pci/pci_pir.c
==============================================================================
--- projects/releng_6_xen/sys/i386/pci/pci_pir.c Thu Oct 16 20:56:09 2008 (r183961)
+++ projects/releng_6_xen/sys/i386/pci/pci_pir.c Thu Oct 16 22:45:07 2008 (r183962)
@@ -137,6 +137,10 @@ pci_pir_open(void)
int i;
uint8_t ck, *cv;
+#ifdef XEN
+ return;
+#else
+
/* Don't try if we've already found a table. */
if (pci_route_table != NULL)
return;
@@ -147,7 +151,7 @@ pci_pir_open(void)
sigaddr = bios_sigsearch(0, "_PIR", 4, 16, 0);
if (sigaddr == 0)
return;
-
+#endif
/* If we found something, check the checksum and length. */
/* XXX - Use pmap_mapdev()? */
pt = (struct PIR_table *)(uintptr_t)BIOS_PADDRTOVADDR(sigaddr);
@@ -478,7 +482,11 @@ pci_pir_biosroute(int bus, int device, i
args.eax = PCIBIOS_ROUTE_INTERRUPT;
args.ebx = (bus << 8) | (device << 3) | func;
args.ecx = (irq << 8) | (0xa + pin);
+#ifdef XEN
+ return (0);
+#else
return (bios32(&args, PCIbios.ventry, GSEL(GCODE_SEL, SEL_KPL)));
+#endif
}
Modified: projects/releng_6_xen/sys/i386/xen/pmap.c
==============================================================================
--- projects/releng_6_xen/sys/i386/xen/pmap.c Thu Oct 16 20:56:09 2008 (r183961)
+++ projects/releng_6_xen/sys/i386/xen/pmap.c Thu Oct 16 22:45:07 2008 (r183962)
@@ -1424,7 +1424,6 @@ pmap_pinit(struct pmap *pmap)
LIST_INSERT_HEAD(&allpmaps, pmap, pm_list);
mtx_unlock_spin(&allpmaps_lock);
/* Wire in kernel global address entries. */
- /* XXX copies current process, does not fill in MPPTDI */
bcopy(PTD + KPTDI, pmap->pm_pdir + KPTDI, nkpt * sizeof(pd_entry_t));
#ifdef PAE
@@ -1442,11 +1441,6 @@ pmap_pinit(struct pmap *pmap)
}
#endif
-#ifdef SMP
- pmap->pm_pdir[MPPTDI] = PTD[MPPTDI];
-#endif
-
-
#ifdef XEN
for (i = 0; i < NPGPTD; i++) {
pt_entry_t *pd;
@@ -1742,9 +1736,6 @@ pmap_release(pmap_t pmap)
bzero(pmap->pm_pdir + PTDPTDI, (nkpt + NPGPTD) *
sizeof(*pmap->pm_pdir));
-#ifdef SMP
- pmap->pm_pdir[MPPTDI] = 0;
-#endif
pmap_qremove((vm_offset_t)pmap->pm_pdir, NPGPTD);
#if defined(PAE) && defined(XEN)
More information about the svn-src-projects
mailing list