From: Christoffer Dall <christoffer.dall@linaro.org>
To: Andrew Jones <drjones@redhat.com>
Cc: kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org
Subject: Re: [PATCH 3/9] clean root dir of all x86-ness
Date: Sat, 28 Dec 2013 22:30:12 -0800 [thread overview]
Message-ID: <20131229063012.GB13601@cbox> (raw)
In-Reply-To: <1386175377-23086-4-git-send-email-drjones@redhat.com>
On Wed, Dec 04, 2013 at 05:42:51PM +0100, Andrew Jones wrote:
> Remove all references to x86 from the root dir (except from in
> configure). Also remove references from the root dir README
> by moving that documentation to the x86/README, and touch up
> the READMEs at the same time.
>
> Signed-off-by: Andrew Jones <drjones@redhat.com>
>
> ---
> v2:
> - tests' images => test images [Christoffer Dall]
>
> TODO:
> - more documentation is still needed, we should add
> * an overview of the framework
> * improve the quickstart guide for running the tests
> * add a quickstart guide for developing tests
> ---
> Makefile | 7 ++-
> README | 55 +++++++++-----------
> config-i386.mak | 13 -----
> config-x86-common.mak | 120 -------------------------------------------
> config-x86_64.mak | 14 -----
> config/config-i386.mak | 12 +++++
> config/config-x86-common.mak | 120 +++++++++++++++++++++++++++++++++++++++++++
> config/config-x86_64.mak | 13 +++++
> configure | 17 ++++++
> docs/testdev.txt | 11 ++++
> flat.lds | 21 --------
> run_tests.sh | 19 ++++---
> testdev.txt | 14 -----
> x86-run | 41 ---------------
> x86/README | 60 +++++++++++++++++-----
> x86/flat.lds | 21 ++++++++
> x86/run | 41 +++++++++++++++
> 17 files changed, 316 insertions(+), 283 deletions(-)
> delete mode 100644 config-i386.mak
> delete mode 100644 config-x86-common.mak
> delete mode 100644 config-x86_64.mak
> create mode 100644 config/config-i386.mak
> create mode 100644 config/config-x86-common.mak
> create mode 100644 config/config-x86_64.mak
> create mode 100644 docs/testdev.txt
> delete mode 100644 flat.lds
> delete mode 100644 testdev.txt
> delete mode 100755 x86-run
> create mode 100644 x86/flat.lds
> create mode 100755 x86/run
>
> diff --git a/Makefile b/Makefile
> index 697fc2a766966..7a5ec8e6348bf 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -17,7 +17,7 @@ cflatobjs := \
> lib/string.o
>
> #include architecure specific make rules
> -include config-$(ARCH).mak
> +include config/config-$(ARCH).mak
>
> # cc-option
> # Usage: OP_CFLAGS+=$(call cc-option, -falign-functions=0, -malign-functions=0)
> @@ -29,7 +29,6 @@ CFLAGS += $(autodepend-flags) -Wall
> CFLAGS += $(call cc-option, -fomit-frame-pointer, "")
> CFLAGS += $(call cc-option, -fno-stack-protector, "")
> CFLAGS += $(call cc-option, -fno-stack-protector-all, "")
> -CFLAGS += -I.
>
> CXXFLAGS += $(CFLAGS)
>
> @@ -44,11 +43,11 @@ $(libcflat): $(cflatobjs)
> %.o: %.S
> $(CC) $(CFLAGS) -c -nostdlib -o $@ $<
>
> --include .*.d */.*.d */*/.*.d
> +-include */.*.d */*/.*.d
>
> install:
> mkdir -p $(DESTDIR)
> install $(tests_and_config) $(DESTDIR)
>
> clean: arch_clean
> - $(RM) *.o *.a .*.d lib/.*.d $(libcflat) $(cflatobjs)
> + $(RM) lib/.*.d $(libcflat) $(cflatobjs)
so above you're referencing */.*.d and */*/.*.d but in make arch_clean
we're only removing lib/.*.d ?
> diff --git a/README b/README
> index db525e3bbb79d..0174679c05021 100644
> --- a/README
> +++ b/README
> @@ -1,36 +1,27 @@
> This directory contains sources for a kvm test suite.
>
> -Tests for x86 architecture are run as kernel images for qemu that supports multiboot format.
> -Tests uses an infrastructure called from the bios code. The infrastructure initialize the system/cpu's,
> -switch to long-mode and calls the 'main' function of the individual test.
> -Tests uses a qemu's virtual test device, named testdev, for services like printing, exiting, query memory size etc.
> -See file testdev.txt for more details.
> -
> -To create the tests' images just type 'make' in this directory.
> -Tests' images created in ./<ARCH>/*.flat
> -
> -An example of a test invocation:
> -Using qemu-kvm:
> -
> -qemu-kvm -device testdev,chardev=testlog -chardev file,id=testlog,path=msr.out -serial stdio -kernel ./x86/msr.flat
> -This invocation runs the msr test case. The test outputs to stdio.
> -
> -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
> -
> -Or use a runner script to detect the correct invocation:
> -./x86-run ./x86/msr.flat
> -To select a specific qemu binary, specify the QEMU=<path> environment:
> -QEMU=/tmp/qemu/x86_64-softmmu/qemu-system-x86_64 ./x86-run ./x86/msr.flat
> -
> -The exit status of the binary (and the script) is inconsistent: with
> -qemu-system, after the unittest is done, the exit status of qemu is 1,
> -different from the 'old style' qemu-kvm, whose exit status in successful
> -completion is 0.
> +To create the test images do
> + ./configure
> + make
> +in this directory. Test images are created in ./<ARCH>/*.flat
> +
> +Then use the runner script to detect the correct invocation and
> +invoke the test, e.g.
> + ./x86-run ./x86/msr.flat
> +or
> + ./run_tests.sh
> +to run them all.
> +
> +To select a specific qemu binary, specify the QEMU=<path>
> +environment, e.g.
> + QEMU=/tmp/qemu/x86_64-softmmu/qemu-system-x86_64 ./x86-run ./x86/msr.flat
>
> Directory structure:
> -.: Makefile and config files for the tests
> -./lib: general services for the tests
> -./lib/<ARCH>: architecture dependent services for the tests
> -./<ARCH>: the sources of the tests and the created objects/images
> -
> +.: Makefile and config files for the tests
> +./config: config files for the tests
> +./docs: documentation files
> +./lib: general services for the tests
> +./lib/<ARCH>: architecture dependent services for the tests
> +./<ARCH>: the sources of the tests and the created objects/images
> +
> +See <ARCH>/README for arch specific documentation.
> diff --git a/config-i386.mak b/config-i386.mak
> deleted file mode 100644
> index de52f3d53cff8..0000000000000
> --- a/config-i386.mak
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -TEST_DIR=x86
> -cstart.o = $(TEST_DIR)/cstart.o
> -bits = 32
> -ldarch = elf32-i386
> -CFLAGS += -D__i386__
> -CFLAGS += -I $(KERNELDIR)/include
> -
> -tests = $(TEST_DIR)/taskswitch.flat $(TEST_DIR)/taskswitch2.flat
> -
> -include config-x86-common.mak
> -
> -$(TEST_DIR)/taskswitch.elf: $(cstart.o) $(TEST_DIR)/taskswitch.o
> -$(TEST_DIR)/taskswitch2.elf: $(cstart.o) $(TEST_DIR)/taskswitch2.o
> diff --git a/config-x86-common.mak b/config-x86-common.mak
> deleted file mode 100644
> index 7e481192a0737..0000000000000
> --- a/config-x86-common.mak
> +++ /dev/null
> @@ -1,120 +0,0 @@
> -#This is a make file with common rules for both x86 & x86-64
> -
> -all: test_cases
> -
> -cflatobjs += lib/x86/io.o
> -cflatobjs += lib/x86/smp.o
> -cflatobjs += lib/x86/vm.o
> -cflatobjs += lib/x86/fwcfg.o
> -cflatobjs += lib/x86/apic.o
> -cflatobjs += lib/x86/atomic.o
> -cflatobjs += lib/x86/desc.o
> -cflatobjs += lib/x86/isr.o
> -cflatobjs += lib/x86/pci.o
> -
> -$(libcflat): LDFLAGS += -nostdlib
> -$(libcflat): CFLAGS += -ffreestanding -I lib
> -
> -CFLAGS += -m$(bits)
> -CFLAGS += -O1
> -
> -libgcc := $(shell $(CC) -m$(bits) --print-libgcc-file-name)
> -
> -FLATLIBS = lib/libcflat.a $(libgcc)
> -%.elf: %.o $(FLATLIBS) flat.lds
> - $(CC) $(CFLAGS) -nostdlib -o $@ -Wl,-T,flat.lds \
> - $(filter %.o, $^) $(FLATLIBS)
> -
> -%.flat: %.elf
> - $(OBJCOPY) -O elf32-i386 $^ $@
> -
> -tests-common = $(TEST_DIR)/vmexit.flat $(TEST_DIR)/tsc.flat \
> - $(TEST_DIR)/smptest.flat $(TEST_DIR)/port80.flat \
> - $(TEST_DIR)/realmode.flat $(TEST_DIR)/msr.flat \
> - $(TEST_DIR)/hypercall.flat $(TEST_DIR)/sieve.flat \
> - $(TEST_DIR)/kvmclock_test.flat $(TEST_DIR)/eventinj.flat \
> - $(TEST_DIR)/s3.flat $(TEST_DIR)/pmu.flat \
> - $(TEST_DIR)/tsc_adjust.flat $(TEST_DIR)/asyncpf.flat \
> - $(TEST_DIR)/init.flat
> -
> -ifdef API
> -tests-common += api/api-sample
> -tests-common += api/dirty-log
> -tests-common += api/dirty-log-perf
> -endif
> -
> -tests_and_config = $(TEST_DIR)/*.flat $(TEST_DIR)/unittests.cfg
> -
> -test_cases: $(tests-common) $(tests)
> -
> -$(TEST_DIR)/%.o: CFLAGS += -std=gnu99 -ffreestanding -I lib -I lib/x86
> -
> -$(TEST_DIR)/access.elf: $(cstart.o) $(TEST_DIR)/access.o
> -
> -$(TEST_DIR)/hypercall.elf: $(cstart.o) $(TEST_DIR)/hypercall.o
> -
> -$(TEST_DIR)/sieve.elf: $(cstart.o) $(TEST_DIR)/sieve.o
> -
> -$(TEST_DIR)/vmexit.elf: $(cstart.o) $(TEST_DIR)/vmexit.o
> -
> -$(TEST_DIR)/smptest.elf: $(cstart.o) $(TEST_DIR)/smptest.o
> -
> -$(TEST_DIR)/emulator.elf: $(cstart.o) $(TEST_DIR)/emulator.o
> -
> -$(TEST_DIR)/port80.elf: $(cstart.o) $(TEST_DIR)/port80.o
> -
> -$(TEST_DIR)/tsc.elf: $(cstart.o) $(TEST_DIR)/tsc.o
> -
> -$(TEST_DIR)/tsc_adjust.elf: $(cstart.o) $(TEST_DIR)/tsc_adjust.o
> -
> -$(TEST_DIR)/apic.elf: $(cstart.o) $(TEST_DIR)/apic.o
> -
> -$(TEST_DIR)/init.elf: $(cstart.o) $(TEST_DIR)/init.o
> -
> -$(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o
> - $(CC) -m32 -nostdlib -o $@ -Wl,-T,$(TEST_DIR)/realmode.lds $^
> -
> -$(TEST_DIR)/realmode.o: bits = 32
> -
> -$(TEST_DIR)/msr.elf: $(cstart.o) $(TEST_DIR)/msr.o
> -
> -$(TEST_DIR)/idt_test.elf: $(cstart.o) $(TEST_DIR)/idt_test.o
> -
> -$(TEST_DIR)/xsave.elf: $(cstart.o) $(TEST_DIR)/xsave.o
> -
> -$(TEST_DIR)/rmap_chain.elf: $(cstart.o) $(TEST_DIR)/rmap_chain.o
> -
> -$(TEST_DIR)/svm.elf: $(cstart.o)
> -
> -$(TEST_DIR)/kvmclock_test.elf: $(cstart.o) $(TEST_DIR)/kvmclock.o \
> - $(TEST_DIR)/kvmclock_test.o
> -
> -$(TEST_DIR)/eventinj.elf: $(cstart.o) $(TEST_DIR)/eventinj.o
> -
> -$(TEST_DIR)/s3.elf: $(cstart.o) $(TEST_DIR)/s3.o
> -
> -$(TEST_DIR)/pmu.elf: $(cstart.o) $(TEST_DIR)/pmu.o
> -
> -$(TEST_DIR)/asyncpf.elf: $(cstart.o) $(TEST_DIR)/asyncpf.o
> -
> -$(TEST_DIR)/pcid.elf: $(cstart.o) $(TEST_DIR)/pcid.o
> -
> -$(TEST_DIR)/vmx.elf: $(cstart.o) $(TEST_DIR)/vmx.o $(TEST_DIR)/vmx_tests.o
> -
> -arch_clean:
> - $(RM) $(TEST_DIR)/*.o $(TEST_DIR)/*.flat $(TEST_DIR)/*.elf \
> - $(TEST_DIR)/.*.d lib/x86/.*.d
> -
> -api/%.o: CFLAGS += -m32
> -
> -api/%: LDLIBS += -lstdc++ -lboost_thread-mt -lpthread -lrt
> -api/%: LDFLAGS += -m32
> -
> -api/libapi.a: api/kvmxx.o api/identity.o api/exception.o api/memmap.o
> - $(AR) rcs $@ $^
> -
> -api/api-sample: api/api-sample.o api/libapi.a
> -
> -api/dirty-log: api/dirty-log.o api/libapi.a
> -
> -api/dirty-log-perf: api/dirty-log-perf.o api/libapi.a
> diff --git a/config-x86_64.mak b/config-x86_64.mak
> deleted file mode 100644
> index bb8ee89713abd..0000000000000
> --- a/config-x86_64.mak
> +++ /dev/null
> @@ -1,14 +0,0 @@
> -TEST_DIR=x86
> -cstart.o = $(TEST_DIR)/cstart64.o
> -bits = 64
> -ldarch = elf64-x86-64
> -CFLAGS += -D__x86_64__
> -
> -tests = $(TEST_DIR)/access.flat $(TEST_DIR)/apic.flat \
> - $(TEST_DIR)/emulator.flat $(TEST_DIR)/idt_test.flat \
> - $(TEST_DIR)/xsave.flat $(TEST_DIR)/rmap_chain.flat \
> - $(TEST_DIR)/pcid.flat
> -tests += $(TEST_DIR)/svm.flat
> -tests += $(TEST_DIR)/vmx.flat
> -
> -include config-x86-common.mak
> diff --git a/config/config-i386.mak b/config/config-i386.mak
> new file mode 100644
> index 0000000000000..82fed0f5a48b0
> --- /dev/null
> +++ b/config/config-i386.mak
> @@ -0,0 +1,12 @@
> +cstart.o = $(TEST_DIR)/cstart.o
> +bits = 32
> +ldarch = elf32-i386
> +CFLAGS += -D__i386__
> +CFLAGS += -I $(KERNELDIR)/include
> +
> +tests = $(TEST_DIR)/taskswitch.flat $(TEST_DIR)/taskswitch2.flat
> +
> +include config/config-x86-common.mak
> +
> +$(TEST_DIR)/taskswitch.elf: $(cstart.o) $(TEST_DIR)/taskswitch.o
> +$(TEST_DIR)/taskswitch2.elf: $(cstart.o) $(TEST_DIR)/taskswitch2.o
> diff --git a/config/config-x86-common.mak b/config/config-x86-common.mak
> new file mode 100644
> index 0000000000000..917cbbf801a65
> --- /dev/null
> +++ b/config/config-x86-common.mak
> @@ -0,0 +1,120 @@
> +#This is a make file with common rules for both x86 & x86-64
> +
> +all: test_cases
> +
> +cflatobjs += lib/x86/io.o
> +cflatobjs += lib/x86/smp.o
> +cflatobjs += lib/x86/vm.o
> +cflatobjs += lib/x86/fwcfg.o
> +cflatobjs += lib/x86/apic.o
> +cflatobjs += lib/x86/atomic.o
> +cflatobjs += lib/x86/desc.o
> +cflatobjs += lib/x86/isr.o
> +cflatobjs += lib/x86/pci.o
> +
> +$(libcflat): LDFLAGS += -nostdlib
> +$(libcflat): CFLAGS += -ffreestanding -I lib
> +
> +CFLAGS += -m$(bits)
> +CFLAGS += -O1
> +
> +libgcc := $(shell $(CC) -m$(bits) --print-libgcc-file-name)
> +
> +FLATLIBS = lib/libcflat.a $(libgcc)
> +%.elf: %.o $(FLATLIBS) x86/flat.lds
> + $(CC) $(CFLAGS) -nostdlib -o $@ -Wl,-T,x86/flat.lds \
> + $(filter %.o, $^) $(FLATLIBS)
> +
> +%.flat: %.elf
> + $(OBJCOPY) -O elf32-i386 $^ $@
> +
> +tests-common = $(TEST_DIR)/vmexit.flat $(TEST_DIR)/tsc.flat \
> + $(TEST_DIR)/smptest.flat $(TEST_DIR)/port80.flat \
> + $(TEST_DIR)/realmode.flat $(TEST_DIR)/msr.flat \
> + $(TEST_DIR)/hypercall.flat $(TEST_DIR)/sieve.flat \
> + $(TEST_DIR)/kvmclock_test.flat $(TEST_DIR)/eventinj.flat \
> + $(TEST_DIR)/s3.flat $(TEST_DIR)/pmu.flat \
> + $(TEST_DIR)/tsc_adjust.flat $(TEST_DIR)/asyncpf.flat \
> + $(TEST_DIR)/init.flat
> +
> +ifdef API
> +tests-common += api/api-sample
> +tests-common += api/dirty-log
> +tests-common += api/dirty-log-perf
> +endif
> +
> +tests_and_config = $(TEST_DIR)/*.flat $(TEST_DIR)/unittests.cfg
> +
> +test_cases: $(tests-common) $(tests)
> +
> +$(TEST_DIR)/%.o: CFLAGS += -std=gnu99 -ffreestanding -I lib -I lib/x86
> +
> +$(TEST_DIR)/access.elf: $(cstart.o) $(TEST_DIR)/access.o
> +
> +$(TEST_DIR)/hypercall.elf: $(cstart.o) $(TEST_DIR)/hypercall.o
> +
> +$(TEST_DIR)/sieve.elf: $(cstart.o) $(TEST_DIR)/sieve.o
> +
> +$(TEST_DIR)/vmexit.elf: $(cstart.o) $(TEST_DIR)/vmexit.o
> +
> +$(TEST_DIR)/smptest.elf: $(cstart.o) $(TEST_DIR)/smptest.o
> +
> +$(TEST_DIR)/emulator.elf: $(cstart.o) $(TEST_DIR)/emulator.o
> +
> +$(TEST_DIR)/port80.elf: $(cstart.o) $(TEST_DIR)/port80.o
> +
> +$(TEST_DIR)/tsc.elf: $(cstart.o) $(TEST_DIR)/tsc.o
> +
> +$(TEST_DIR)/tsc_adjust.elf: $(cstart.o) $(TEST_DIR)/tsc_adjust.o
> +
> +$(TEST_DIR)/apic.elf: $(cstart.o) $(TEST_DIR)/apic.o
> +
> +$(TEST_DIR)/init.elf: $(cstart.o) $(TEST_DIR)/init.o
> +
> +$(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o
> + $(CC) -m32 -nostdlib -o $@ -Wl,-T,$(TEST_DIR)/realmode.lds $^
> +
> +$(TEST_DIR)/realmode.o: bits = 32
> +
> +$(TEST_DIR)/msr.elf: $(cstart.o) $(TEST_DIR)/msr.o
> +
> +$(TEST_DIR)/idt_test.elf: $(cstart.o) $(TEST_DIR)/idt_test.o
> +
> +$(TEST_DIR)/xsave.elf: $(cstart.o) $(TEST_DIR)/xsave.o
> +
> +$(TEST_DIR)/rmap_chain.elf: $(cstart.o) $(TEST_DIR)/rmap_chain.o
> +
> +$(TEST_DIR)/svm.elf: $(cstart.o)
> +
> +$(TEST_DIR)/kvmclock_test.elf: $(cstart.o) $(TEST_DIR)/kvmclock.o \
> + $(TEST_DIR)/kvmclock_test.o
> +
> +$(TEST_DIR)/eventinj.elf: $(cstart.o) $(TEST_DIR)/eventinj.o
> +
> +$(TEST_DIR)/s3.elf: $(cstart.o) $(TEST_DIR)/s3.o
> +
> +$(TEST_DIR)/pmu.elf: $(cstart.o) $(TEST_DIR)/pmu.o
> +
> +$(TEST_DIR)/asyncpf.elf: $(cstart.o) $(TEST_DIR)/asyncpf.o
> +
> +$(TEST_DIR)/pcid.elf: $(cstart.o) $(TEST_DIR)/pcid.o
> +
> +$(TEST_DIR)/vmx.elf: $(cstart.o) $(TEST_DIR)/vmx.o $(TEST_DIR)/vmx_tests.o
> +
> +arch_clean:
> + $(RM) $(TEST_DIR)/*.o $(TEST_DIR)/*.flat $(TEST_DIR)/*.elf \
> + $(TEST_DIR)/.*.d lib/x86/.*.d
> +
> +api/%.o: CFLAGS += -m32
> +
> +api/%: LDLIBS += -lstdc++ -lboost_thread-mt -lpthread -lrt
> +api/%: LDFLAGS += -m32
> +
> +api/libapi.a: api/kvmxx.o api/identity.o api/exception.o api/memmap.o
> + $(AR) rcs $@ $^
> +
> +api/api-sample: api/api-sample.o api/libapi.a
> +
> +api/dirty-log: api/dirty-log.o api/libapi.a
> +
> +api/dirty-log-perf: api/dirty-log-perf.o api/libapi.a
> diff --git a/config/config-x86_64.mak b/config/config-x86_64.mak
> new file mode 100644
> index 0000000000000..f089b05a178c3
> --- /dev/null
> +++ b/config/config-x86_64.mak
> @@ -0,0 +1,13 @@
> +cstart.o = $(TEST_DIR)/cstart64.o
> +bits = 64
> +ldarch = elf64-x86-64
> +CFLAGS += -D__x86_64__
> +
> +tests = $(TEST_DIR)/access.flat $(TEST_DIR)/apic.flat \
> + $(TEST_DIR)/emulator.flat $(TEST_DIR)/idt_test.flat \
> + $(TEST_DIR)/xsave.flat $(TEST_DIR)/rmap_chain.flat \
> + $(TEST_DIR)/pcid.flat
> +tests += $(TEST_DIR)/svm.flat
> +tests += $(TEST_DIR)/vmx.flat
> +
> +include config/config-x86-common.mak
> diff --git a/configure b/configure
> index d0c62e24dd1d2..6cfc64943f6e6 100755
> --- a/configure
> +++ b/configure
> @@ -15,6 +15,7 @@ usage() {
> Usage: $0 [options]
>
> Options include:
> + --test-dir=DIR the main directory for tests ($arch)
huh? why would you want to specify something different from arch here?
> --arch=ARCH architecture to compile for ($arch)
> --cross-prefix=PREFIX cross compiler prefix
> --cc=CC c compiler to use ($cc)
> @@ -33,6 +34,9 @@ while [[ "$1" = -* ]]; do
> opt="${opt%%=*}"
> fi
> case "$opt" in
> + --test-dir)
> + testdir="$arg"
> + ;;
> --prefix)
> prefix="$arg"
> ;;
> @@ -62,6 +66,18 @@ while [[ "$1" = -* ]]; do
> ;;
> esac
> done
> +if [ -z "$testdir" -a \( "$arch" = "i386" -o "$arch" = "x86_64" \) ]; then
> + testdir=x86
> +elif [ -z "$testdir" ]; then
> + testdir=$arch
> +fi
> +if [ ! -d $testdir ]; then
> + echo "$testdir does not exist!"
> + exit 1
> +fi
> +if [ -f $testdir/run ]; then
> + ln -fs $testdir/run $testdir-run
> +fi
>
> # check for dependent 32 bit libraries
> cat << EOF > lib_test.c
> @@ -89,4 +105,5 @@ LD=$cross_prefix$ld
> OBJCOPY=$cross_prefix$objcopy
> AR=$cross_prefix$ar
> API=$api
> +TEST_DIR=$testdir
> EOF
> diff --git a/docs/testdev.txt b/docs/testdev.txt
> new file mode 100644
> index 0000000000000..854b5c774b60c
> --- /dev/null
> +++ b/docs/testdev.txt
> @@ -0,0 +1,11 @@
> +This file describes the virtual device of qemu for supporting this test suite.
> +
> +Services supplied by the testdev device:
> +
> +serial output: write only, on io port 0xf1
> +exit process: write only, on io port 0xf4, value used as exit code
> +ram size: read-only, on io port 0xd1, 4 bytes' size
> +irq line setting: write only, on io ports 0x2000 - 0x2018, value to set/clear
> +simple io: read/write, on io port 0xe0, 1/2/4 bytes
> +
> +Test device used a char device for actual output
what do you mean by this last sentence?
> diff --git a/flat.lds b/flat.lds
> deleted file mode 100644
> index a278b56c9a4e3..0000000000000
> --- a/flat.lds
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -SECTIONS
> -{
> - . = 4M + SIZEOF_HEADERS;
> - stext = .;
> - .text : { *(.init) *(.text) *(.text.*) }
> - . = ALIGN(4K);
> - .data : {
> - *(.data)
> - exception_table_start = .;
> - *(.data.ex)
> - exception_table_end = .;
> - }
> - . = ALIGN(16);
> - .rodata : { *(.rodata) }
> - . = ALIGN(16);
> - .bss : { *(.bss) }
> - . = ALIGN(4K);
> - edata = .;
> -}
> -
> -ENTRY(start)
> diff --git a/run_tests.sh b/run_tests.sh
> index f373c533b75b2..400c62458ae18 100755
> --- a/run_tests.sh
> +++ b/run_tests.sh
> @@ -1,8 +1,10 @@
> #!/bin/bash
>
> -testroot=x86
> -config=$testroot/unittests.cfg
> -qemu=${qemu:-qemu-system-x86_64}
> +# As it happens, config.mak is valid shell script code, too :-)
> +source config.mak
is this a well-established method of doing things or a hack? If the
latter, sems like something that could quickly come and bite us.
> +
> +config=$TEST_DIR/unittests.cfg
> +qemu=${QEMU:-qemu-system-$ARCH}
> verbose=0
>
> function run()
> @@ -27,7 +29,7 @@ function run()
> return
> fi
>
> - cmdline="./x86-run $kernel -smp $smp $opts"
> + cmdline="./$TEST_DIR-run $kernel -smp $smp $opts"
> if [ $verbose != 0 ]; then
> echo $cmdline
> fi
> @@ -65,7 +67,7 @@ function run_all()
> groups=""
> arch=""
> elif [[ $line =~ ^file\ *=\ *(.*)$ ]]; then
> - kernel=$testroot/${BASH_REMATCH[1]}
> + kernel=$TEST_DIR/${BASH_REMATCH[1]}
> elif [[ $line =~ ^smp\ *=\ *(.*)$ ]]; then
> smp=${BASH_REMATCH[1]}
> elif [[ $line =~ ^extra_params\ *=\ *(.*)$ ]]; then
> @@ -92,15 +94,12 @@ Usage: $0 [-g group] [-h] [-v]
> -h: Output this help text
> -v: Enables verbose mode
>
> -Set the environment variable QEMU=/path/to/qemu-system-x86_64 to allow the
> -internally used x86-run to pick up the right qemu binary.
> +Set the environment variable QEMU=/path/to/qemu-system-ARCH to allow the
> +internally used ARCH-run to pick up the right qemu binary.
this message may not make a lot of sense to non kvm-unit-test
devevelopers, why not say that it allows the user to specify which QEMU
binary to use?
>
> EOF
> }
>
> -# As it happens, config.mak is valid shell script code, too :-)
> -source config.mak
> -
ah, I see, this hack/method was used before too, still relevant to
consider if it's a good approach though...
> echo > test.log
> while getopts "g:hv" opt; do
> case $opt in
> diff --git a/testdev.txt b/testdev.txt
> deleted file mode 100644
> index ac436efadb633..0000000000000
> --- a/testdev.txt
> +++ /dev/null
> @@ -1,14 +0,0 @@
> -This file describes the virtual device of qemu for supporting this test suite.
> -
> -Services supplied by the testdev device:
> -
> -serial output: write only, on io port 0xf1
> -exit process: write only, on io port 0xf4, value used as exit code
> -ram size: read-only, on io port 0xd1, 4 bytes' size
> -irq line setting: write only, on io ports 0x2000 - 0x2018, value to set/clear
> -simple io: read/write, on io port 0xe0, 1/2/4 bytes
> -
> -Test device used a char device for actual output
> -
> -
> -
> diff --git a/x86-run b/x86-run
> deleted file mode 100755
> index 646c5770ed03f..0000000000000
> --- a/x86-run
> +++ /dev/null
> @@ -1,41 +0,0 @@
> -#!/bin/bash
> -
> -qemukvm="${QEMU:-qemu-kvm}"
> -qemusystem="${QEMU:-qemu-system-x86_64}"
> -if
> - ${qemukvm} -device '?' 2>&1 | grep -F -e \"testdev\" -e \"pc-testdev\" > /dev/null;
> -then
> - qemu="${qemukvm}"
> -else
> - if
> - ${qemusystem} -device '?' 2>&1 | grep -F -e \"testdev\" -e \"pc-testdev\" > /dev/null;
> - then
> - qemu="${qemusystem}"
> - else
> - echo QEMU binary ${QEMU} has no support for test device. Exiting.
> - exit 2
> - fi
> -fi
> -
> -if
> - ${qemu} -device '?' 2>&1 | grep -F "pci-testdev" > /dev/null;
> -then
> - pci_testdev="-device pci-testdev"
> -else
> - pci_testdev=""
> -fi
> -
> -if
> - ${qemu} -device '?' 2>&1 | grep -F "pc-testdev" > /dev/null;
> -then
> - pc_testdev="-device pc-testdev -device isa-debug-exit,iobase=0xf4,iosize=0x4"
> -else
> - pc_testdev="-device testdev,chardev=testlog -chardev file,id=testlog,path=msr.out"
> -fi
> -
> -command="${qemu} -enable-kvm $pc_testdev -display none -serial stdio $pci_testdev -kernel"
> -echo ${command} "$@"
> -${command} "$@"
> -ret=$?
> -echo Return value from qemu: $ret
> -exit $ret
> diff --git a/x86/README b/x86/README
> index d644abdf31708..2f4baa46c6ed1 100644
> --- a/x86/README
> +++ b/x86/README
> @@ -1,16 +1,48 @@
> +
> +Tests for x86 architecture are run as kernel images for qemu that supports
> +multiboot format. Tests uses an infrastructure called from the bios code.
> +The infrastructure initialize the system/cpu's, switch to long-mode and calls
> +the 'main' function of the individual test. Tests uses a qemu's virtual test
Tests use
> +device, named testdev, for services like printing, exiting, query memory
> +size etc. See file docs/testdev.txt for more details.
> +
> +An example of a test invocation:
> +Using qemu-kvm:
> +
> +qemu-kvm -device testdev,chardev=testlog \
> + -chardev file,id=testlog,path=msr.out \
> + -serial stdio -kernel ./x86/msr.flat
> +This invocation runs the msr test case. The test outputs to stdio.
> +
> +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
> \ No newline at end of file
> + 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 featureThis directory
> + contains sources for a kvm test suite.
> +
> +Legacy notes:
> +
> + The exit status of the binary (and the script) is inconsistent: with
> + qemu-system, after the unittest is done, the exit status of qemu is 1,
> + different from the 'old style' qemu-kvm, whose exit status in successful
> + completion is 0.
> diff --git a/x86/flat.lds b/x86/flat.lds
> new file mode 100644
> index 0000000000000..a278b56c9a4e3
> --- /dev/null
> +++ b/x86/flat.lds
> @@ -0,0 +1,21 @@
> +SECTIONS
> +{
> + . = 4M + SIZEOF_HEADERS;
> + stext = .;
> + .text : { *(.init) *(.text) *(.text.*) }
> + . = ALIGN(4K);
> + .data : {
> + *(.data)
> + exception_table_start = .;
> + *(.data.ex)
> + exception_table_end = .;
> + }
> + . = ALIGN(16);
> + .rodata : { *(.rodata) }
> + . = ALIGN(16);
> + .bss : { *(.bss) }
> + . = ALIGN(4K);
> + edata = .;
> +}
> +
> +ENTRY(start)
> diff --git a/x86/run b/x86/run
> new file mode 100755
> index 0000000000000..646c5770ed03f
> --- /dev/null
> +++ b/x86/run
> @@ -0,0 +1,41 @@
> +#!/bin/bash
> +
> +qemukvm="${QEMU:-qemu-kvm}"
> +qemusystem="${QEMU:-qemu-system-x86_64}"
> +if
> + ${qemukvm} -device '?' 2>&1 | grep -F -e \"testdev\" -e \"pc-testdev\" > /dev/null;
> +then
> + qemu="${qemukvm}"
> +else
> + if
> + ${qemusystem} -device '?' 2>&1 | grep -F -e \"testdev\" -e \"pc-testdev\" > /dev/null;
> + then
> + qemu="${qemusystem}"
> + else
> + echo QEMU binary ${QEMU} has no support for test device. Exiting.
> + exit 2
> + fi
> +fi
> +
> +if
> + ${qemu} -device '?' 2>&1 | grep -F "pci-testdev" > /dev/null;
> +then
> + pci_testdev="-device pci-testdev"
> +else
> + pci_testdev=""
> +fi
> +
> +if
> + ${qemu} -device '?' 2>&1 | grep -F "pc-testdev" > /dev/null;
> +then
> + pc_testdev="-device pc-testdev -device isa-debug-exit,iobase=0xf4,iosize=0x4"
> +else
> + pc_testdev="-device testdev,chardev=testlog -chardev file,id=testlog,path=msr.out"
> +fi
> +
> +command="${qemu} -enable-kvm $pc_testdev -display none -serial stdio $pci_testdev -kernel"
> +echo ${command} "$@"
> +${command} "$@"
> +ret=$?
> +echo Return value from qemu: $ret
> +exit $ret
> --
> 1.8.1.4
>
> _______________________________________________
> kvmarm mailing list
> kvmarm@lists.cs.columbia.edu
> https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm
--
Christoffer
next prev parent reply other threads:[~2013-12-29 6:29 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-04 16:42 [PATCH 0/9 v2] kvm-unit-tests/arm: initial drop Andrew Jones
2013-12-04 16:42 ` [PATCH 1/9] remove unused files Andrew Jones
2013-12-04 16:42 ` [PATCH 2/9] makefile and run_tests tweaks Andrew Jones
2013-12-29 6:30 ` Christoffer Dall
2014-01-02 14:30 ` Andrew Jones
2013-12-04 16:42 ` [PATCH 3/9] clean root dir of all x86-ness Andrew Jones
2013-12-29 6:30 ` Christoffer Dall [this message]
2014-01-02 15:00 ` Andrew Jones
2014-01-02 17:16 ` Christoffer Dall
2013-12-04 16:42 ` [PATCH 4/9] move x86's simple heap management to common code Andrew Jones
2013-12-29 6:30 ` Christoffer Dall
2014-01-02 15:17 ` Andrew Jones
2014-01-02 17:17 ` Christoffer Dall
2013-12-04 16:42 ` [PATCH 5/9] Introduce libio to common code for io read/write Andrew Jones
2013-12-29 6:30 ` Christoffer Dall
2014-01-02 15:47 ` Andrew Jones
2014-01-02 17:19 ` Christoffer Dall
2014-01-02 18:38 ` Andrew Jones
2013-12-04 16:42 ` [PATCH 6/9] Introduce a simple iomap structure Andrew Jones
2013-12-29 6:30 ` Christoffer Dall
2014-01-02 16:04 ` Andrew Jones
2014-01-02 17:23 ` Christoffer Dall
2014-01-02 18:40 ` Andrew Jones
2014-01-02 21:05 ` Christoffer Dall
2014-01-02 17:32 ` Peter Maydell
2013-12-04 16:42 ` [PATCH 7/9] Add halt() and some error codes Andrew Jones
2013-12-29 6:31 ` Christoffer Dall
2013-12-04 16:42 ` [PATCH 8/9] Introduce virtio-testdev Andrew Jones
2013-12-29 6:31 ` Christoffer Dall
2014-01-02 16:16 ` Andrew Jones
2014-01-02 17:27 ` Christoffer Dall
2014-01-02 18:41 ` Andrew Jones
2013-12-04 16:42 ` [PATCH 9/9] arm: initial drop Andrew Jones
2013-12-29 6:31 ` Christoffer Dall
2013-12-29 9:18 ` Peter Maydell
2014-01-02 16:54 ` Andrew Jones
2014-01-02 17:40 ` Peter Maydell
2014-01-02 18:09 ` Christoffer Dall
2014-01-02 18:44 ` Andrew Jones
2014-01-02 17:44 ` Christoffer Dall
2014-01-02 18:50 ` Andrew Jones
2014-01-02 19:17 ` Christoffer Dall
2014-01-03 17:52 ` Andrew Jones
2014-01-03 17:55 ` Christoffer Dall
-- strict thread matches above, loose matches on Subject: below --
2013-10-14 16:23 [PATCH 0/9] kvm-unit-tests/arm: " Andrew Jones
2013-10-14 16:23 ` [PATCH 3/9] clean root dir of all x86-ness Andrew Jones
2013-10-17 1:06 ` Christoffer Dall
2013-10-17 9:35 ` Andrew Jones
2013-10-17 19:01 ` Christoffer Dall
2013-10-20 16:37 ` Andrew Jones
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131229063012.GB13601@cbox \
--to=christoffer.dall@linaro.org \
--cc=drjones@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).