Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:11.4:Update
kvm
S390-qemu-kvm.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File S390-qemu-kvm.patch of Package kvm
Index: qemu-kvm-0.12.3/hw/msix.h =================================================================== --- qemu-kvm-0.12.3.orig/hw/msix.h +++ qemu-kvm-0.12.3/hw/msix.h @@ -4,33 +4,33 @@ #include "qemu-common.h" #include "pci.h" -int msix_init(PCIDevice *pdev, unsigned short nentries, - unsigned bar_nr, unsigned bar_size); +static int msix_init(PCIDevice *pdev, unsigned short nentries, + unsigned bar_nr, unsigned bar_size) { return 0; } -void msix_write_config(PCIDevice *pci_dev, uint32_t address, - uint32_t val, int len); +static void msix_write_config(PCIDevice *pci_dev, uint32_t address, + uint32_t val, int len) { } -void msix_mmio_map(PCIDevice *pci_dev, int region_num, - pcibus_t addr, pcibus_t size, int type); +static void msix_mmio_map(PCIDevice *pci_dev, int region_num, + pcibus_t addr, pcibus_t size, int type) { } -int msix_uninit(PCIDevice *d); +static int msix_uninit(PCIDevice *d) { return 0; } -void msix_save(PCIDevice *dev, QEMUFile *f); -void msix_load(PCIDevice *dev, QEMUFile *f); +static void msix_save(PCIDevice *dev, QEMUFile *f) { } +static void msix_load(PCIDevice *dev, QEMUFile *f) { } -int msix_enabled(PCIDevice *dev); -int msix_present(PCIDevice *dev); +static int msix_enabled(PCIDevice *dev) { return 0; } +static int msix_present(PCIDevice *dev) { return 0; } -uint32_t msix_bar_size(PCIDevice *dev); +static uint32_t msix_bar_size(PCIDevice *dev) { return 0; } -int msix_vector_use(PCIDevice *dev, unsigned vector); -void msix_vector_unuse(PCIDevice *dev, unsigned vector); -void msix_unuse_all_vectors(PCIDevice *dev); +static int msix_vector_use(PCIDevice *dev, unsigned vector) { return 0; } +static void msix_vector_unuse(PCIDevice *dev, unsigned vector) { } +static void msix_unuse_all_vectors(PCIDevice *dev) { } -void msix_notify(PCIDevice *dev, unsigned vector); +static void msix_notify(PCIDevice *dev, unsigned vector) { } -void msix_reset(PCIDevice *dev); +static void msix_reset(PCIDevice *dev) { } -extern int msix_supported; +//static int msix_supported = 0; #endif Index: qemu-kvm-0.12.3/hw/s390-virtio.c =================================================================== --- qemu-kvm-0.12.3.orig/hw/s390-virtio.c +++ qemu-kvm-0.12.3/hw/s390-virtio.c @@ -186,7 +186,7 @@ static void s390_init(ram_addr_t ram_siz exit(1); } - cpu_synchronize_state(env); + //cpu_synchronize_state(env); env->psw.addr = KERN_IMAGE_START; env->psw.mask = 0x0000000180000000ULL; } @@ -247,6 +247,8 @@ static void s390_init(ram_addr_t ram_siz qdev_prop_set_drive(dev, "drive", dinfo); qdev_init_nofail(dev); } + + kvm_arch_load_regs(env); } static QEMUMachine s390_machine = { Index: qemu-kvm-0.12.3/kvm/include/linux/kvm.h =================================================================== --- qemu-kvm-0.12.3.orig/kvm/include/linux/kvm.h +++ qemu-kvm-0.12.3/kvm/include/linux/kvm.h @@ -211,7 +211,7 @@ struct kvm_run { __u64 data_offset; /* relative to kvm_run start */ } io; struct { - struct kvm_debug_exit_arch arch; + //struct kvm_debug_exit_arch arch; } debug; /* KVM_EXIT_MMIO */ struct { @@ -375,7 +375,7 @@ struct kvm_s390_interrupt { struct kvm_guest_debug { __u32 control; __u32 pad; - struct kvm_guest_debug_arch arch; + //struct kvm_guest_debug_arch arch; }; enum { Index: qemu-kvm-0.12.3/Makefile.target =================================================================== --- qemu-kvm-0.12.3.orig/Makefile.target +++ qemu-kvm-0.12.3/Makefile.target @@ -51,7 +51,7 @@ libobj-$(CONFIG_NOSOFTFLOAT) += fpu/soft libobj-y += op_helper.o helper.o libobj-$(CONFIG_NEED_MMU) += mmu.o -libobj-$(CONFIG_KVM) += kvm-tpr-opt.o +#libobj-$(CONFIG_KVM) += kvm-tpr-opt.o libobj-$(CONFIG_KVM) += qemu-kvm-helper.o libobj-$(TARGET_ARM) += neon_helper.o iwmmxt_helper.o @@ -170,7 +170,7 @@ obj-y += virtio-blk.o virtio-balloon.o v obj-$(CONFIG_KVM) += kvm.o kvm-all.o # MSI-X depends on kvm for interrupt injection, # so moved it from Makefile.hw to Makefile.target for now -obj-y += msix.o +# obj-y += msix.o obj-$(CONFIG_ISA_MMIO) += isa_mmio.o LIBS+=-lz Index: qemu-kvm-0.12.3/qemu-kvm.c =================================================================== --- qemu-kvm-0.12.3.orig/qemu-kvm.c +++ qemu-kvm-0.12.3/qemu-kvm.c @@ -66,7 +66,7 @@ pthread_cond_t qemu_pause_cond = PTHREAD pthread_cond_t qemu_work_cond = PTHREAD_COND_INITIALIZER; __thread CPUState *current_env; -static int qemu_system_ready; +int qemu_system_ready; #define SIG_IPI (SIGRTMIN+4) @@ -157,7 +157,7 @@ static void init_slots(void) static int get_free_slot(kvm_context_t kvm) { - int i; + int i = 0; int tss_ext; #if defined(KVM_CAP_SET_TSS_ADDR) && !defined(__s390__) @@ -171,14 +171,21 @@ static int get_free_slot(kvm_context_t k * slot 0 to hold the extended memory, as the vmx will use the last 3 * pages of this slot. */ +#if 0 if (tss_ext > 0) i = 0; else i = 1; +#endif - for (; i < KVM_MAX_NUM_MEM_REGIONS; ++i) - if (!slots[i].len) + for (; i < KVM_MAX_NUM_MEM_REGIONS; ++i) { + DPRINTF("slot[%d].len = %#lx\n", i, slots[i].len); + if (!slots[i].len) { return i; + } + DPRINTF("slot[%d] skipped\n", i, slots[i].len); + } + return -1; } @@ -451,6 +458,12 @@ static void kvm_create_vcpu(CPUState *en env->kvm_fd = r; env->kvm_state = kvm_state; + r = kvm_vcpu_ioctl(env, KVM_S390_INITIAL_RESET, 0); + if (r < 0) { + fprintf(stderr, "kvm_s390_initial_reset: %m\n"); + exit(1); + } + mmap_size = kvm_ioctl(kvm_state, KVM_GET_VCPU_MMAP_SIZE, 0); if (mmap_size < 0) { fprintf(stderr, "get vcpu mmap size: %m\n"); @@ -943,12 +956,11 @@ int kvm_run(CPUState *env) } #endif -#if !defined(__s390__) if (r == -1) { r = handle_io_window(kvm); goto more; } -#endif + if (1) { switch (run->exit_reason) { case KVM_EXIT_UNKNOWN: @@ -986,7 +998,7 @@ int kvm_run(CPUState *env) case KVM_EXIT_SHUTDOWN: r = handle_shutdown(kvm, env); break; -#if defined(__s390__) +#if 0 case KVM_EXIT_S390_SIEIC: r = kvm_s390_handle_intercept(kvm, env, run); break; @@ -1132,7 +1144,7 @@ int kvm_destroy_memory_region_works(kvm_ return ret; } -int kvm_reinject_control(kvm_context_t kvm, int pit_reinject) +static int kvm_reinject_control(kvm_context_t kvm, int pit_reinject) { #ifdef KVM_CAP_REINJECT_CONTROL int r; @@ -1632,7 +1644,7 @@ static void kvm_do_save_mpstate(void *_e CPUState *env = _env; kvm_arch_save_mpstate(env); -#ifdef KVM_CAP_MP_STATE +#if 0 if (kvm_irqchip_in_kernel()) env->halted = (env->mp_state == KVM_MP_STATE_HALTED); #endif @@ -2303,11 +2315,13 @@ void kvm_set_phys_mem(target_phys_addr_t return; #endif while (size > 0) { +#if 0 p = find_mapping(start_addr); if (p) { kvm_unregister_memory_area(kvm_context, p->phys, p->len); drop_mapping(p->phys); } +#endif start_addr += TARGET_PAGE_SIZE; if (size > TARGET_PAGE_SIZE) { size -= TARGET_PAGE_SIZE; Index: qemu-kvm-0.12.3/qemu-kvm.h =================================================================== --- qemu-kvm-0.12.3.orig/qemu-kvm.h +++ qemu-kvm-0.12.3/qemu-kvm.h @@ -670,6 +670,7 @@ int kvm_enable_vapic(CPUState *env, uint #endif +#if 0 #if defined(__s390__) int kvm_s390_initial_reset(kvm_context_t kvm, int slot); int kvm_s390_interrupt(kvm_context_t kvm, int slot, @@ -677,6 +678,7 @@ int kvm_s390_interrupt(kvm_context_t kvm int kvm_s390_set_initial_psw(kvm_context_t kvm, int slot, psw_t psw); int kvm_s390_store_status(kvm_context_t kvm, int slot, unsigned long addr); #endif +#endif #ifdef KVM_CAP_DEVICE_ASSIGNMENT /*! Index: qemu-kvm-0.12.3/qemu-kvm-helper.c =================================================================== --- qemu-kvm-0.12.3.orig/qemu-kvm-helper.c +++ qemu-kvm-0.12.3/qemu-kvm-helper.c @@ -30,7 +30,7 @@ void qemu_kvm_call_with_env(void (*func) static void call_helper_cpuid(void *junk) { - helper_cpuid(); + //helper_cpuid(); } void qemu_kvm_cpuid_on_env(CPUState *env) Index: qemu-kvm-0.12.3/target-s390x/kvm.c =================================================================== --- qemu-kvm-0.12.3.orig/target-s390x/kvm.c +++ qemu-kvm-0.12.3/target-s390x/kvm.c @@ -70,10 +70,12 @@ #define SCLP_CMDW_READ_SCP_INFO 0x00020001 #define SCLP_CMDW_READ_SCP_INFO_FORCED 0x00120001 +#ifdef KVM_UPSTREAM int kvm_arch_init(KVMState *s, int smp_cpus) { return 0; } +#endif int kvm_arch_init_vcpu(CPUState *env) { @@ -86,17 +88,33 @@ int kvm_arch_init_vcpu(CPUState *env) return ret; } +#ifdef KVM_UPSTREAM void kvm_arch_reset_vcpu(CPUState *env) +#else +void kvm_arch_cpu_reset(CPUState *env) +#endif { /* FIXME: add code to reset vcpu. */ } +#ifdef KVM_UPSTREAM int kvm_arch_put_registers(CPUState *env) +#else +int _kvm_arch_load_regs(CPUState *env); + +void kvm_arch_load_regs(CPUState *env) +{ + _kvm_arch_load_regs(env); +} + +int _kvm_arch_load_regs(CPUState *env) +#endif { struct kvm_regs regs; int ret; int i; + dprintf("put regs!\n"); ret = kvm_vcpu_ioctl(env, KVM_GET_REGS, ®s); if (ret < 0) { return ret; @@ -117,14 +135,27 @@ int kvm_arch_put_registers(CPUState *env return ret; } +#ifdef KVM_UPSTREAM int kvm_arch_get_registers(CPUState *env) +#else +int _kvm_arch_save_regs(CPUState *env); + +void kvm_arch_save_regs(CPUState *env) +{ + _kvm_arch_save_regs(env); +} + +int _kvm_arch_save_regs(CPUState *env) +#endif { uint32_t ret; struct kvm_regs regs; int i; + dprintf("get regs!\n"); ret = kvm_vcpu_ioctl(env, KVM_GET_REGS, ®s); if (ret < 0) { + dprintf("OH NOEZ!\n"); return ret; } @@ -180,6 +211,10 @@ static void kvm_s390_interrupt_internal( { struct kvm_s390_interrupt kvmint; int r; + extern int qemu_system_ready; + + if (!qemu_system_ready) + return; if (!env->kvm_state) { return; @@ -459,10 +494,14 @@ static int handle_intercept(CPUState *en break; } - return r; + return 0; //r; } +#ifdef KVM_UPSTREAM int kvm_arch_handle_exit(CPUState *env, struct kvm_run *run) +#else +static int kvm_arch_handle_exit(CPUState *env, struct kvm_run *run) +#endif { int ret = 0; @@ -476,8 +515,77 @@ int kvm_arch_handle_exit(CPUState *env, break; default: fprintf(stderr, "Unknown KVM exit: %d\n", run->exit_reason); + ret = -1; break; } return ret; } + +int kvm_arch_run(CPUState *env) +{ + return kvm_arch_handle_exit(env, env->kvm_run); +} + +#ifndef KVM_UPSTREAM +void kvm_arch_save_mpstate(CPUState *env) +{ +} + +void kvm_arch_load_mpstate(CPUState *env) +{ +} + +int kvm_arch_create(kvm_context_t kvm, unsigned long phys_mem_bytes, + void **vm_mem) +{ + return 0; +} + +int kvm_arch_qemu_create_context(void) +{ + return 0; +} + +void kvm_show_regs(CPUState *env) +{ + struct kvm_regs regs; + int i, r; + + r = kvm_vcpu_ioctl(env, KVM_GET_REGS, ®s); + if (r < 0) { + perror("KVM_GET_REGS"); + return; + } + + for (i = 0; i < 16; i++) { + fprintf(stderr, "R%02d=%016lx", i, regs.gprs[i]); + if ((i % 4) == 3) { + fprintf(stderr, "\n"); + } else { + fprintf(stderr, " "); + } + } + + fprintf(stderr, "PSW=mask %016lx addr %016lx\n", env->kvm_run->psw_addr, env->kvm_run->psw_mask); + fprintf(stderr, "ENV PSW=mask %016lx addr %016lx\n", env->psw.addr, env->psw.mask); +} + +int kvm_arch_halt(CPUState *env) +{ + return 1; +} + +void kvm_show_code(CPUState *env) +{ +} + +int kvm_arch_has_work(CPUState *env) +{ + return 1; +} + +void kvm_arch_process_irqchip_events(CPUState *env) +{ +} +#endif Index: qemu-kvm-0.12.3/target-s390x/libkvm.h =================================================================== --- /dev/null +++ qemu-kvm-0.12.3/target-s390x/libkvm.h @@ -0,0 +1,26 @@ +/* + * This header is for functions & variables that will ONLY be + * used inside libkvm for x86. + * THESE ARE NOT EXPOSED TO THE USER AND ARE ONLY FOR USE + * WITHIN LIBKVM. + * + * derived from libkvm.c + * + * Copyright (C) 2006 Qumranet, Inc. + * + * Authors: + * Avi Kivity <avi@qumranet.com> + * Yaniv Kamay <yaniv@qumranet.com> + * + * This work is licensed under the GNU LGPL license, version 2. + */ + +#ifndef KVM_X86_H +#define KVM_X86_H + +#define PAGE_SIZE 4096ul +#define PAGE_MASK (~(PAGE_SIZE - 1)) + +#define smp_wmb() asm volatile("" ::: "memory") + +#endif
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor