From: Gleb Natapov <gleb@redhat.com>
To: Andrew Jones <drjones@redhat.com>
Cc: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu,
christoffer.dall@linaro.org, Alexander Graf <agraf@suse.de>
Subject: Re: [PATCH 1/9] remove unused files
Date: Wed, 16 Oct 2013 15:52:43 +0300 [thread overview]
Message-ID: <20131016125243.GF15657@redhat.com> (raw)
In-Reply-To: <1381767815-12510-2-git-send-email-drjones@redhat.com>
Copying Alex in case he has an opinion about removing powerpc.
On Mon, Oct 14, 2013 at 06:23:27PM +0200, Andrew Jones wrote:
> There are several unused files, primarily because powerpc is an unused
> arch. The exceptions are config-ia64.mak, which is also an unused arch
> file, lib/fwcfg.c, lib/panic.c, x86/print.h and x86/run-kvm-unit-tests,
> which are just unused. Remove them all in order to tidy things up.
>
> Signed-off-by: Andrew Jones <drjones@redhat.com>
> ---
> Makefile | 8 +-
> config-ia64.mak | 7 -
> config-powerpc-440.mak | 15 -
> config-powerpc.mak | 39 ---
> formats | 31 --
> iotable.c | 53 ----
> iotable.h | 40 ---
> kvmtrace.c | 706 ---------------------------------------------
> kvmtrace_format | 532 ----------------------------------
> lib/fwcfg.c | 58 ----
> lib/libcflat.h | 1 -
> lib/panic.c | 13 -
> lib/powerpc/44x/map.c | 51 ----
> lib/powerpc/44x/timebase.S | 28 --
> lib/powerpc/44x/timebase.h | 25 --
> lib/powerpc/44x/tlbwe.S | 29 --
> lib/powerpc/io.c | 35 ---
> main-ppc.c | 383 ------------------------
> powerpc/44x/tlbsx.S | 33 ---
> powerpc/44x/tlbwe.S | 27 --
> powerpc/44x/tlbwe_16KB.S | 35 ---
> powerpc/44x/tlbwe_hole.S | 27 --
> powerpc/cstart.S | 38 ---
> powerpc/exit.c | 23 --
> powerpc/helloworld.c | 27 --
> powerpc/io.S | 32 --
> powerpc/spin.S | 4 -
> powerpc/sprg.S | 7 -
> x86/print.h | 19 --
> x86/run-kvm-unit-tests | 6 -
> 30 files changed, 1 insertion(+), 2331 deletions(-)
> delete mode 100644 config-ia64.mak
> delete mode 100644 config-powerpc-440.mak
> delete mode 100644 config-powerpc.mak
> delete mode 100644 formats
> delete mode 100644 iotable.c
> delete mode 100644 iotable.h
> delete mode 100644 kvmtrace.c
> delete mode 100755 kvmtrace_format
> delete mode 100644 lib/fwcfg.c
> delete mode 100644 lib/panic.c
> delete mode 100644 lib/powerpc/44x/map.c
> delete mode 100644 lib/powerpc/44x/timebase.S
> delete mode 100644 lib/powerpc/44x/timebase.h
> delete mode 100644 lib/powerpc/44x/tlbwe.S
> delete mode 100644 lib/powerpc/io.c
> delete mode 100644 main-ppc.c
> delete mode 100644 powerpc/44x/tlbsx.S
> delete mode 100644 powerpc/44x/tlbwe.S
> delete mode 100644 powerpc/44x/tlbwe_16KB.S
> delete mode 100644 powerpc/44x/tlbwe_hole.S
> delete mode 100644 powerpc/cstart.S
> delete mode 100644 powerpc/exit.c
> delete mode 100644 powerpc/helloworld.c
> delete mode 100644 powerpc/io.S
> delete mode 100644 powerpc/spin.S
> delete mode 100644 powerpc/sprg.S
> delete mode 100644 x86/print.h
> delete mode 100644 x86/run-kvm-unit-tests
>
> diff --git a/Makefile b/Makefile
> index b6e87598721a6..278791dbbef23 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -12,7 +12,6 @@ libgcc := $(shell $(CC) --print-libgcc-file-name)
>
> libcflat := lib/libcflat.a
> cflatobjs := \
> - lib/panic.o \
> lib/printf.o \
> lib/string.o
> cflatobjs += lib/argv.o
> @@ -39,11 +38,6 @@ autodepend-flags = -MMD -MF $(dir $*).$(notdir $*).d
> LDFLAGS += $(CFLAGS)
> LDFLAGS += -pthread -lrt
>
> -kvmtrace_objs= kvmtrace.o
> -
> -kvmtrace: $(kvmtrace_objs)
> - $(CC) $(LDFLAGS) $^ -o $@
> -
> $(libcflat): $(cflatobjs)
> $(AR) rcs $@ $^
>
> @@ -57,4 +51,4 @@ install:
> install $(tests_and_config) $(DESTDIR)
>
> clean: arch_clean
> - $(RM) kvmtrace *.o *.a .*.d $(libcflat) $(cflatobjs)
> + $(RM) *.o *.a .*.d $(libcflat) $(cflatobjs)
> diff --git a/config-ia64.mak b/config-ia64.mak
> deleted file mode 100644
> index d9350fcc5a9ec..0000000000000
> --- a/config-ia64.mak
> +++ /dev/null
> @@ -1,7 +0,0 @@
> -bits = 64
> -CFLAGS += -m64
> -CFLAGS += -D__ia64__
> -CFLAGS += -I../include/ia64
> -
> -all:
> -
> diff --git a/config-powerpc-440.mak b/config-powerpc-440.mak
> deleted file mode 100644
> index bb8597153b30e..0000000000000
> --- a/config-powerpc-440.mak
> +++ /dev/null
> @@ -1,15 +0,0 @@
> -
> -
> -# for some reason binutils hates tlbsx unless we say we're 405 :(
> -CFLAGS += -Wa,-m405 -I lib/powerpc/44x
> -
> -cflatobjs += \
> - lib/powerpc/44x/map.o \
> - lib/powerpc/44x/tlbwe.o \
> - lib/powerpc/44x/timebase.o
> -
> -simpletests += \
> - powerpc/44x/tlbsx.bin \
> - powerpc/44x/tlbwe_16KB.bin \
> - powerpc/44x/tlbwe_hole.bin \
> - powerpc/44x/tlbwe.bin
> diff --git a/config-powerpc.mak b/config-powerpc.mak
> deleted file mode 100644
> index d053569b8aa3c..0000000000000
> --- a/config-powerpc.mak
> +++ /dev/null
> @@ -1,39 +0,0 @@
> -CFLAGS += -I../include/powerpc
> -CFLAGS += -Wa,-mregnames -I lib
> -CFLAGS += -ffreestanding
> -
> -cstart := powerpc/cstart.o
> -
> -cflatobjs += \
> - lib/powerpc/io.o
> -
> -$(libcflat): LDFLAGS += -nostdlib
> -
> -# these tests do not use libcflat
> -simpletests := \
> - powerpc/spin.bin \
> - powerpc/io.bin \
> - powerpc/sprg.bin
> -
> -# theses tests use cstart.o, libcflat, and libgcc
> -tests := \
> - powerpc/exit.bin \
> - powerpc/helloworld.bin
> -
> -include config-powerpc-$(PROCESSOR).mak
> -
> -
> -all: kvmtrace kvmctl $(libcflat) $(simpletests) $(tests)
> -
> -$(simpletests): %.bin: %.o
> - $(CC) -nostdlib $^ -Wl,-T,flat.lds -o $@
> -
> -$(tests): %.bin: $(cstart) %.o $(libcflat)
> - $(CC) -nostdlib $^ $(libgcc) -Wl,-T,flat.lds -o $@
> -
> -kvmctl_objs = main-ppc.o iotable.o ../libkvm/libkvm.a
> -
> -arch_clean:
> - $(RM) $(simpletests) $(tests) $(cstart)
> - $(RM) $(patsubst %.bin, %.elf, $(simpletests) $(tests))
> - $(RM) $(patsubst %.bin, %.o, $(simpletests) $(tests))
> diff --git a/formats b/formats
> deleted file mode 100644
> index 7f4ebdbcedaa2..0000000000000
> --- a/formats
> +++ /dev/null
> @@ -1,31 +0,0 @@
> -0x00000000 %(ts)d (+%(relts)12d) unknown (0x%(event)016x) vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ 0x%(1)08x 0x%(2)08x 0x%(3)08x 0x%(4)08x 0x%(5)08x ]
> -
> -0x00010001 %(ts)d (+%(relts)12d) VMENTRY vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x
> -0x00010002 %(ts)d (+%(relts)12d) VMEXIT vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ exitcode = 0x%(1)08x, rip = 0x%(3)08x %(2)08x ]
> -0x00020001 %(ts)d (+%(relts)12d) PAGE_FAULT vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ errorcode = 0x%(1)08x, virt = 0x%(3)08x %(2)08x ]
> -0x00020002 %(ts)d (+%(relts)12d) INJ_VIRQ vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ vector = 0x%(1)02x ]
> -0x00020003 %(ts)d (+%(relts)12d) REDELIVER_EVT vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ vector = 0x%(1)02x ]
> -0x00020004 %(ts)d (+%(relts)12d) PEND_INTR vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ vector = 0x%(1)02x ]
> -0x00020005 %(ts)d (+%(relts)12d) IO_READ vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ port = 0x%(1)04x, size = %(2)d ]
> -0x00020006 %(ts)d (+%(relts)12d) IO_WRITE vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ port = 0x%(1)04x, size = %(2)d ]
> -0x00020007 %(ts)d (+%(relts)12d) CR_READ vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ CR# = %(1)d, value = 0x%(3)08x %(2)08x ]
> -0x00020008 %(ts)d (+%(relts)12d) CR_WRITE vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ CR# = %(1)d, value = 0x%(3)08x %(2)08x ]
> -0x00020009 %(ts)d (+%(relts)12d) DR_READ vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ DR# = %(1)d, value = 0x%(2)08x ]
> -0x0002000A %(ts)d (+%(relts)12d) DR_WRITE vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ DR# = %(1)d, value = 0x%(2)08x ]
> -0x0002000B %(ts)d (+%(relts)12d) MSR_READ vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ MSR# = 0x%(1)08x, data = 0x%(3)08x %(2)08x ]
> -0x0002000C %(ts)d (+%(relts)12d) MSR_WRITE vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ MSR# = 0x%(1)08x, data = 0x%(3)08x %(2)08x ]
> -0x0002000D %(ts)d (+%(relts)12d) CPUID vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ func = 0x%(1)08x, eax = 0x%(2)08x, ebx = 0x%(3)08x, ecx = 0x%(4)08x edx = 0x%(5)08x]
> -0x0002000E %(ts)d (+%(relts)12d) INTR vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ vector = 0x%(1)02x ]
> -0x0002000F %(ts)d (+%(relts)12d) NMI vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x
> -0x00020010 %(ts)d (+%(relts)12d) VMMCALL vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ func = 0x%(1)08x ]
> -0x00020011 %(ts)d (+%(relts)12d) HLT vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x
> -0x00020012 %(ts)d (+%(relts)12d) CLTS vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x
> -0x00020013 %(ts)d (+%(relts)12d) LMSW vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ value = 0x%(1)08x ]
> -0x00020014 %(ts)d (+%(relts)12d) APIC_ACCESS vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ offset = 0x%(1)08x ]
> -0x00020015 %(ts)d (+%(relts)12d) TDP_FAULT vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ errorcode = 0x%(1)08x, virt = 0x%(3)08x %(2)08x ]
> -# ppc: tlb traces
> -0x00020016 GTLB_WRITE vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ index = 0x%(1)08x, tid = 0x%(2)08x, word1=0x%(3)08x, word2=0x%(4)08x, word3=0x%(5)08x ]
> -0x00020017 STLB_WRITE vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ index = 0x%(1)08x, tid = 0x%(2)08x, word1=0x%(3)08x, word2=0x%(4)08x, word3=0x%(5)08x ]
> -0x00020018 STLB_INVAL vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ index = 0x%(1)08x, tid = 0x%(2)08x, word1=0x%(3)08x, word2=0x%(4)08x, word3=0x%(5)08x ]
> -# ppc: instruction emulation - this type is handled more complex in kvmtrace_format, but listed to show the eventid and transported data
> -#0x00020019 %(ts)d (+%(relts)12d) PPC_INSTR vcpu = 0x%(vcpu)08x pid = 0x%(pid)08x [ instr = 0x%(1)08x, pc = 0x%(2)08x, emul = 0x%(3)08x, nsec = %(4)08d ]
> diff --git a/iotable.c b/iotable.c
> deleted file mode 100644
> index 91a5016c42005..0000000000000
> --- a/iotable.c
> +++ /dev/null
> @@ -1,53 +0,0 @@
> -/*
> - * Kernel-based Virtual Machine test driver
> - *
> - * This test driver provides a simple way of testing kvm, without a full
> - * device model.
> - *
> - * Copyright (C) 2006 Qumranet
> - *
> - * Authors:
> - *
> - * Avi Kivity <avi@qumranet.com>
> - * Yaniv Kamay <yaniv@qumranet.com>
> - *
> - * This work is licensed under the GNU LGPL license, version 2.
> - */
> -
> -#include <stdlib.h>
> -#include <stdint.h>
> -#include <errno.h>
> -
> -#include "iotable.h"
> -
> -struct io_table_entry *io_table_lookup(struct io_table *io_table, uint64_t addr)
> -{
> - int i;
> -
> - for (i = 0; i < io_table->nr_entries; i++) {
> - if (io_table->entries[i].start <= addr &&
> - addr < io_table->entries[i].end)
> - return &io_table->entries[i];
> - }
> -
> - return NULL;
> -}
> -
> -int io_table_register(struct io_table *io_table, uint64_t start, uint64_t size,
> - io_table_handler_t *handler, void *opaque)
> -{
> - struct io_table_entry *entry;
> -
> - if (io_table->nr_entries == MAX_IO_TABLE)
> - return -ENOSPC;
> -
> - entry = &io_table->entries[io_table->nr_entries];
> - io_table->nr_entries++;
> -
> - entry->start = start;
> - entry->end = start + size;
> - entry->handler = handler;
> - entry->opaque = opaque;
> -
> - return 0;
> -}
> diff --git a/iotable.h b/iotable.h
> deleted file mode 100644
> index cb18f23789be1..0000000000000
> --- a/iotable.h
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -/*
> - * Kernel-based Virtual Machine test driver
> - *
> - * This test driver provides a simple way of testing kvm, without a full
> - * device model.
> - *
> - * Copyright (C) 2006 Qumranet
> - *
> - * Authors:
> - *
> - * Avi Kivity <avi@qumranet.com>
> - * Yaniv Kamay <yaniv@qumranet.com>
> - *
> - * This work is licensed under the GNU LGPL license, version 2.
> - */
> -
> -#include <stdint.h>
> -
> -#define MAX_IO_TABLE 50
> -
> -typedef int (io_table_handler_t)(void *, int, int, uint64_t, uint64_t *);
> -
> -struct io_table_entry
> -{
> - uint64_t start;
> - uint64_t end;
> - io_table_handler_t *handler;
> - void *opaque;
> -};
> -
> -struct io_table
> -{
> - int nr_entries;
> - struct io_table_entry entries[MAX_IO_TABLE];
> -};
> -
> -struct io_table_entry *io_table_lookup(struct io_table *io_table,
> - uint64_t addr);
> -int io_table_register(struct io_table *io_table, uint64_t start, uint64_t size,
> - io_table_handler_t *handler, void *opaque);
> diff --git a/kvmtrace.c b/kvmtrace.c
> deleted file mode 100644
> index de3c1897f4660..0000000000000
> --- a/kvmtrace.c
> +++ /dev/null
> @@ -1,706 +0,0 @@
> -/*
> - * kvm tracing application
> - *
> - * This tool is used for collecting trace buffer data
> - * for kvm trace.
> - *
> - * Based on blktrace 0.99.3
> - *
> - * Copyright (C) 2005 Jens Axboe <axboe@suse.de>
> - * Copyright (C) 2006 Jens Axboe <axboe@kernel.dk>
> - * Copyright (C) 2008 Eric Liu <eric.e.liu@intel.com>
> - *
> - * This work is licensed under the GNU LGPL license, version 2.
> - */
> -
> -#define _GNU_SOURCE
> -
> -#include <pthread.h>
> -#include <sys/types.h>
> -#include <sys/stat.h>
> -#include <unistd.h>
> -#include <signal.h>
> -#include <fcntl.h>
> -#include <string.h>
> -#include <sys/ioctl.h>
> -#include <sys/param.h>
> -#include <sys/statfs.h>
> -#include <sys/poll.h>
> -#include <sys/mman.h>
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <ctype.h>
> -#include <getopt.h>
> -#include <errno.h>
> -#include <sched.h>
> -
> -#ifndef __user
> -#define __user
> -#endif
> -#include <linux/kvm.h>
> -
> -static char kvmtrace_version[] = "0.1";
> -
> -/*
> - * You may want to increase this even more, if you are logging at a high
> - * rate and see skipped/missed events
> - */
> -#define BUF_SIZE (512 * 1024)
> -#define BUF_NR (8)
> -
> -#define OFILE_BUF (128 * 1024)
> -
> -#define DEBUGFS_TYPE 0x64626720
> -
> -#define max(a, b) ((a) > (b) ? (a) : (b))
> -
> -#define S_OPTS "r:o:w:?Vb:n:D:"
> -static struct option l_opts[] = {
> - {
> - .name = "relay",
> - .has_arg = required_argument,
> - .flag = NULL,
> - .val = 'r'
> - },
> - {
> - .name = "output",
> - .has_arg = required_argument,
> - .flag = NULL,
> - .val = 'o'
> - },
> - {
> - .name = "stopwatch",
> - .has_arg = required_argument,
> - .flag = NULL,
> - .val = 'w'
> - },
> - {
> - .name = "version",
> - .has_arg = no_argument,
> - .flag = NULL,
> - .val = 'V'
> - },
> - {
> - .name = "buffer-size",
> - .has_arg = required_argument,
> - .flag = NULL,
> - .val = 'b'
> - },
> - {
> - .name = "num-sub-buffers",
> - .has_arg = required_argument,
> - .flag = NULL,
> - .val = 'n'
> - },
> - {
> - .name = "output-dir",
> - .has_arg = required_argument,
> - .flag = NULL,
> - .val = 'D'
> - },
> - {
> - .name = NULL,
> - }
> -};
> -
> -struct thread_information {
> - int cpu;
> - pthread_t thread;
> -
> - int fd;
> - char fn[MAXPATHLEN + 64];
> -
> - FILE *ofile;
> - char *ofile_buffer;
> -
> - int (*get_subbuf)(struct thread_information *, unsigned int);
> - int (*read_data)(struct thread_information *, void *, unsigned int);
> -
> - unsigned long long data_read;
> -
> - struct kvm_trace_information *trace_info;
> -
> - int exited;
> -
> - /*
> - * mmap controlled output files
> - */
> - unsigned long long fs_size;
> - unsigned long long fs_max_size;
> - unsigned long fs_off;
> - void *fs_buf;
> - unsigned long fs_buf_len;
> -
> -};
> -
> -struct kvm_trace_information {
> - int fd;
> - volatile int trace_started;
> - unsigned long lost_records;
> - struct thread_information *threads;
> - unsigned long buf_size;
> - unsigned long buf_nr;
> -};
> -
> -static struct kvm_trace_information trace_information;
> -
> -static int ncpus;
> -static char default_debugfs_path[] = "/sys/kernel/debug";
> -
> -/* command line option globals */
> -static char *debugfs_path;
> -static char *output_name;
> -static char *output_dir;
> -static int stop_watch;
> -static unsigned long buf_size = BUF_SIZE;
> -static unsigned long buf_nr = BUF_NR;
> -static unsigned int page_size;
> -
> -#define for_each_cpu_online(cpu) \
> - for (cpu = 0; cpu < ncpus; cpu++)
> -#define for_each_tip(tip, i) \
> - for (i = 0, tip = trace_information.threads; i < ncpus; i++, tip++)
> -
> -#define is_done() (*(volatile int *)(&done))
> -static volatile int done;
> -
> -#define is_trace_stopped() (*(volatile int *)(&trace_stopped))
> -static volatile int trace_stopped;
> -
> -static void exit_trace(int status);
> -
> -static void handle_sigint(__attribute__((__unused__)) int sig)
> -{
> - ioctl(trace_information.fd, KVM_TRACE_PAUSE);
> - done = 1;
> -}
> -
> -static int get_lost_records()
> -{
> - int fd;
> - char tmp[MAXPATHLEN + 64];
> -
> - snprintf(tmp, sizeof(tmp), "%s/kvm/lost_records", debugfs_path);
> - fd = open(tmp, O_RDONLY);
> - if (fd < 0) {
> - /*
> - * this may be ok, if the kernel doesn't support dropped counts
> - */
> - if (errno == ENOENT)
> - return 0;
> -
> - fprintf(stderr, "Couldn't open dropped file %s\n", tmp);
> - return -1;
> - }
> -
> - if (read(fd, tmp, sizeof(tmp)) < 0) {
> - perror(tmp);
> - close(fd);
> - return -1;
> - }
> - close(fd);
> -
> - return atoi(tmp);
> -}
> -
> -static void wait_for_data(struct thread_information *tip, int timeout)
> -{
> - struct pollfd pfd = { .fd = tip->fd, .events = POLLIN };
> -
> - while (!is_done()) {
> - if (poll(&pfd, 1, timeout) < 0) {
> - perror("poll");
> - break;
> - }
> - if (pfd.revents & POLLIN)
> - break;
> - }
> -}
> -
> -static int read_data(struct thread_information *tip, void *buf,
> - unsigned int len)
> -{
> - int ret = 0;
> -
> - do {
> - wait_for_data(tip, 100);
> -
> - ret = read(tip->fd, buf, len);
> -
> - if (!ret)
> - continue;
> - else if (ret > 0)
> - return ret;
> - else {
> - if (errno != EAGAIN) {
> - perror(tip->fn);
> - fprintf(stderr, "Thread %d failed read of %s\n",
> - tip->cpu, tip->fn);
> - break;
> - }
> - continue;
> - }
> - } while (!is_done());
> -
> - return ret;
> -
> -}
> -
> -/*
> - * For file output, truncate and mmap the file appropriately
> - */
> -static int mmap_subbuf(struct thread_information *tip, unsigned int maxlen)
> -{
> - int ofd = fileno(tip->ofile);
> - int ret;
> - unsigned long nr;
> - unsigned long size;
> -
> - /*
> - * extend file, if we have to. use chunks of 16 subbuffers.
> - */
> - if (tip->fs_off + maxlen > tip->fs_buf_len) {
> - if (tip->fs_buf) {
> - munlock(tip->fs_buf, tip->fs_buf_len);
> - munmap(tip->fs_buf, tip->fs_buf_len);
> - tip->fs_buf = NULL;
> - }
> -
> - tip->fs_off = tip->fs_size & (page_size - 1);
> - nr = max(16, tip->trace_info->buf_nr);
> - size = tip->trace_info->buf_size;
> - tip->fs_buf_len = (nr * size) - tip->fs_off;
> - tip->fs_max_size += tip->fs_buf_len;
> -
> - if (ftruncate(ofd, tip->fs_max_size) < 0) {
> - perror("ftruncate");
> - return -1;
> - }
> -
> - tip->fs_buf = mmap(NULL, tip->fs_buf_len, PROT_WRITE,
> - MAP_SHARED, ofd, tip->fs_size - tip->fs_off);
> - if (tip->fs_buf == MAP_FAILED) {
> - perror("mmap");
> - return -1;
> - }
> - mlock(tip->fs_buf, tip->fs_buf_len);
> - }
> -
> - ret = tip->read_data(tip, tip->fs_buf + tip->fs_off, maxlen);
> - if (ret >= 0) {
> - tip->data_read += ret;
> - tip->fs_size += ret;
> - tip->fs_off += ret;
> - return 0;
> - }
> -
> - return -1;
> -}
> -
> -static void tip_ftrunc_final(struct thread_information *tip)
> -{
> - /*
> - * truncate to right size and cleanup mmap
> - */
> - if (tip->ofile) {
> - int ofd = fileno(tip->ofile);
> -
> - if (tip->fs_buf)
> - munmap(tip->fs_buf, tip->fs_buf_len);
> -
> - ftruncate(ofd, tip->fs_size);
> - }
> -}
> -
> -static void *thread_main(void *arg)
> -{
> - struct thread_information *tip = arg;
> - pid_t pid = getpid();
> - cpu_set_t cpu_mask;
> -
> - CPU_ZERO(&cpu_mask);
> - CPU_SET((tip->cpu), &cpu_mask);
> -
> - if (sched_setaffinity(pid, sizeof(cpu_mask), &cpu_mask) == -1) {
> - perror("sched_setaffinity");
> - exit_trace(1);
> - }
> -
> - snprintf(tip->fn, sizeof(tip->fn), "%s/kvm/trace%d",
> - debugfs_path, tip->cpu);
> - tip->fd = open(tip->fn, O_RDONLY);
> - if (tip->fd < 0) {
> - perror(tip->fn);
> - fprintf(stderr, "Thread %d failed open of %s\n", tip->cpu,
> - tip->fn);
> - exit_trace(1);
> - }
> - while (!is_done()) {
> - if (tip->get_subbuf(tip, tip->trace_info->buf_size) < 0)
> - break;
> - }
> -
> - /*
> - * trace is stopped, pull data until we get a short read
> - */
> - while (tip->get_subbuf(tip, tip->trace_info->buf_size) > 0)
> - ;
> -
> - tip_ftrunc_final(tip);
> - tip->exited = 1;
> - return NULL;
> -}
> -
> -static int fill_ofname(struct thread_information *tip, char *dst)
> -{
> - struct stat sb;
> - int len = 0;
> -
> - if (output_dir)
> - len = sprintf(dst, "%s/", output_dir);
> - else
> - len = sprintf(dst, "./");
> -
> - if (stat(dst, &sb) < 0) {
> - if (errno != ENOENT) {
> - perror("stat");
> - return 1;
> - }
> - if (mkdir(dst, 0755) < 0) {
> - perror(dst);
> - fprintf(stderr, "Can't make output dir\n");
> - return 1;
> - }
> - }
> -
> - sprintf(dst + len, "%s.kvmtrace.%d", output_name, tip->cpu);
> -
> - return 0;
> -}
> -
> -static void fill_ops(struct thread_information *tip)
> -{
> - tip->get_subbuf = mmap_subbuf;
> - tip->read_data = read_data;
> -}
> -
> -static void close_thread(struct thread_information *tip)
> -{
> - if (tip->fd != -1)
> - close(tip->fd);
> - if (tip->ofile)
> - fclose(tip->ofile);
> - if (tip->ofile_buffer)
> - free(tip->ofile_buffer);
> -
> - tip->fd = -1;
> - tip->ofile = NULL;
> - tip->ofile_buffer = NULL;
> -}
> -
> -static int tip_open_output(struct thread_information *tip)
> -{
> - int mode, vbuf_size;
> - char op[NAME_MAX];
> -
> - if (fill_ofname(tip, op))
> - return 1;
> -
> - tip->ofile = fopen(op, "w+");
> - mode = _IOFBF;
> - vbuf_size = OFILE_BUF;
> -
> - if (tip->ofile == NULL) {
> - perror(op);
> - return 1;
> - }
> -
> - tip->ofile_buffer = malloc(vbuf_size);
> - if (setvbuf(tip->ofile, tip->ofile_buffer, mode, vbuf_size)) {
> - perror("setvbuf");
> - close_thread(tip);
> - return 1;
> - }
> -
> - fill_ops(tip);
> - return 0;
> -}
> -
> -static int start_threads(int cpu)
> -{
> - struct thread_information *tip;
> -
> - tip = trace_information.threads + cpu;
> - tip->cpu = cpu;
> - tip->trace_info = &trace_information;
> - tip->fd = -1;
> -
> - if (tip_open_output(tip))
> - return 1;
> -
> - if (pthread_create(&tip->thread, NULL, thread_main, tip)) {
> - perror("pthread_create");
> - close_thread(tip);
> - return 1;
> - }
> -
> - return 0;
> -}
> -
> -static void stop_threads()
> -{
> - struct thread_information *tip;
> - unsigned long ret;
> - int i;
> -
> - for_each_tip(tip, i) {
> - if (tip->thread)
> - (void) pthread_join(tip->thread, (void *) &ret);
> - close_thread(tip);
> - }
> -}
> -
> -static int start_trace(void)
> -{
> - int fd;
> - struct kvm_user_trace_setup kuts;
> -
> - fd = trace_information.fd = open("/dev/kvm", O_RDWR);
> - if (fd == -1) {
> - perror("/dev/kvm");
> - return 1;
> - }
> -
> - memset(&kuts, 0, sizeof(kuts));
> - kuts.buf_size = trace_information.buf_size = buf_size;
> - kuts.buf_nr = trace_information.buf_nr = buf_nr;
> -
> - if (ioctl(trace_information.fd , KVM_TRACE_ENABLE, &kuts) < 0) {
> - perror("KVM_TRACE_ENABLE");
> - close(fd);
> - return 1;
> - }
> - trace_information.trace_started = 1;
> -
> - return 0;
> -}
> -
> -static void cleanup_trace(void)
> -{
> - if (trace_information.fd == -1)
> - return;
> -
> - trace_information.lost_records = get_lost_records();
> -
> - if (trace_information.trace_started) {
> - trace_information.trace_started = 0;
> - if (ioctl(trace_information.fd, KVM_TRACE_DISABLE) < 0)
> - perror("KVM_TRACE_DISABLE");
> - }
> -
> - close(trace_information.fd);
> - trace_information.fd = -1;
> -}
> -
> -static void stop_all_traces(void)
> -{
> - if (!is_trace_stopped()) {
> - trace_stopped = 1;
> - stop_threads();
> - cleanup_trace();
> - }
> -}
> -
> -static void exit_trace(int status)
> -{
> - stop_all_traces();
> - exit(status);
> -}
> -
> -static int start_kvm_trace(void)
> -{
> - int i, size;
> - struct thread_information *tip;
> -
> - size = ncpus * sizeof(struct thread_information);
> - tip = malloc(size);
> - if (!tip) {
> - fprintf(stderr, "Out of memory, threads (%d)\n", size);
> - return 1;
> - }
> - memset(tip, 0, size);
> - trace_information.threads = tip;
> -
> - if (start_trace())
> - return 1;
> -
> - for_each_cpu_online(i) {
> - if (start_threads(i)) {
> - fprintf(stderr, "Failed to start worker threads\n");
> - break;
> - }
> - }
> -
> - if (i != ncpus) {
> - stop_threads();
> - cleanup_trace();
> - return 1;
> - }
> -
> - return 0;
> -}
> -
> -static void wait_for_threads(void)
> -{
> - struct thread_information *tip;
> - int i, tips_running;
> -
> - do {
> - tips_running = 0;
> - usleep(100000);
> -
> - for_each_tip(tip, i)
> - tips_running += !tip->exited;
> -
> - } while (tips_running);
> -}
> -
> -static void show_stats(void)
> -{
> - struct thread_information *tip;
> - unsigned long long data_read;
> - int i;
> -
> - data_read = 0;
> - for_each_tip(tip, i) {
> - printf(" CPU%3d: %8llu KiB data\n",
> - tip->cpu, (tip->data_read + 1023) >> 10);
> - data_read += tip->data_read;
> - }
> -
> - printf(" Total: lost %lu, %8llu KiB data\n",
> - trace_information.lost_records, (data_read + 1023) >> 10);
> -
> - if (trace_information.lost_records)
> - fprintf(stderr, "You have lost records, "
> - "consider using a larger buffer size (-b)\n");
> -}
> -
> -static char usage_str[] = \
> - "[ -r debugfs path ] [ -D output dir ] [ -b buffer size ]\n" \
> - "[ -n number of buffers] [ -o <output file> ] [ -w time ] [ -V ]\n\n" \
> - "\t-r Path to mounted debugfs, defaults to /sys/kernel/debug\n" \
> - "\t-o File(s) to send output to\n" \
> - "\t-D Directory to prepend to output file names\n" \
> - "\t-w Stop after defined time, in seconds\n" \
> - "\t-b Sub buffer size in KiB\n" \
> - "\t-n Number of sub buffers\n" \
> - "\t-V Print program version info\n\n";
> -
> -static void show_usage(char *prog)
> -{
> - fprintf(stderr, "Usage: %s %s %s", prog, kvmtrace_version, usage_str);
> - exit(EXIT_FAILURE);
> -}
> -
> -void parse_args(int argc, char **argv)
> -{
> - int c;
> -
> - while ((c = getopt_long(argc, argv, S_OPTS, l_opts, NULL)) >= 0) {
> - switch (c) {
> - case 'r':
> - debugfs_path = optarg;
> - break;
> - case 'o':
> - output_name = optarg;
> - break;
> - case 'w':
> - stop_watch = atoi(optarg);
> - if (stop_watch <= 0) {
> - fprintf(stderr,
> - "Invalid stopwatch value (%d secs)\n",
> - stop_watch);
> - exit(EXIT_FAILURE);
> - }
> - break;
> - case 'V':
> - printf("%s version %s\n", argv[0], kvmtrace_version);
> - exit(EXIT_SUCCESS);
> - case 'b':
> - buf_size = strtoul(optarg, NULL, 10);
> - if (buf_size <= 0 || buf_size > 16*1024) {
> - fprintf(stderr,
> - "Invalid buffer size (%lu)\n",
> - buf_size);
> - exit(EXIT_FAILURE);
> - }
> - buf_size <<= 10;
> - break;
> - case 'n':
> - buf_nr = strtoul(optarg, NULL, 10);
> - if (buf_nr <= 0) {
> - fprintf(stderr,
> - "Invalid buffer nr (%lu)\n", buf_nr);
> - exit(EXIT_FAILURE);
> - }
> - break;
> - case 'D':
> - output_dir = optarg;
> - break;
> - default:
> - show_usage(argv[0]);
> - }
> - }
> -
> - if (optind < argc || output_name == NULL)
> - show_usage(argv[0]);
> -}
> -
> -int main(int argc, char *argv[])
> -{
> - struct statfs st;
> -
> - parse_args(argc, argv);
> -
> - if (!debugfs_path)
> - debugfs_path = default_debugfs_path;
> -
> - if (statfs(debugfs_path, &st) < 0) {
> - perror("statfs");
> - fprintf(stderr, "%s does not appear to be a valid path\n",
> - debugfs_path);
> - return 1;
> - } else if (st.f_type != (long) DEBUGFS_TYPE) {
> - fprintf(stderr, "%s does not appear to be a debug filesystem,"
> - " please mount debugfs.\n",
> - debugfs_path);
> - return 1;
> - }
> -
> - page_size = getpagesize();
> -
> - ncpus = sysconf(_SC_NPROCESSORS_ONLN);
> - if (ncpus < 0) {
> - fprintf(stderr, "sysconf(_SC_NPROCESSORS_ONLN) failed\n");
> - return 1;
> - }
> -
> - signal(SIGINT, handle_sigint);
> - signal(SIGHUP, handle_sigint);
> - signal(SIGTERM, handle_sigint);
> - signal(SIGALRM, handle_sigint);
> - signal(SIGPIPE, SIG_IGN);
> -
> - if (start_kvm_trace() != 0)
> - return 1;
> -
> - if (stop_watch)
> - alarm(stop_watch);
> -
> - wait_for_threads();
> - stop_all_traces();
> - show_stats();
> -
> - return 0;
> -}
> diff --git a/kvmtrace_format b/kvmtrace_format
> deleted file mode 100755
> index 6556475f726c4..0000000000000
> --- a/kvmtrace_format
> +++ /dev/null
> @@ -1,532 +0,0 @@
> -#!/usr/bin/env python
> -
> -# by Mark Williamson, (C) 2004 Intel Research Cambridge
> -
> -# Program for reformatting trace buffer output according to user-supplied rules
> -
> -import re, sys, string, signal, struct, os, getopt, operator
> -
> -PREFIX = '/usr'
> -DATADIR = os.path.join(PREFIX, 'share')
> -KVMDIR = os.path.join(DATADIR, 'kvm')
> -FORMATS_FILE = os.path.join(KVMDIR, 'formats')
> -
> -def usage():
> - print >> sys.stderr, \
> - "Usage: " + sys.argv[0] + """ defs-file
> - Parses trace data in binary format, as output by kvmtrace and
> - reformats it according to the rules in a file of definitions. The
> - rules in this file should have the format ({ and } show grouping
> - and are not part of the syntax):
> -
> - {event_id}{whitespace}{text format string}
> -
> - The textual format string may include format specifiers, such as:
> - %(ts)d, %(event)d, %(pid)d %(vcpu)d %(1)d, %(2)d,
> - %(3)d, %(4)d, %(5)d
> - [ the 'd' format specifier outputs in decimal, alternatively 'x'
> - will output in hexadecimal and 'o' will output in octal ]
> -
> - Which correspond to the event ID, timestamp counter, pid
> - , vcpu and the 5 data fields from the trace record. There should be
> - one such rule for each type of event.
> - Depending on your system and the volume of trace buffer data,
> - this script may not be able to keep up with the output of kvmtrace
> - if it is piped directly. In these circumstances you should have
> - kvmtrace output to a file for processing off-line.
> -
> - kvmtrace_format has the following additional switches
> - -s - if this switch is set additional trace statistics are
> - created and printed at the end of the output
> - """
> - sys.exit(1)
> -
> -def read_defs(defs_file):
> - defs = {}
> -
> - fd = open(defs_file)
> -
> - reg = re.compile('(\S+)\s+(\S.*)')
> -
> - while True:
> - line = fd.readline()
> - if not line:
> - break
> -
> - if line[0] == '#' or line[0] == '\n':
> - continue
> -
> - m = reg.match(line)
> -
> - if not m: print >> sys.stderr, "Bad format file" ; sys.exit(1)
> -
> - defs[str(eval(m.group(1)))] = m.group(2)
> -
> - return defs
> -
> -def sighand(x,y):
> - global interrupted
> - interrupted = 1
> -
> -# ppc instruction decoding for event type 0x00020019 (PPC_INSTR)
> -# some globals for statistic summaries
> -stat_ppc_instr_mnemonic = {};
> -stat_ppc_instr_spr = {};
> -stat_ppc_instr_dcr = {};
> -stat_ppc_instr_tlb = {};
> -
> -def ppc_instr_print_summary(sortedlist, colname):
> - print "\n\n%14s + %10s" % (colname, "count")
> - print "%s" % (15*"-"+"+"+11*"-")
> - sum = 0
> - for value, key in sortedlist:
> - sum += key
> - print "%14s | %10d" % (value, key)
> - print "%14s = %10d" % ("sum", sum)
> -
> -
> -def ppc_instr_summary():
> - # don't print empty statistics
> - if stat_ppc_instr_mnemonic:
> - ppc_instr_print_summary(sorted(stat_ppc_instr_mnemonic.iteritems(), key=operator.itemgetter(1), reverse=True), "mnemonic")
> - if stat_ppc_instr_spr:
> - ppc_instr_print_summary(sorted(stat_ppc_instr_spr.iteritems(), key=operator.itemgetter(1), reverse=True), "mnemonic-spr")
> - if stat_ppc_instr_dcr:
> - ppc_instr_print_summary(sorted(stat_ppc_instr_dcr.iteritems(), key=operator.itemgetter(1), reverse=True), "mnemonic-dcr")
> - if stat_ppc_instr_tlb:
> - ppc_instr_print_summary(sorted(stat_ppc_instr_tlb.iteritems(), key=operator.itemgetter(1), reverse=True), "mnemonic-tlb")
> -
> -def get_op(instr):
> - return (instr >> 26);
> -
> -def get_xop(instr):
> - return (instr >> 1) & 0x3ff;
> -
> -def get_sprn(instr):
> - return ((instr >> 16) & 0x1f) | ((instr >> 6) & 0x3e0)
> -
> -def get_dcrn(instr):
> - return ((instr >> 16) & 0x1f) | ((instr >> 6) & 0x3e0);
> -
> -def get_tlbwe_type(instr):
> - ws = (instr >> 11) & 0x1f;
> - if ws == 0:
> - return "PAGEID"
> - elif ws == 1:
> - return "XLAT"
> - elif ws == 2:
> - return "ATTRIB"
> - else:
> - return "UNKNOWN"
> -
> -def get_name(instr):
> - if get_op(instr)==3:
> - return "trap"
> - elif get_op(instr)==19:
> - if get_xop(instr) == 50:
> - return "rfi"
> - else:
> - return "unknown"
> - elif get_op(instr)==31:
> - if get_xop(instr) == 83:
> - return "mfmsr"
> -
> - elif get_xop(instr) == 87:
> - return "lbzx"
> -
> - elif get_xop(instr) == 131:
> - return "wrtee"
> -
> - elif get_xop(instr) == 146:
> - return "mtmsr"
> -
> - elif get_xop(instr) == 163:
> - return "wrteei"
> -
> - elif get_xop(instr) == 215:
> - return "stbx"
> -
> - elif get_xop(instr) == 247:
> - return "stbux"
> -
> - elif get_xop(instr) == 279:
> - return "lhzx"
> -
> - elif get_xop(instr) == 311:
> - return "lhzux"
> -
> - elif get_xop(instr) == 323:
> - return "mfdcr"
> -
> - elif get_xop(instr) == 339:
> - return "mfspr"
> -
> - elif get_xop(instr) == 407:
> - return "sthx"
> -
> - elif get_xop(instr) == 439:
> - return "sthux"
> -
> - elif get_xop(instr) == 451:
> - return "mtdcr"
> -
> - elif get_xop(instr) == 467:
> - return "mtspr"
> -
> - elif get_xop(instr) == 470:
> - return "dcbi"
> -
> - elif get_xop(instr) == 534:
> - return "lwbrx"
> -
> - elif get_xop(instr) == 566:
> - return "tlbsync"
> -
> - elif get_xop(instr) == 662:
> - return "stwbrx"
> -
> - elif get_xop(instr) == 978:
> - return "tlbwe"
> -
> - elif get_xop(instr) == 914:
> - return "tlbsx"
> -
> - elif get_xop(instr) == 790:
> - return "lhbrx"
> -
> - elif get_xop(instr) == 918:
> - return "sthbrx"
> -
> - elif get_xop(instr) == 966:
> - return "iccci"
> -
> - else:
> - return "unknown"
> -
> - elif get_op(instr) == 32:
> - return "lwz"
> -
> - elif get_op(instr) == 33:
> - return "lwzu"
> -
> - elif get_op(instr) == 34:
> - return "lbz"
> -
> - elif get_op(instr) == 35:
> - return "lbzu"
> -
> - elif get_op(instr) == 36:
> - return "stw"
> -
> - elif get_op(instr) == 37:
> - return "stwu"
> -
> - elif get_op(instr) == 38:
> - return "stb"
> -
> - elif get_op(instr) == 39:
> - return "stbu"
> -
> - elif get_op(instr) == 40:
> - return "lhz"
> -
> - elif get_op(instr) == 41:
> - return "lhzu"
> -
> - elif get_op(instr) == 44:
> - return "sth"
> -
> - elif get_op(instr) == 45:
> - return "sthu"
> -
> - else:
> - return "unknown"
> -
> -def get_sprn_name(sprn):
> - if sprn == 0x01a:
> - return "SRR0"
> - elif sprn == 0x01b:
> - return "SRR1"
> - elif sprn == 0x3b2:
> - return "MMUCR"
> - elif sprn == 0x030:
> - return "PID"
> - elif sprn == 0x03f:
> - return "IVPR"
> - elif sprn == 0x3b3:
> - return "CCR0"
> - elif sprn == 0x378:
> - return "CCR1"
> - elif sprn == 0x11f:
> - return "PVR"
> - elif sprn == 0x03d:
> - return "DEAR"
> - elif sprn == 0x03e:
> - return "ESR"
> - elif sprn == 0x134:
> - return "DBCR0"
> - elif sprn == 0x135:
> - return "DBCR1"
> - elif sprn == 0x11c:
> - return "TBWL"
> - elif sprn == 0x11d:
> - return "TBWU"
> - elif sprn == 0x016:
> - return "DEC"
> - elif sprn == 0x150:
> - return "TSR"
> - elif sprn == 0x154:
> - return "TCR"
> - elif sprn == 0x110:
> - return "SPRG0"
> - elif sprn == 0x111:
> - return "SPRG1"
> - elif sprn == 0x112:
> - return "SPRG2"
> - elif sprn == 0x113:
> - return "SPRG3"
> - elif sprn == 0x114:
> - return "SPRG4"
> - elif sprn == 0x115:
> - return "SPRG5"
> - elif sprn == 0x116:
> - return "SPRG6"
> - elif sprn == 0x117:
> - return "SPRG7"
> - elif sprn == 0x190:
> - return "IVOR0"
> - elif sprn == 0x191:
> - return "IVOR1"
> - elif sprn == 0x192:
> - return "IVOR2"
> - elif sprn == 0x193:
> - return "IVOR3"
> - elif sprn == 0x194:
> - return "IVOR4"
> - elif sprn == 0x195:
> - return "IVOR5"
> - elif sprn == 0x196:
> - return "IVOR6"
> - elif sprn == 0x197:
> - return "IVOR7"
> - elif sprn == 0x198:
> - return "IVOR8"
> - elif sprn == 0x199:
> - return "IVOR9"
> - elif sprn == 0x19a:
> - return "IVOR10"
> - elif sprn == 0x19b:
> - return "IVOR11"
> - elif sprn == 0x19c:
> - return "IVOR12"
> - elif sprn == 0x19d:
> - return "IVOR13"
> - elif sprn == 0x19e:
> - return "IVOR14"
> - elif sprn == 0x19f:
> - return "IVOR15"
> - else:
> - return "UNKNOWN"
> -
> -def get_special(instr):
> - name = get_name(instr);
> - if stat_ppc_instr_mnemonic.has_key(name):
> - stat_ppc_instr_mnemonic[name] += 1
> - else:
> - stat_ppc_instr_mnemonic[name] = 1
> -
> - if get_op(instr) == 31:
> - if (get_xop(instr) == 339) or (get_xop(instr) == 467):
> - sprn = get_sprn(instr);
> - sprn_name = get_sprn_name(sprn);
> - stat_idx = name+"-"+sprn_name
> - if stat_ppc_instr_spr.has_key(stat_idx):
> - stat_ppc_instr_spr[stat_idx] += 1
> - else:
> - stat_ppc_instr_spr[stat_idx] = 1
> - return ("- sprn 0x%03x %8s" % (sprn, sprn_name))
> - elif (get_xop(instr) == 323 ) or (get_xop(instr) == 451):
> - dcrn = get_dcrn(instr);
> - stat_idx = name+"-"+("%04X"%dcrn)
> - if stat_ppc_instr_dcr.has_key(stat_idx):
> - stat_ppc_instr_dcr[stat_idx] += 1
> - else:
> - stat_ppc_instr_dcr[stat_idx] = 1
> - return ("- dcrn 0x%03x" % dcrn)
> - elif (get_xop(instr) == 978 ) or (get_xop(instr) == 451):
> - tlbwe_type = get_tlbwe_type(instr)
> - stat_idx = name+"-"+tlbwe_type
> - if stat_ppc_instr_tlb.has_key(stat_idx):
> - stat_ppc_instr_tlb[stat_idx] += 1
> - else:
> - stat_ppc_instr_tlb[stat_idx] = 1
> - return ("- ws -> %8s" % tlbwe_type)
> - return ""
> -
> -##### Main code
> -
> -summary = False
> -
> -try:
> - opts, arg = getopt.getopt(sys.argv[1:], "sc:" )
> - for opt in opts:
> - if opt[0] == '-s' : summary = True
> -
> -except getopt.GetoptError:
> - usage()
> -
> -signal.signal(signal.SIGTERM, sighand)
> -signal.signal(signal.SIGHUP, sighand)
> -signal.signal(signal.SIGINT, sighand)
> -
> -interrupted = 0
> -
> -if len(arg) > 0:
> - defs = read_defs(arg[0])
> -else:
> - defs = read_defs(FORMATS_FILE)
> -
> -# structure of trace record (as output by kvmtrace):
> -# HDR(I) {TSC(Q)} D1(I) D2(I) D3(I) D4(I) D5(I)
> -#
> -# HDR consists of EVENT:28:, n_data:3:, ts_in:1:
> -# pid:32, vcpu_id:32
> -# EVENT means Event ID
> -# n_data means number of data (like D1, D2, ...)
> -# ts_in means Timestamp data exists(1) or not(0).
> -# if ts_in == 0, TSC(Q) does not exists.
> -#
> -HDRREC = "<III"
> -TSCREC = "<Q"
> -D1REC = "<I"
> -D2REC = "<II"
> -D3REC = "<III"
> -D4REC = "<IIII"
> -D5REC = "<IIIII"
> -KMAGIC = "<I"
> -
> -last_ts = 0
> -
> -i=0
> -
> -while not interrupted:
> - try:
> - i=i+1
> -
> - if i == 1:
> - line = sys.stdin.read(struct.calcsize(KMAGIC))
> - if not line:
> - break
> - kmgc = struct.unpack(KMAGIC, line)[0]
> -
> - #firstly try to parse data file as little endian
> - # if "kvmtrace-metadata".kmagic != kmagic
> - # then data file must be big endian"
> - if kmgc != 0x12345678:
> - if kmgc != 0x78563412:
> - print >> sys.stderr, "Bad data file: magic number error."
> - break;
> - else:
> - HDRREC = ">III"
> - TSCREC = ">Q"
> - D1REC = ">I"
> - D2REC = ">II"
> - D3REC = ">III"
> - D4REC = ">IIII"
> - D5REC = ">IIIII"
> - continue
> -
> - line = sys.stdin.read(struct.calcsize(HDRREC))
> - if not line:
> - break
> - (event, pid, vcpu_id) = struct.unpack(HDRREC, line)
> -
> - n_data = event >> 28 & 0x7
> - ts_in = event >> 31
> -
> - d1 = 0
> - d2 = 0
> - d3 = 0
> - d4 = 0
> - d5 = 0
> -
> - ts = 0
> -
> - if ts_in == 1:
> - line = sys.stdin.read(struct.calcsize(TSCREC))
> - if not line:
> - break
> - ts = struct.unpack(TSCREC, line)[0]
> - if n_data == 1:
> - line = sys.stdin.read(struct.calcsize(D1REC))
> - if not line:
> - break
> - d1 = struct.unpack(D1REC, line)[0]
> - if n_data == 2:
> - line = sys.stdin.read(struct.calcsize(D2REC))
> - if not line:
> - break
> - (d1, d2) = struct.unpack(D2REC, line)
> - if n_data == 3:
> - line = sys.stdin.read(struct.calcsize(D3REC))
> - if not line:
> - break
> - (d1, d2, d3) = struct.unpack(D3REC, line)
> - if n_data == 4:
> - line = sys.stdin.read(struct.calcsize(D4REC))
> - if not line:
> - break
> - (d1, d2, d3, d4) = struct.unpack(D4REC, line)
> - if n_data == 5:
> - line = sys.stdin.read(struct.calcsize(D5REC))
> - if not line:
> - break
> - (d1, d2, d3, d4, d5) = struct.unpack(D5REC, line)
> -
> - event &= 0x0fffffff
> -
> - # provide relative TSC
> -
> - if last_ts > 0 and ts_in == 1:
> - relts = ts - last_ts
> - else:
> - relts = 0
> -
> - if ts_in == 1:
> - last_ts = ts
> -
> - args = {'ts' : ts,
> - 'event' : event,
> - 'relts': relts,
> - 'pid' : pid,
> - 'vcpu' : vcpu_id,
> - '1' : d1,
> - '2' : d2,
> - '3' : d3,
> - '4' : d4,
> - '5' : d5 }
> -
> - # some event types need more than just formats mapping they are if/elif
> - # chained here and the last default else is the mapping via formats
> - if event == 0x00020019:
> - pdata = (ts, relts, vcpu_id, pid, d1, d2, d3, get_name(d1), get_special(d1))
> - print "%d (+%12d) PPC_INSTR vcpu = 0x%08x pid = 0x%08x [ instr = 0x%08x, pc = 0x%08x, emul = %01d, mnemonic = %8s %s" % pdata
> - else:
> - try:
> - if defs.has_key(str(event)):
> - print defs[str(event)] % args
> - else:
> - if defs.has_key(str(0)): print defs[str(0)] % args
> - except TypeError:
> - if defs.has_key(str(event)):
> - print defs[str(event)]
> - print args
> - else:
> - if defs.has_key(str(0)):
> - print defs[str(0)]
> - print args
> -
> - except IOError, struct.error: sys.exit()
> -
> -if summary:
> - ppc_instr_summary()
> diff --git a/lib/fwcfg.c b/lib/fwcfg.c
> deleted file mode 100644
> index dc34d299df766..0000000000000
> --- a/lib/fwcfg.c
> +++ /dev/null
> @@ -1,58 +0,0 @@
> -
> -void qemu_cfg_select(int f)
> -{
> - outw(QEMU_CFG_CTL_PORT, f);
> -}
> -
> -int qemu_cfg_port_probe()
> -{
> - char *sig = "QEMU";
> - int i;
> -
> - qemu_cfg_select(QEMU_CFG_SIGNATURE);
> -
> - for (i = 0; i < 4; i++)
> - if (inb(QEMU_CFG_DATA_PORT) != sig[i])
> - return 0;
> -
> - return 1;
> -}
> -
> -void qemu_cfg_read(uint8_t *buf, int len)
> -{
> - while (len--)
> - *(buf++) = inb(QEMU_CFG_DATA_PORT);
> -}
> -
> -uint8_t qemu_cfg_get8(void)
> -{
> - uint8_t ret;
> -
> - qemu_cfg_read(&ret, 1);
> - return ret;
> -}
> -
> -uint16_t qemu_cfg_get16(void)
> -{
> - uint16_t ret;
> -
> - qemu_cfg_read((uint8_t*)&ret, 2);
> - return le16_to_cpu(ret);
> -}
> -
> -uint64_t qemu_cfg_get32(void)
> -{
> - uint32_t ret;
> -
> - qemu_cfg_read((uint8_t*)&ret, 4);
> - return le32_to_cpu(ret);
> -}
> -
> -uint64_t qemu_cfg_get64(void)
> -{
> - uint64_t ret;
> -
> - qemu_cfg_read((uint8_t*)&ret, 8);
> - return le64_to_cpu(ret);
> -}
> -
> diff --git a/lib/libcflat.h b/lib/libcflat.h
> index fadc33d30f85b..140c172e77d54 100644
> --- a/lib/libcflat.h
> +++ b/lib/libcflat.h
> @@ -38,7 +38,6 @@ typedef _Bool bool;
> #define false 0
>
> extern void exit(int code);
> -extern void panic(char *fmt, ...);
>
> extern unsigned long strlen(const char *buf);
> extern char *strcat(char *dest, const char *src);
> diff --git a/lib/panic.c b/lib/panic.c
> deleted file mode 100644
> index 6e0b29ebed503..0000000000000
> --- a/lib/panic.c
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -#include "libcflat.h"
> -
> -void panic(char *fmt, ...)
> -{
> - va_list va;
> - char buf[2000];
> -
> - va_start(va, fmt);
> - vsnprintf(buf, sizeof(buf), fmt, va);
> - va_end(va);
> - puts(buf);
> - exit(-1);
> -}
> diff --git a/lib/powerpc/44x/map.c b/lib/powerpc/44x/map.c
> deleted file mode 100644
> index 113434d2f1b4d..0000000000000
> --- a/lib/powerpc/44x/map.c
> +++ /dev/null
> @@ -1,51 +0,0 @@
> -/*
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License, version 2, as
> - * published by the Free Software Foundation.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> - *
> - * Copyright IBM Corp. 2008
> - *
> - * Authors: Hollis Blanchard <hollisb@us.ibm.com>
> - */
> -
> -#include "libcflat.h"
> -
> -#define TLB_SIZE 64
> -
> -extern void tlbwe(unsigned int index,
> - unsigned char tid,
> - unsigned int word0,
> - unsigned int word1,
> - unsigned int word2);
> -
> -unsigned int next_free_index;
> -
> -#define PAGE_SHIFT 12
> -#define PAGE_MASK (~((1<<PAGE_SHIFT)-1))
> -
> -#define V (1<<9)
> -
> -void map(unsigned long vaddr, unsigned long paddr)
> -{
> - unsigned int w0, w1, w2;
> -
> - /* We don't install exception handlers, so we can't handle TLB misses,
> - * so we can't loop around and overwrite entry 0. */
> - if (next_free_index++ >= TLB_SIZE)
> - panic("TLB overflow");
> -
> - w0 = (vaddr & PAGE_MASK) | V;
> - w1 = paddr & PAGE_MASK;
> - w2 = 0x3;
> -
> - tlbwe(next_free_index, 0, w0, w1, w2);
> -}
> diff --git a/lib/powerpc/44x/timebase.S b/lib/powerpc/44x/timebase.S
> deleted file mode 100644
> index 385904da3c161..0000000000000
> --- a/lib/powerpc/44x/timebase.S
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -/*
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License, version 2, as
> - * published by the Free Software Foundation.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> - *
> - * Copyright IBM Corp. 2008
> - *
> - * Authors: Hollis Blanchard <hollisb@us.ibm.com>
> - */
> -
> -/* unsigned long long mftb(void); */
> -.global mftb
> -mftb:
> - mftbu r5
> - mftbl r4
> - mftbu r3
> - cmpw r3, r5
> - bne mftb
> - blr
> diff --git a/lib/powerpc/44x/timebase.h b/lib/powerpc/44x/timebase.h
> deleted file mode 100644
> index ce85347bd17c5..0000000000000
> --- a/lib/powerpc/44x/timebase.h
> +++ /dev/null
> @@ -1,25 +0,0 @@
> -/*
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License, version 2, as
> - * published by the Free Software Foundation.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> - *
> - * Copyright IBM Corp. 2008
> - *
> - * Authors: Hollis Blanchard <hollisb@us.ibm.com>
> - */
> -
> -#ifndef __TIMEBASE_H__
> -#define __TIMEBASE_H__
> -
> -unsigned long long mftb(void);
> -
> -#endif /* __TIMEBASE_H__ */
> diff --git a/lib/powerpc/44x/tlbwe.S b/lib/powerpc/44x/tlbwe.S
> deleted file mode 100644
> index 3790374eb5c61..0000000000000
> --- a/lib/powerpc/44x/tlbwe.S
> +++ /dev/null
> @@ -1,29 +0,0 @@
> -/*
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License, version 2, as
> - * published by the Free Software Foundation.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> - *
> - * Copyright IBM Corp. 2008
> - *
> - * Authors: Hollis Blanchard <hollisb@us.ibm.com>
> - */
> -
> -#define SPRN_MMUCR 0x3b2
> -
> -/* tlbwe(uint index, uint8_t tid, uint word0, uint word1, uint word2) */
> -.global tlbwe
> -tlbwe:
> - mtspr SPRN_MMUCR, r4
> - tlbwe r5, r3, 0
> - tlbwe r6, r3, 1
> - tlbwe r7, r3, 2
> - blr
> diff --git a/lib/powerpc/io.c b/lib/powerpc/io.c
> deleted file mode 100644
> index 8bd239521f25f..0000000000000
> --- a/lib/powerpc/io.c
> +++ /dev/null
> @@ -1,35 +0,0 @@
> -/*
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License, version 2, as
> - * published by the Free Software Foundation.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> - *
> - * Copyright IBM Corp. 2008
> - *
> - * Authors: Hollis Blanchard <hollisb@us.ibm.com>
> - */
> -
> -#include "libcflat.h"
> -
> -#define BASE 0xf0000000
> -#define _putc ((volatile char *)(BASE))
> -#define _exit ((volatile char *)(BASE+1))
> -
> -void puts(const char *s)
> -{
> - while (*s != '\0')
> - *_putc = *s++;
> -}
> -
> -void exit(int code)
> -{
> - *_exit = code;
> -}
> diff --git a/main-ppc.c b/main-ppc.c
> deleted file mode 100644
> index 5af59f846ef07..0000000000000
> --- a/main-ppc.c
> +++ /dev/null
> @@ -1,383 +0,0 @@
> -/*
> - * Kernel-based Virtual Machine test driver
> - *
> - * This test driver provides a simple way of testing kvm, without a full
> - * device model.
> - *
> - * Copyright (C) 2006 Qumranet
> - * Copyright IBM Corp. 2008
> - *
> - * Authors:
> - *
> - * Avi Kivity <avi@qumranet.com>
> - * Yaniv Kamay <yaniv@qumranet.com>
> - * Hollis Blanchard <hollisb@us.ibm.com>
> - *
> - * This work is licensed under the GNU LGPL license, version 2.
> - */
> -
> -#define _GNU_SOURCE
> -
> -#include <libkvm.h>
> -
> -#include <stdio.h>
> -#include <unistd.h>
> -#include <fcntl.h>
> -#include <stdlib.h>
> -#include <string.h>
> -#include <semaphore.h>
> -#include <sys/types.h>
> -#include <errno.h>
> -#include <pthread.h>
> -#include <signal.h>
> -#include <pthread.h>
> -#include <sys/syscall.h>
> -#include <linux/unistd.h>
> -#include <getopt.h>
> -#include <stdbool.h>
> -#include <inttypes.h>
> -
> -#include "iotable.h"
> -
> -static int gettid(void)
> -{
> - return syscall(__NR_gettid);
> -}
> -
> -kvm_context_t kvm;
> -
> -#define IPI_SIGNAL (SIGRTMIN + 4)
> -
> -struct io_table mmio_table;
> -
> -static int ncpus = 1;
> -static sem_t exited_sem;
> -static __thread int vcpu;
> -static sigset_t kernel_sigmask;
> -static sigset_t ipi_sigmask;
> -static uint64_t memory_size = 128 * 1024 * 1024;
> -
> -struct vcpu_info {
> - pid_t tid;
> -};
> -
> -struct vcpu_info *vcpus;
> -
> -/* Must match flat.lds linker script */
> -#define VM_TEST_LOAD_ADDRESS 0x100000
> -
> -static int test_debug(void *opaque, void *vcpu)
> -{
> - printf("test_debug\n");
> - return 0;
> -}
> -
> -static int test_halt(void *opaque, int vcpu)
> -{
> - int n;
> -
> - sigwait(&ipi_sigmask, &n);
> - return 0;
> -}
> -
> -static int test_io_window(void *opaque)
> -{
> - return 0;
> -}
> -
> -static int test_try_push_interrupts(void *opaque)
> -{
> - return 0;
> -}
> -
> -static void test_post_kvm_run(void *opaque, void *vcpu)
> -{
> -}
> -
> -static int test_pre_kvm_run(void *opaque, void *vcpu)
> -{
> - return 0;
> -}
> -
> -static int mmio_handler(void *opaque, int len, int is_write, uint64_t offset,
> - uint64_t *data)
> -{
> - int r = 0;
> -
> - switch (offset) {
> - case 0: /* putc */
> - putc(*(char *)data, stdout);
> - fflush(stdout);
> - break;
> - case 1: /* exit */
> - r = *(char *)data;
> - break;
> - default:
> - printf("%s: offset %"PRIx64" len %d data %"PRIx64"\n",
> - __func__, offset, len, *(uint64_t *)data);
> - r = -EINVAL;
> - }
> -
> - return r;
> -}
> -
> -static int test_mem_read(void *opaque, uint64_t addr, uint8_t *data, int len)
> -{
> - struct io_table_entry *iodev;
> -
> -#if 0
> - printf("%s: addr %"PRIx64" len %d\n", __func__, addr, len);
> -#endif
> -
> - iodev = io_table_lookup(&mmio_table, addr);
> - if (!iodev) {
> - printf("couldn't find device\n");
> - return -ENODEV;
> - }
> -
> - return iodev->handler(iodev->opaque, len, 0, addr - iodev->start,
> - (uint64_t *)data);
> -}
> -
> -static int test_mem_write(void *opaque, uint64_t addr, uint8_t *data, int len)
> -{
> - struct io_table_entry *iodev;
> -
> -#if 0
> - printf("%s: addr %"PRIx64" len %d data %"PRIx64"\n",
> - __func__, addr, len, *(uint64_t *)data);
> -#endif
> -
> - iodev = io_table_lookup(&mmio_table, addr);
> - if (!iodev) {
> - printf("couldn't find device\n");
> - return -ENODEV;
> - }
> -
> - return iodev->handler(iodev->opaque, len, 1, addr - iodev->start,
> - (uint64_t *)data);
> -}
> -
> -static int test_dcr_read(int vcpu, uint32_t dcrn, uint32_t *data)
> -{
> - printf("%s: dcrn %04X\n", __func__, dcrn);
> - *data = 0;
> - return 0;
> -}
> -
> -static int test_dcr_write(int vcpu, uint32_t dcrn, uint32_t data)
> -{
> - printf("%s: dcrn %04X data %04X\n", __func__, dcrn, data);
> - return 0;
> -}
> -
> -static struct kvm_callbacks test_callbacks = {
> - .mmio_read = test_mem_read,
> - .mmio_write = test_mem_write,
> - .debug = test_debug,
> - .halt = test_halt,
> - .io_window = test_io_window,
> - .try_push_interrupts = test_try_push_interrupts,
> - .post_kvm_run = test_post_kvm_run,
> - .pre_kvm_run = test_pre_kvm_run,
> - .powerpc_dcr_read = test_dcr_read,
> - .powerpc_dcr_write = test_dcr_write,
> -};
> -
> -static unsigned long load_file(void *mem, const char *fname, int inval_icache)
> -{
> - ssize_t r;
> - int fd;
> - unsigned long bytes = 0;
> -
> - fd = open(fname, O_RDONLY);
> - if (fd == -1) {
> - perror("open");
> - exit(1);
> - }
> -
> - while ((r = read(fd, mem, 4096)) != -1 && r != 0) {
> - mem += r;
> - bytes += r;
> - }
> -
> - if (r == -1) {
> - perror("read");
> - printf("read %d bytes\n", bytes);
> - exit(1);
> - }
> -
> - return bytes;
> -}
> -
> -#define ICACHE_LINE_SIZE 32
> -
> -void sync_caches(void *mem, unsigned long len)
> -{
> - unsigned long i;
> -
> - for (i = 0; i < len; i += ICACHE_LINE_SIZE)
> - asm volatile ("dcbst %0, %1" : : "g"(mem), "r"(i));
> - asm volatile ("sync");
> - for (i = 0; i < len; i += ICACHE_LINE_SIZE)
> - asm volatile ("icbi %0, %1" : : "g"(mem), "r"(i));
> - asm volatile ("sync; isync");
> -}
> -
> -static void init_vcpu(int n)
> -{
> - sigemptyset(&ipi_sigmask);
> - sigaddset(&ipi_sigmask, IPI_SIGNAL);
> - sigprocmask(SIG_UNBLOCK, &ipi_sigmask, NULL);
> - sigprocmask(SIG_BLOCK, &ipi_sigmask, &kernel_sigmask);
> - vcpus[n].tid = gettid();
> - vcpu = n;
> - kvm_set_signal_mask(kvm, n, &kernel_sigmask);
> -}
> -
> -static void *do_create_vcpu(void *_n)
> -{
> - struct kvm_regs regs;
> - int n = (long)_n;
> -
> - kvm_create_vcpu(kvm, n);
> - init_vcpu(n);
> -
> - kvm_get_regs(kvm, n, ®s);
> - regs.pc = VM_TEST_LOAD_ADDRESS;
> - kvm_set_regs(kvm, n, ®s);
> -
> - kvm_run(kvm, n, &vcpus[n]);
> - sem_post(&exited_sem);
> - return NULL;
> -}
> -
> -static void start_vcpu(int n)
> -{
> - pthread_t thread;
> -
> - pthread_create(&thread, NULL, do_create_vcpu, (void *)(long)n);
> -}
> -
> -static void usage(const char *progname)
> -{
> - fprintf(stderr,
> -"Usage: %s [OPTIONS] [bootstrap] flatfile\n"
> -"KVM test harness.\n"
> -"\n"
> -" -s, --smp=NUM create a VM with NUM virtual CPUs\n"
> -" -m, --memory=NUM[GMKB] allocate NUM memory for virtual machine. A suffix\n"
> -" can be used to change the unit (default: `M')\n"
> -" -h, --help display this help screen and exit\n"
> -"\n"
> -"Report bugs to <kvm-ppc@vger.kernel.org>.\n"
> - , progname);
> -}
> -
> -static void sig_ignore(int sig)
> -{
> - write(1, "boo\n", 4);
> -}
> -
> -int main(int argc, char **argv)
> -{
> - void *vm_mem;
> - unsigned long len;
> - int i;
> - const char *sopts = "s:phm:";
> - struct option lopts[] = {
> - { "smp", 1, 0, 's' },
> - { "memory", 1, 0, 'm' },
> - { "help", 0, 0, 'h' },
> - { 0 },
> - };
> - int opt_ind, ch;
> - int nb_args;
> - char *endptr;
> -
> - while ((ch = getopt_long(argc, argv, sopts, lopts, &opt_ind)) != -1) {
> - switch (ch) {
> - case 's':
> - ncpus = atoi(optarg);
> - break;
> - case 'm':
> - memory_size = strtoull(optarg, &endptr, 0);
> - switch (*endptr) {
> - case 'G': case 'g':
> - memory_size <<= 30;
> - break;
> - case '\0':
> - case 'M': case 'm':
> - memory_size <<= 20;
> - break;
> - case 'K': case 'k':
> - memory_size <<= 10;
> - break;
> - default:
> - fprintf(stderr,
> - "Unrecongized memory suffix: %c\n",
> - *endptr);
> - exit(1);
> - }
> - if (memory_size == 0) {
> - fprintf(stderr,
> - "Invalid memory size: 0\n");
> - exit(1);
> - }
> - break;
> - case 'h':
> - usage(argv[0]);
> - exit(0);
> - case '?':
> - default:
> - fprintf(stderr,
> - "Try `%s --help' for more information.\n",
> - argv[0]);
> - exit(1);
> - }
> - }
> -
> - nb_args = argc - optind;
> - if (nb_args < 1 || nb_args > 2) {
> - fprintf(stderr,
> - "Incorrect number of arguments.\n"
> - "Try `%s --help' for more information.\n",
> - argv[0]);
> - exit(1);
> - }
> -
> - signal(IPI_SIGNAL, sig_ignore);
> -
> - vcpus = calloc(ncpus, sizeof *vcpus);
> - if (!vcpus) {
> - fprintf(stderr, "calloc failed\n");
> - return 1;
> - }
> -
> - kvm = kvm_init(&test_callbacks, 0);
> - if (!kvm) {
> - fprintf(stderr, "kvm_init failed\n");
> - return 1;
> - }
> - if (kvm_create(kvm, memory_size, &vm_mem) < 0) {
> - kvm_finalize(kvm);
> - fprintf(stderr, "kvm_create failed\n");
> - return 1;
> - }
> -
> - vm_mem = kvm_create_phys_mem(kvm, 0, memory_size, 0, 1);
> -
> - len = load_file(vm_mem + VM_TEST_LOAD_ADDRESS, argv[optind], 1);
> - sync_caches(vm_mem + VM_TEST_LOAD_ADDRESS, len);
> -
> - io_table_register(&mmio_table, 0xf0000000, 64, mmio_handler, NULL);
> -
> - sem_init(&exited_sem, 0, 0);
> - for (i = 0; i < ncpus; ++i)
> - start_vcpu(i);
> - /* Wait for all vcpus to exit. */
> - for (i = 0; i < ncpus; ++i)
> - sem_wait(&exited_sem);
> -
> - return 0;
> -}
> diff --git a/powerpc/44x/tlbsx.S b/powerpc/44x/tlbsx.S
> deleted file mode 100644
> index b15874b18b74c..0000000000000
> --- a/powerpc/44x/tlbsx.S
> +++ /dev/null
> @@ -1,33 +0,0 @@
> -#define SPRN_MMUCR 0x3b2
> -
> -#define TLBWORD0 0x10000210
> -#define TLBWORD1 0x10000000
> -#define TLBWORD2 0x00000003
> -
> -.global _start
> -_start:
> - li r4, 0
> - mtspr SPRN_MMUCR, r4
> -
> - li r3, 23
> -
> - lis r4, TLBWORD0@h
> - ori r4, r4, TLBWORD0@l
> - tlbwe r4, r3, 0
> -
> - lis r4, TLBWORD1@h
> - ori r4, r4, TLBWORD1@l
> - tlbwe r4, r3, 1
> -
> - lis r4, TLBWORD2@h
> - ori r4, r4, TLBWORD2@l
> - tlbwe r4, r3, 2
> -
> - lis r4, 0x1000
> - tlbsx r5, r4, r0
> - cmpwi r5, 23
> - beq good
> - trap
> -
> -good:
> - b .
> diff --git a/powerpc/44x/tlbwe.S b/powerpc/44x/tlbwe.S
> deleted file mode 100644
> index ec6ef5c57fc47..0000000000000
> --- a/powerpc/44x/tlbwe.S
> +++ /dev/null
> @@ -1,27 +0,0 @@
> -#define SPRN_MMUCR 0x3b2
> -
> -/* Create a mapping at 4MB */
> -#define TLBWORD0 0x00400210
> -#define TLBWORD1 0x00400000
> -#define TLBWORD2 0x00000003
> -
> -.global _start
> -_start:
> - li r4, 0
> - mtspr SPRN_MMUCR, r4
> -
> - li r3, 23
> -
> - lis r4, TLBWORD0@h
> - ori r4, r4, TLBWORD0@l
> - tlbwe r4, r3, 0
> -
> - lis r4, TLBWORD1@h
> - ori r4, r4, TLBWORD1@l
> - tlbwe r4, r3, 1
> -
> - lis r4, TLBWORD2@h
> - ori r4, r4, TLBWORD2@l
> - tlbwe r4, r3, 2
> -
> - b .
> diff --git a/powerpc/44x/tlbwe_16KB.S b/powerpc/44x/tlbwe_16KB.S
> deleted file mode 100644
> index 1bd10bf17a187..0000000000000
> --- a/powerpc/44x/tlbwe_16KB.S
> +++ /dev/null
> @@ -1,35 +0,0 @@
> -#define SPRN_MMUCR 0x3b2
> -
> -/* 16KB mapping at 4MB */
> -#define TLBWORD0 0x00400220
> -#define TLBWORD1 0x00400000
> -#define TLBWORD2 0x00000003
> -
> -.global _start
> -_start:
> - li r4, 0
> - mtspr SPRN_MMUCR, r4
> -
> - li r3, 5
> -
> - lis r4, TLBWORD0@h
> - ori r4, r4, TLBWORD0@l
> - tlbwe r4, r3, 0
> -
> - lis r4, TLBWORD1@h
> - ori r4, r4, TLBWORD1@l
> - tlbwe r4, r3, 1
> -
> - lis r4, TLBWORD2@h
> - ori r4, r4, TLBWORD2@l
> - tlbwe r4, r3, 2
> -
> - /* load from 4MB */
> - lis r3, 0x0040
> - lwz r4, 0(r3)
> -
> - /* load from 4MB+8KB */
> - ori r3, r3, 0x2000
> - lwz r4, 0(r3)
> -
> - b .
> diff --git a/powerpc/44x/tlbwe_hole.S b/powerpc/44x/tlbwe_hole.S
> deleted file mode 100644
> index 5efd30357daa9..0000000000000
> --- a/powerpc/44x/tlbwe_hole.S
> +++ /dev/null
> @@ -1,27 +0,0 @@
> -#define SPRN_MMUCR 0x3b2
> -
> -/* Try to map real address 1GB. */
> -#define TLBWORD0 0x40000210
> -#define TLBWORD1 0x40000000
> -#define TLBWORD2 0x00000003
> -
> -.global _start
> -_start:
> - li r4, 0
> - mtspr SPRN_MMUCR, r4
> -
> - li r3, 23
> -
> - lis r4, TLBWORD0@h
> - ori r4, r4, TLBWORD0@l
> - tlbwe r4, r3, 0
> -
> - lis r4, TLBWORD1@h
> - ori r4, r4, TLBWORD1@l
> - tlbwe r4, r3, 1
> -
> - lis r4, TLBWORD2@h
> - ori r4, r4, TLBWORD2@l
> - tlbwe r4, r3, 2
> -
> - b .
> diff --git a/powerpc/cstart.S b/powerpc/cstart.S
> deleted file mode 100644
> index 70a0e9fcd47c9..0000000000000
> --- a/powerpc/cstart.S
> +++ /dev/null
> @@ -1,38 +0,0 @@
> -/*
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License, version 2, as
> - * published by the Free Software Foundation;
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> - *
> - * Copyright IBM Corp. 2008
> - *
> - * Authors: Hollis Blanchard <hollisb@us.ibm.com>
> - */
> -
> -#define OUTPUT_VADDR 0xf0000000
> -#define OUTPUT_PADDR 0xf0000000
> -
> -.globl _start
> -_start:
> - /* In the future we might need to assign a stack and zero BSS here. */
> -
> - /* Map the debug page 1:1. */
> - lis r3, OUTPUT_VADDR@h
> - ori r3, r3, OUTPUT_VADDR@l
> - lis r4, OUTPUT_PADDR@h
> - ori r4, r4, OUTPUT_PADDR@l
> - bl map
> -
> - /* Call main() and pass return code to exit(). */
> - bl main
> - bl exit
> -
> - b .
> diff --git a/powerpc/exit.c b/powerpc/exit.c
> deleted file mode 100644
> index 804ee04d9f88e..0000000000000
> --- a/powerpc/exit.c
> +++ /dev/null
> @@ -1,23 +0,0 @@
> -/*
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License, version 2, as
> - * published by the Free Software Foundation;
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> - *
> - * Copyright IBM Corp. 2008
> - *
> - * Authors: Hollis Blanchard <hollisb@us.ibm.com>
> - */
> -
> -int main(void)
> -{
> - return 1;
> -}
> diff --git a/powerpc/helloworld.c b/powerpc/helloworld.c
> deleted file mode 100644
> index f8630f7c5381f..0000000000000
> --- a/powerpc/helloworld.c
> +++ /dev/null
> @@ -1,27 +0,0 @@
> -/*
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License, version 2, as
> - * published by the Free Software Foundation;
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> - *
> - * Copyright IBM Corp. 2008
> - *
> - * Authors: Deepa Srinivasan <deepas@us.ibm.com>
> - */
> -
> -#include "libcflat.h"
> -
> -int main()
> -{
> - printf("Hello World\n");
> -
> - return 1;
> -}
> diff --git a/powerpc/io.S b/powerpc/io.S
> deleted file mode 100644
> index 97567cb6c73f2..0000000000000
> --- a/powerpc/io.S
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -#define SPRN_MMUCR 0x3b2
> -
> -#define TLBWORD0 0xf0000210
> -#define TLBWORD1 0xf0000000
> -#define TLBWORD2 0x00000003
> -
> -.global _start
> -_start:
> - li r4, 0
> - mtspr SPRN_MMUCR, r4
> -
> - li r3, 2
> -
> - lis r4, TLBWORD0@h
> - ori r4, r4, TLBWORD0@l
> - tlbwe r4, r3, 0
> -
> - lis r4, TLBWORD1@h
> - ori r4, r4, TLBWORD1@l
> - tlbwe r4, r3, 1
> -
> - lis r4, TLBWORD2@h
> - ori r4, r4, TLBWORD2@l
> - tlbwe r4, r3, 2
> -
> - lis r3, 0xf000
> - lis r4, 0x1234
> - ori r4, r4, 0x5678
> - stb r4, 0(r3)
> - lbz r5, 0(r3)
> -
> - b .
> diff --git a/powerpc/spin.S b/powerpc/spin.S
> deleted file mode 100644
> index 4406641c2711c..0000000000000
> --- a/powerpc/spin.S
> +++ /dev/null
> @@ -1,4 +0,0 @@
> -
> -.global _start
> -_start:
> - b .
> diff --git a/powerpc/sprg.S b/powerpc/sprg.S
> deleted file mode 100644
> index d0414a480342a..0000000000000
> --- a/powerpc/sprg.S
> +++ /dev/null
> @@ -1,7 +0,0 @@
> -
> -.global _start
> -_start:
> - li r3, 42
> - mtsprg 0, r3
> - mfsprg r4, 0
> - b .
> diff --git a/x86/print.h b/x86/print.h
> deleted file mode 100644
> index d5bd2f9978dc4..0000000000000
> --- a/x86/print.h
> +++ /dev/null
> @@ -1,19 +0,0 @@
> -#ifndef PRINT_H
> -#define PRINT_H
> -
> -.macro PRINT text
> -
> -.data
> -
> -333: .asciz "\text\n"
> -
> -.previous
> -
> - push %rdi
> - lea 333b, %rdi
> - call print
> - pop %rdi
> -
> -.endm
> -
> -#endif
> diff --git a/x86/run-kvm-unit-tests b/x86/run-kvm-unit-tests
> deleted file mode 100644
> index fed925a3d70fe..0000000000000
> --- a/x86/run-kvm-unit-tests
> +++ /dev/null
> @@ -1,6 +0,0 @@
> -#!/usr/bin/python
> -
> -import sys, os, os.path
> -
> -prog = sys.argv[0]
> -dir = os.path.dirname(prog)
> --
> 1.8.1.4
--
Gleb.
next prev parent reply other threads:[~2013-10-16 12:53 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-14 16:23 [PATCH 0/9] kvm-unit-tests/arm: initial drop Andrew Jones
2013-10-14 16:23 ` [PATCH 1/9] remove unused files Andrew Jones
2013-10-16 12:52 ` Gleb Natapov [this message]
2013-10-16 13:13 ` Alexander Graf
2013-10-16 13:18 ` Andrew Jones
2013-10-14 16:23 ` [PATCH 2/9] makefile and run_tests tweaks 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
2013-10-14 16:23 ` [PATCH 4/9] Introduce a simple iomap structure Andrew Jones
2013-10-14 16:23 ` [PATCH 5/9] Add halt() and some error codes Andrew Jones
2013-10-14 16:23 ` [PATCH 6/9] Introduce virtio-testdev Andrew Jones
2013-10-15 8:39 ` Andrew Jones
2013-10-17 1:06 ` Christoffer Dall
2013-10-17 9:51 ` Andrew Jones
2013-10-17 19:01 ` Christoffer Dall
2013-10-17 1:06 ` Christoffer Dall
2013-10-14 16:23 ` [PATCH 7/9] arm: replace arbitrary divisions Andrew Jones
2013-10-17 1:06 ` Christoffer Dall
2013-10-17 10:03 ` Andrew Jones
2013-10-17 18:59 ` Christoffer Dall
2013-10-14 16:23 ` [PATCH 8/9] arm: initial drop Andrew Jones
2013-10-17 1:06 ` Christoffer Dall
2013-10-17 10:16 ` Andrew Jones
2013-10-17 13:28 ` Andrew Jones
2013-10-17 18:39 ` Christoffer Dall
2013-10-14 16:23 ` [PATCH 9/9] arm: add vectors support Andrew Jones
2013-10-17 1:06 ` Christoffer Dall
2013-10-17 10:38 ` Andrew Jones
2013-10-17 18:58 ` Christoffer Dall
2013-10-20 16:35 ` Andrew Jones
2013-10-21 9:59 ` Christoffer Dall
2013-11-20 23:06 ` [PATCH 0/9] kvm-unit-tests/arm: initial drop María Soler Heredia
2013-11-26 17:23 ` Andrew Jones
2013-12-29 9:24 ` Christoffer Dall
2014-01-02 18:56 ` Andrew Jones
-- strict thread matches above, loose matches on Subject: below --
2013-12-04 16:42 [PATCH 0/9 v2] " Andrew Jones
2013-12-04 16:42 ` [PATCH 1/9] remove unused files 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=20131016125243.GF15657@redhat.com \
--to=gleb@redhat.com \
--cc=agraf@suse.de \
--cc=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).