In trap and emulate mode both the guest kernel and guest userspace execute in UM: Guest User address space: 0x00000000 -> 0x40000000 Guest Kernel Unmapped: 0x40000000 -> 0x60000000 Guest Kernel Mapped: 0x60000000 -> 0x80000000 --- hw/mips_addr.c | 14 ++++++++++++++ hw/mips_cpudevs.h | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/hw/mips_addr.c b/hw/mips_addr.c index aa1c7d8..c24d2d9 100644 --- a/hw/mips_addr.c +++ b/hw/mips_addr.c @@ -22,13 +22,27 @@ #include "hw.h" #include "mips_cpudevs.h" +#include "sysemu/kvm.h" + uint64_t cpu_mips_kseg0_to_phys(void *opaque, uint64_t addr) { return addr & 0x7fffffffll; } + +uint64_t cpu_mips_kvm_um_kseg0_to_phys(void *opaque, uint64_t addr) +{ + return addr & 0x3fffffffll; +} + uint64_t cpu_mips_phys_to_kseg0(void *opaque, uint64_t addr) { return addr | ~0x7fffffffll; } + + +uint64_t cpu_mips_kvm_um_phys_to_kseg0(void *opaque, uint64_t addr) +{ + return addr | 0x40000000ll; +} diff --git a/hw/mips_cpudevs.h b/hw/mips_cpudevs.h index 6bea24b..9e5af37 100644 --- a/hw/mips_cpudevs.h +++ b/hw/mips_cpudevs.h @@ -6,6 +6,10 @@ uint64_t cpu_mips_kseg0_to_phys(void *opaque, uint64_t addr); uint64_t cpu_mips_phys_to_kseg0(void *opaque, uint64_t addr); +uint64_t cpu_mips_kvm_um_kseg0_to_phys(void *opaque, uint64_t addr); +uint64_t cpu_mips_kvm_um_phys_to_kseg0(void *opaque, uint64_t addr); + + /* mips_int.c */ void cpu_mips_irq_init_cpu(CPUMIPSState *env); -- 1.7.11.3 -- 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