Currently, guest_linear_to_real to_real() in vmxassist assumes guest HVM
use 2 level page table when entering protect mode with PG enabled. Vista
uses 3 level (PAE enabled) page table, so memory addressing is wrong.
This patch fixes it, by considering all 4 possible cases.
Signed-off-by: Xiaowei Yang <xiaowei.yang@intel.com>
Windows zeroes out the UUID in the SMBIOS tables, but the identifier
is often needed by systems management code. Duplicating the UUID
as the virtual system's serial number should help.
Signed-off-by: Andrew D. Ball <aball@us.ibm.com>
1) Fixed HCT test "Unreported Memory and I/O Port test" for memory
range 0xC0000~0xFFFFF and IO 0x378
2) Make consistent with non-acpi OS by enabling LPT1, remove com2
which conflicts with usb mouse
3) Fixed the USB HID-Compliant mouse when set
usbdevice='tablet'/'mouse'
4) Fixed Vista boot by removing old NIC "resourceConsumer"
Signed-off-by: Winston Wang <winston.l.wang@intel.com>
executes an idling HLT. This allow us to re-enable the 'shutdown on
HLT-with-interrupts-disabled' heuristic.
Signed-off-by: Keir Fraser <keir@xensource.com>
This patch fixes 2 vmxassist bugs to boot Vista:
1) When switching from VM86_REAL_TO_PROTECTED to VM86_PROTECTED,
protected_mode() sets return eip to switch_to_protected_mode and
segments to vmxassist's. But in later set_mode(), it still consides
these segments are guest's (Bios at this time) and use its gdt table
to calculate address(), which results in segment limitation fault. 2) In
current vmxassist, when entering VM86_PROTECTED_TO_REAL, we need to
decode every instruction manually until we catch instructions like
jmpl to reset cs to really return to real mode. Vista boot manager uses
more instructions.
Signed-off-by: Xiaowei Yang <xiaowei.yang@intel.com>
in the usual idiomatic way. This avoids some BSS symbols being
defined oustide of range _sbss/_ebss.
Issue raised by Xiaowei Yang from Intel.
Signed-off-by: Keir Fraser <keir@xensource.com>
it to interrogate Xen version information. Also add support
for HVM hypercall execution on 64-bit host.
Signed-off-by: Steven Smith <ssmith@xensource.com>
Signed-off-by: Keir Fraser <keir@xensource.com>
1)Code style clean up
2)Mininor fix for pci bus 0, dev 4 apic IRQ number
3)Add support for HCT "unreported IO and Memory" test by reporting low
640 MB mem as motherboard resource
Signed-off-by: Winston Wang <winston.l.wang@intel.com>
The gdtr information in oldctx is an address for guest, not for
vmxassist. When access descriptor on guest gdt, we need to go through
guest page table if guest enable paging. This error may happen if
guest enable PE/PG in one instruction.
Signed-off-by: Yunhong Jiang <yunhong.jiang@intel.com>=20
Signed-off-by: Xin Li <xin.b.li@intel.com>
Currently the ROMBIOS includes static MP tables for only four
configurations: 1-way, 2-way, 4-way, and 8-way.
This patch makes the creation of MP tables more dynamic by creating them
from within HVMLOADER based upon the VCPU number provided by the HVM
information table.
Note: Some of the information included used to create the MP tables is
still hard coded and based upon values used in the original ROMBIOS MP
tables. Data such as the CPU family/model/stepping information should
probably be made to match the information provided to the guest when
executing a CPUID.
Signed-off-by: Travis Betak <travis.betak@amd.com>
Adds ACPI _PRT table for PCI IRQ routing table in PIC mode
and fixes the _PRT table in APIC mode
Signed-off-by: Tang Liang <tangliang@lenovo.com>
Signed-off-by: Winston Wang <winston.l.wang@intel.com>
The patch support ACPI UP Guest Windows 2000, XP and 2003, based on
this we are going to add more support on SMP and 64bit Windows( which
are only working in ACPI mode) later. We tested: in ia32 guest:
a. Installation and boot of Windows XP sp2 and 2003 server in ACPI
mode
b when boot to both window, no yellow mark in device manger and USB,
network card and IDE DMA are working.
c. clean boot (without ACPI related errors) on UP and 4 vcpu rhel4u1
SMP guest and got ioapic Interrupt assigned according to ACPI DSDT
table's _PRT table's GSI.
To minimize the implementation efforts to satisfy the ACPI OS
installation and boot, we implemented ACPI only event logical model by
emulating ACPI hardware based on PIIX4 (Intel 82371ab) by: Populating
the PIIX4 ACPI bridge PCI configuration space; Adding ACPI timer
(required during windows installation/boot), PM1 event register block
and PM1 control register block (both are required during
installation/boot, shutdown, entering and leaving PM S state if adding
those features later), we provided full ACPI hardware registers above
using byte/word/dword access per ACPI spec requirement.
The patch also fixed many existing hvm ACPI related bugs, such as
warnings when boot to ACPI UP and SMP guest Linux OS; adding new ACPI
_PRT table reporting PCI IRQ routing table in PIC mode, adding new _PRT
table in APIC mode, that fixed no IRQ GSI cause it is forced to shutdown
when OS find new device to assign IRQ without ACPI event service; The
patch also fixed the ACPI DSDT table's PCI resource conflict with guest
e820 table when booting and installing ACPI Windows; we also added ACPI
shutdown service by incorporating the code in ACPI "hardware enable
register writer" from Ben's Virtual Iron's team's patch in changeset
9989:f8d20c3e4225.
We only provide minimum power management requirement support per spec-c1
and S5 for shutdown, may be S4 (hibernating which is meaningful for user
to save their working section) in the future.
Please note, current patch needs to have following switches in guest
configuration to enable proper ACPI support
a. need to add ACPI=1 (apic=1 if boot SMP Linux guest plus vcpu=
number want to test) in xmexample.hvm
b. need to add USB support: USB=1 and usbdevice='device' (or
='tablet') as the pm register base is static..., I will adding dynamic
ACPI FADT table for pm register base pointer later.
When installing guest OS in ACPI mode, need to manually tell Windows
setup program to install single core ACPI HAL:
After passing the 1st screen of windows setup of install Windows,
the first thing you'll see at the bottom of the screen is the
option to press F6 if you need to install a SCSI or RAID
controller. Don't press F6. Press F5 instead. This will take
you to a separate menu of Hardware Abstraction Layer's where
you can choose an appropriate HAL .The choices will be:
ACPI Multiprocessor PC
ACPI Uniprocessor PC
Advanced Configuration and Power Interface (ACPI) PC
...
Standard PC
Standard PC with C-Step i486
Please select "Advanced Configuration and Power Interface (ACPI) PC"
using current patch.
Signed-off-by: Winston Wang <winston.l.wang@intel.com>
Fabrice Bellard on the QEMU project). This patch clears the
memory in the BIOS call rather than when the Cirrus Logic register changes,
which more closely matches what happens on the real hardware.
Signed-off-by: Don Dugger <donald.d.dugger@intel.com>
Advertising more CPUs than the guest is allocated hangs boot
of Windows XP (selects wrong HAL). The correct fix here is
to dynamically generate the MPS table (at least the CPU
entries) from hvmloader binary.
Signed-off-by: Keir Fraser <keir@xensource.com>
Extends vmxassist to handle two cases related to mode switching found
while experimenting with different boot loaders.
The first case is use of the JMP instruction with memory location
operands to complete a switch to protected mode. This patch adds
emulation for this form of the JMP instruction to vmxassist.
The second case is where boot loader code does not save/restore a
non-zero SS register across a protected mode traversal.
Zeroing the SS register in vmxassist results in all sorts of problems
in the domU after returning back to real mode. This patch stores
segment register values before entering protected mode and correctly
restores the old values (instead of an incorrect zero value) when
reentering real mode.
Signed-off-by: Kevin Tronkowski <ktronkowski@virtualiron.com>
to perform a poweroff via the S5 state. This involves adding S5
information to the ASL file; adding ACPI I/O address processing to
qemu and modifying the FADT to point to these specific I/O addresses.
Note that this is a rudimentary implementation, which is expected
to allow growth over time. Currently, only allow/detect writes
to one of the PM registers, even though the S5 package specifies
data for both. Currently, this is sufficient for the kernels
tested. (Specifically, use of _PST, and _GST and other methods
are unnecessary and not implemented.)
Signed-off-by: Ben Thomas <ben@virtualiron.com>
is specified on the make command line, e.g.:
make XEN_TARGET_ARCH=x86_64
This busted the vmxassist and hvmloader builds, which must
be done -m32. Using "override" in the vmxassist/hvmloader
Makefiles fixes the problem by not allowing this to be
overridden from the command line.
Signed-off-by: Dave Lively <dlively@virtualiron.com>
* Move .PHONY directives next to targets,
this makes them a lot harder to miss
* Add missing .PHONY directives
* Remove nonexistent .PHONY directives
* Hopefully I didn'T miss anything...
Signed-Off-By: Horms <horms@verge.net.au>
systems.
In FC5, gcc has issues with the command lines used to build
hvmloader and vmxassist. Basically, the compiler doesn't
like the combination of -m64 and -m32. As these are 32 bit
apps, and intended to be, take a modified approach and simply
define XEN_TARGET_ARCH for 32 bits. This cleans up the
command line and builds the images correctly.
From: Ben Thomas <ben@virtualiron.com>
Signed-off-by: Keir Fraser <keir@xensource.com>
enables you to install SLES-10 as an unmodified guest.
Notice that at this time, vmxassist does not support the graphic bootstrap
loader (gfxboot), so be sure the set "stdvga=1" in your configuration file
to prevent gfxboot from kicking in (or hit SHIFT really fast).
Signed-Off-By: Leendert van Doorn <leendert@watson.ibm.com>
make "halt -p" and "shutdown -h now" work. Also added apm 0x05 CPU
idle, 0x08 Enable PM and 0x0f apm engage/disengage subfunctions.
Signed-off-by: Winston Wang <winston.l.wang@intel.com>
switch to an alternate page table before entering the
real-mode emulator.
Signed-off-by: Xin B Li <xin.b.li@intel.com>
Signed-off-by: Leendert van Doorn <leendert@watson.ibm.com>
Add new header hvm_info_table.h for defining location and
contents of acpi-style hvm_info_table. Remove duplicate
definition in vmxassist/acpi_madt.c.
Signed-off-by: Keir Fraser <keir@xensource.com>
hvm_info_table. Previous we pass it to xen by guest vcpu context ECX
register, now we unify to use hvm_info_table.
Signed-off-by: Xin Li <xin.b.li@intel.com>
1) enable ACPI in VMXAssist by default.
2) do nothing when emulating wbinvd instruction in VMXAssist.
3) use MACRO in cpu number setting/getting code.
4) remove useless parameter flags from xc_vmx_build.
5) remove usage of dsi.v_start in xc_vmx_build when not handling
vmxloader elf.
6) unmap shared_page_va when destroy VMX domain.
7) change virtual_platform_def to vmx_platform.
8) remove useless code in vmx_setup_platform.
9) change parameter of vmx_setup_platform from vcpu to domain.
10) in xen HV, vmx domain get domain processor number from the reserved
E820 area.
11) in domain.c, don't define some functions when on i386 platform or no
CONFIG_VMX.
Also removed some ugly tailing space.
Signed-off-by: Xin Li <xin.b.li@intel.com>