Hi, This patch series rearranges and tidies various parts of kvmtool to pave the way for the addition of support for another architecture -- SPAPR PPC64. A second patch series will follow to present the PPC64 support. kvmtool is extremely x86-specific, so a fair chunk of refactoring into "common code" vs "architecture-specific code" is performed in this set. It also has a (refreshingly small) set of endian bugs that are fixed, plus assumptions about the hardware presented to the guest. I've started the series with the main meat-- moving/renaming things like bios, CPU setup, guest address space layout, interrupts, ioports etc., into a new x86/ directory. The Makefile determines an architecture and builds the appropriate dir, devices, etc. Follow-on patches change some of the mechanics, for example modifying the loop around ioctl(KVM_RUN) so that whilst it stays generic, it calls into arch-specific code to handle specific exit reasons, MMIO etc. The builtin-run initialisation path is rationalised so that PCI & IRQs are initialised before devices, and all of this happens before arch-specific code is given the chance to initialise any firmware and generate any device trees. Most of this series is fairly trivial, in moving code, making definitions arch-local or available via a header, endian sanitisation. The PCI code changes are probably most 'interesting', in that I have made the config space accesses available to those not using the PC ioport access method, plus wrapped initialisations of config space with cpu_to_leXX accesses. If there's anything in this series that'll cause the world to end, or stain, do let me know. :) Cheers, Matt Matt Evans (28): kvm tools: Split x86 arch-specific bits into x86/ kvm tools: Only build/init i8042 on x86 kvm tools: Add Makefile parameter for kernel include path kvm tools: Re-arrange Makefile to heed CFLAGS before checking for optional libs kvm tools: 64-bit tidy; use PRIx64 when printf'ing u64s and link appropriately kvm tools: Add arch-specific KVM_RUN exit handling via kvm_cpu__handle_exit() kvm tools: Move 'kvm__recommended_cpus' to arch-specific code kvm tools: Fix KVM_RUN exit code check kvm tools: Add kvm__arch_periodic_poll() kvm tools: term.h needs to include stdbool.h kvm tools: kvm.c needs to include sys/stat.h for mkdir kvm tools: Move arch-specific cmdline init into kvm__arch_set_cmdline() kvm tools: Add CONSOLE_HV term type and allow it to be selected kvm tools: Fix term_getc(), term_getc_iov() endian bugs kvm tools: Allow initrd_check() to match a cpio kvm tools: Allow load_flat_binary() to load an initrd alongside kvm tools: Only call symbol__init() if we have BFD kvm tools: Initialise PCI before devices start getting registered with PCI kvm tools: Perform CPU and firmware setup after devices are added kvm tools: Init IRQs after determining nrcpus kvm tools: Add --hugetlbfs option to specify memory path kvm tools: Move PCI_MAX_DEVICES to pci.h kvm tools: Endian-sanitise pci.h and PCI device setup kvm tools: Fix virtio-pci endian bug when reading VIRTIO_PCI_QUEUE_NUM kvm tools: Correctly set virtio-pci bar_size and remove hardwired address kvm tools: Add pci__config_{rd,wr}(), pci__find_dev() and fix PCI config register addressing kvm tools: Arch-specific define for PCI MMIO allocation area kvm tools: Create arch-specific kvm_cpu__emulate_io() tools/kvm/Makefile | 139 +++++--- tools/kvm/builtin-run.c | 82 +++-- tools/kvm/builtin-stat.c | 4 +- tools/kvm/disk/core.c | 4 +- tools/kvm/hw/pci-shmem.c | 23 +- tools/kvm/hw/vesa.c | 15 +- tools/kvm/include/kvm/ioport.h | 13 +- tools/kvm/include/kvm/kvm-cpu.h | 30 +-- tools/kvm/include/kvm/kvm.h | 62 +--- tools/kvm/include/kvm/pci.h | 30 ++- tools/kvm/include/kvm/term.h | 2 + tools/kvm/ioport.c | 54 --- tools/kvm/kvm-cpu.c | 407 +--------------------- tools/kvm/kvm.c | 374 +------------------- tools/kvm/mmio.c | 4 +- tools/kvm/pci.c | 76 +++-- tools/kvm/term.c | 5 +- tools/kvm/virtio/pci.c | 51 ++-- tools/kvm/{ => x86}/bios.c | 0 tools/kvm/{ => x86}/bios/.gitignore | 0 tools/kvm/{ => x86}/bios/bios-rom.S | 2 +- tools/kvm/{ => x86}/bios/e820.c | 0 tools/kvm/{ => x86}/bios/entry.S | 0 tools/kvm/{ => x86}/bios/gen-offsets.sh | 0 tools/kvm/{ => x86}/bios/int10.c | 0 tools/kvm/{ => x86}/bios/int15.c | 0 tools/kvm/{ => x86}/bios/local.S | 0 tools/kvm/{ => x86}/bios/macro.S | 0 tools/kvm/{ => x86}/bios/memcpy.c | 0 tools/kvm/{ => x86}/bios/rom.ld.S | 0 tools/kvm/{ => x86}/cpuid.c | 0 tools/kvm/{ => x86}/include/kvm/assembly.h | 0 tools/kvm/{ => x86}/include/kvm/barrier.h | 0 tools/kvm/{ => x86}/include/kvm/bios-export.h | 0 tools/kvm/{ => x86}/include/kvm/bios.h | 0 tools/kvm/{ => x86}/include/kvm/boot-protocol.h | 0 tools/kvm/{ => x86}/include/kvm/cpufeature.h | 0 tools/kvm/{ => x86}/include/kvm/interrupt.h | 0 tools/kvm/x86/include/kvm/kvm-arch.h | 64 ++++ tools/kvm/x86/include/kvm/kvm-cpu-arch.h | 33 ++ tools/kvm/{ => x86}/include/kvm/mptable.h | 0 tools/kvm/{ => x86}/interrupt.c | 0 tools/kvm/x86/ioport.c | 59 ++++ tools/kvm/{ => x86}/irq.c | 0 tools/kvm/x86/kvm-cpu.c | 425 +++++++++++++++++++++++ tools/kvm/x86/kvm.c | 385 ++++++++++++++++++++ tools/kvm/{ => x86}/mptable.c | 0 47 files changed, 1287 insertions(+), 1056 deletions(-) rename tools/kvm/{ => x86}/bios.c (100%) rename tools/kvm/{ => x86}/bios/.gitignore (100%) rename tools/kvm/{ => x86}/bios/bios-rom.S (80%) rename tools/kvm/{ => x86}/bios/e820.c (100%) rename tools/kvm/{ => x86}/bios/entry.S (100%) rename tools/kvm/{ => x86}/bios/gen-offsets.sh (100%) rename tools/kvm/{ => x86}/bios/int10.c (100%) rename tools/kvm/{ => x86}/bios/int15.c (100%) rename tools/kvm/{ => x86}/bios/local.S (100%) rename tools/kvm/{ => x86}/bios/macro.S (100%) rename tools/kvm/{ => x86}/bios/memcpy.c (100%) rename tools/kvm/{ => x86}/bios/rom.ld.S (100%) rename tools/kvm/{ => x86}/cpuid.c (100%) rename tools/kvm/{ => x86}/include/kvm/assembly.h (100%) rename tools/kvm/{ => x86}/include/kvm/barrier.h (100%) rename tools/kvm/{ => x86}/include/kvm/bios-export.h (100%) rename tools/kvm/{ => x86}/include/kvm/bios.h (100%) rename tools/kvm/{ => x86}/include/kvm/boot-protocol.h (100%) rename tools/kvm/{ => x86}/include/kvm/cpufeature.h (100%) rename tools/kvm/{ => x86}/include/kvm/interrupt.h (100%) create mode 100644 tools/kvm/x86/include/kvm/kvm-arch.h create mode 100644 tools/kvm/x86/include/kvm/kvm-cpu-arch.h rename tools/kvm/{ => x86}/include/kvm/mptable.h (100%) rename tools/kvm/{ => x86}/interrupt.c (100%) create mode 100644 tools/kvm/x86/ioport.c rename tools/kvm/{ => x86}/irq.c (100%) create mode 100644 tools/kvm/x86/kvm-cpu.c create mode 100644 tools/kvm/x86/kvm.c rename tools/kvm/{ => x86}/mptable.c (100%) -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html