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@xxxxxxxxxx> > --- > 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@xxxxxxxxxxxx> > - * Yaniv Kamay <yaniv@xxxxxxxxxxxx> > - * > - * 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@xxxxxxxxxxxx> > - * Yaniv Kamay <yaniv@xxxxxxxxxxxx> > - * > - * 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@xxxxxxx> > - * Copyright (C) 2006 Jens Axboe <axboe@xxxxxxxxx> > - * Copyright (C) 2008 Eric Liu <eric.e.liu@xxxxxxxxx> > - * > - * 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@xxxxxxxxxx> > - */ > - > -#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@xxxxxxxxxx> > - */ > - > -/* 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@xxxxxxxxxx> > - */ > - > -#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@xxxxxxxxxx> > - */ > - > -#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@xxxxxxxxxx> > - */ > - > -#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@xxxxxxxxxxxx> > - * Yaniv Kamay <yaniv@xxxxxxxxxxxx> > - * Hollis Blanchard <hollisb@xxxxxxxxxx> > - * > - * 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@xxxxxxxxxxxxxxx>.\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@xxxxxxxxxx> > - */ > - > -#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@xxxxxxxxxx> > - */ > - > -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@xxxxxxxxxx> > - */ > - > -#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. -- 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