50 lines
2.2 KiB
Plaintext
50 lines
2.2 KiB
Plaintext
|
|
Tests for the x86 architecture are run as kernel images for qemu that support
|
|
multiboot format. The tests use an infrastructure called from the bios code.
|
|
The infrastructure initialize the system/cpus, switches to long-mode, and
|
|
calls the 'main' function of the individual test. Tests use a qemu virtual
|
|
test device, named testdev, for services like printing, exiting, querying
|
|
memory size, etc. See file docs/testdev.txt for more details.
|
|
|
|
Examples of a test invocation:
|
|
These invocations run the msr test case and outputs to stdio.
|
|
|
|
Using qemu-kvm:
|
|
|
|
qemu-kvm -device testdev,chardev=testlog \
|
|
-chardev file,id=testlog,path=msr.out \
|
|
-serial stdio -kernel ./x86/msr.flat
|
|
|
|
Using qemu (supported since qemu 1.3):
|
|
|
|
qemu-system-x86_64 -enable-kvm -device pc-testdev -serial stdio \
|
|
-device isa-debug-exit,iobase=0xf4,iosize=0x4 \
|
|
-kernel ./x86/msr.flat
|
|
|
|
Tests in this directory and what they do:
|
|
access: lots of page table related access (pte/pde) (read/write)
|
|
apic: enable x2apic, self ipi, ioapic intr, ioapic simultaneous
|
|
emulator: move to/from regs, cmps, push, pop, to/from cr8, smsw and lmsw
|
|
hypercall: intel and amd hypercall insn
|
|
msr: write to msr (only KERNEL_GS_BASE for now)
|
|
port80: lots of out to port 80
|
|
realmode: goes back to realmode, shld, push/pop, mov immediate, cmp
|
|
immediate, add immediate, io, eflags instructions
|
|
(clc, cli, etc.), jcc short, jcc near, call, long jmp, xchg
|
|
sieve: heavy memory access with no paging and with paging static and
|
|
with paging vmalloc'ed
|
|
smptest: run smp_id() on every cpu and compares return value to number
|
|
tsc: write to tsc(0) and write to tsc(100000000000) and read it back
|
|
vmexit: long loops for each: cpuid, vmcall, mov_from_cr8, mov_to_cr8,
|
|
inl_pmtimer, ipi, ipi+halt
|
|
kvmclock_test: test of wallclock, monotonic cycle and performance of kvmclock
|
|
pcid: basic functionality test of PCID/INVPCID feature
|
|
|
|
Legacy notes:
|
|
The exit status of the binary is inconsistent; with qemu-system, after
|
|
the unit-test is done, the exit status of qemu is 1, different from the
|
|
'old style' qemu-kvm, whose exit status in successful completion is 0.
|
|
The run script converts the qemu-system exit status to 0 (SUCCESS), and
|
|
treats the legacy exit status of 0 as an error, converting it to an exit
|
|
status of 1.
|