diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2013-05-09 11:56:40 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2013-05-09 11:56:40 -0400 |
commit | 5e0e61dd2c89c673f89fb57dcd3cc746dc0c1706 (patch) | |
tree | 5ebe6156cbc8620625b736a5c9f4d3f47e6d9ebc /arch/mips/kernel | |
parent | 9b3539e0e545e4c2f338acfc1ce52033a6f5e7f7 (diff) | |
parent | 50c8308538dc9671490d6cb65259ef0ed79f5d13 (diff) |
Merge branch 'next/kvm' into mips-for-linux-next
Diffstat (limited to 'arch/mips/kernel')
-rw-r--r-- | arch/mips/kernel/asm-offsets.c | 66 | ||||
-rw-r--r-- | arch/mips/kernel/binfmt_elfo32.c | 4 | ||||
-rw-r--r-- | arch/mips/kernel/cevt-r4k.c | 4 | ||||
-rw-r--r-- | arch/mips/kernel/smp.c | 1 | ||||
-rw-r--r-- | arch/mips/kernel/traps.c | 7 |
5 files changed, 81 insertions, 1 deletions
diff --git a/arch/mips/kernel/asm-offsets.c b/arch/mips/kernel/asm-offsets.c index 50285b2c7ffe..0845091ba480 100644 --- a/arch/mips/kernel/asm-offsets.c +++ b/arch/mips/kernel/asm-offsets.c | |||
@@ -17,6 +17,8 @@ | |||
17 | #include <asm/ptrace.h> | 17 | #include <asm/ptrace.h> |
18 | #include <asm/processor.h> | 18 | #include <asm/processor.h> |
19 | 19 | ||
20 | #include <linux/kvm_host.h> | ||
21 | |||
20 | void output_ptreg_defines(void) | 22 | void output_ptreg_defines(void) |
21 | { | 23 | { |
22 | COMMENT("MIPS pt_regs offsets."); | 24 | COMMENT("MIPS pt_regs offsets."); |
@@ -328,3 +330,67 @@ void output_pbe_defines(void) | |||
328 | BLANK(); | 330 | BLANK(); |
329 | } | 331 | } |
330 | #endif | 332 | #endif |
333 | |||
334 | void output_kvm_defines(void) | ||
335 | { | ||
336 | COMMENT(" KVM/MIPS Specfic offsets. "); | ||
337 | DEFINE(VCPU_ARCH_SIZE, sizeof(struct kvm_vcpu_arch)); | ||
338 | OFFSET(VCPU_RUN, kvm_vcpu, run); | ||
339 | OFFSET(VCPU_HOST_ARCH, kvm_vcpu, arch); | ||
340 | |||
341 | OFFSET(VCPU_HOST_EBASE, kvm_vcpu_arch, host_ebase); | ||
342 | OFFSET(VCPU_GUEST_EBASE, kvm_vcpu_arch, guest_ebase); | ||
343 | |||
344 | OFFSET(VCPU_HOST_STACK, kvm_vcpu_arch, host_stack); | ||
345 | OFFSET(VCPU_HOST_GP, kvm_vcpu_arch, host_gp); | ||
346 | |||
347 | OFFSET(VCPU_HOST_CP0_BADVADDR, kvm_vcpu_arch, host_cp0_badvaddr); | ||
348 | OFFSET(VCPU_HOST_CP0_CAUSE, kvm_vcpu_arch, host_cp0_cause); | ||
349 | OFFSET(VCPU_HOST_EPC, kvm_vcpu_arch, host_cp0_epc); | ||
350 | OFFSET(VCPU_HOST_ENTRYHI, kvm_vcpu_arch, host_cp0_entryhi); | ||
351 | |||
352 | OFFSET(VCPU_GUEST_INST, kvm_vcpu_arch, guest_inst); | ||
353 | |||
354 | OFFSET(VCPU_R0, kvm_vcpu_arch, gprs[0]); | ||
355 | OFFSET(VCPU_R1, kvm_vcpu_arch, gprs[1]); | ||
356 | OFFSET(VCPU_R2, kvm_vcpu_arch, gprs[2]); | ||
357 | OFFSET(VCPU_R3, kvm_vcpu_arch, gprs[3]); | ||
358 | OFFSET(VCPU_R4, kvm_vcpu_arch, gprs[4]); | ||
359 | OFFSET(VCPU_R5, kvm_vcpu_arch, gprs[5]); | ||
360 | OFFSET(VCPU_R6, kvm_vcpu_arch, gprs[6]); | ||
361 | OFFSET(VCPU_R7, kvm_vcpu_arch, gprs[7]); | ||
362 | OFFSET(VCPU_R8, kvm_vcpu_arch, gprs[8]); | ||
363 | OFFSET(VCPU_R9, kvm_vcpu_arch, gprs[9]); | ||
364 | OFFSET(VCPU_R10, kvm_vcpu_arch, gprs[10]); | ||
365 | OFFSET(VCPU_R11, kvm_vcpu_arch, gprs[11]); | ||
366 | OFFSET(VCPU_R12, kvm_vcpu_arch, gprs[12]); | ||
367 | OFFSET(VCPU_R13, kvm_vcpu_arch, gprs[13]); | ||
368 | OFFSET(VCPU_R14, kvm_vcpu_arch, gprs[14]); | ||
369 | OFFSET(VCPU_R15, kvm_vcpu_arch, gprs[15]); | ||
370 | OFFSET(VCPU_R16, kvm_vcpu_arch, gprs[16]); | ||
371 | OFFSET(VCPU_R17, kvm_vcpu_arch, gprs[17]); | ||
372 | OFFSET(VCPU_R18, kvm_vcpu_arch, gprs[18]); | ||
373 | OFFSET(VCPU_R19, kvm_vcpu_arch, gprs[19]); | ||
374 | OFFSET(VCPU_R20, kvm_vcpu_arch, gprs[20]); | ||
375 | OFFSET(VCPU_R21, kvm_vcpu_arch, gprs[21]); | ||
376 | OFFSET(VCPU_R22, kvm_vcpu_arch, gprs[22]); | ||
377 | OFFSET(VCPU_R23, kvm_vcpu_arch, gprs[23]); | ||
378 | OFFSET(VCPU_R24, kvm_vcpu_arch, gprs[24]); | ||
379 | OFFSET(VCPU_R25, kvm_vcpu_arch, gprs[25]); | ||
380 | OFFSET(VCPU_R26, kvm_vcpu_arch, gprs[26]); | ||
381 | OFFSET(VCPU_R27, kvm_vcpu_arch, gprs[27]); | ||
382 | OFFSET(VCPU_R28, kvm_vcpu_arch, gprs[28]); | ||
383 | OFFSET(VCPU_R29, kvm_vcpu_arch, gprs[29]); | ||
384 | OFFSET(VCPU_R30, kvm_vcpu_arch, gprs[30]); | ||
385 | OFFSET(VCPU_R31, kvm_vcpu_arch, gprs[31]); | ||
386 | OFFSET(VCPU_LO, kvm_vcpu_arch, lo); | ||
387 | OFFSET(VCPU_HI, kvm_vcpu_arch, hi); | ||
388 | OFFSET(VCPU_PC, kvm_vcpu_arch, pc); | ||
389 | OFFSET(VCPU_COP0, kvm_vcpu_arch, cop0); | ||
390 | OFFSET(VCPU_GUEST_KERNEL_ASID, kvm_vcpu_arch, guest_kernel_asid); | ||
391 | OFFSET(VCPU_GUEST_USER_ASID, kvm_vcpu_arch, guest_user_asid); | ||
392 | |||
393 | OFFSET(COP0_TLB_HI, mips_coproc, reg[MIPS_CP0_TLB_HI][0]); | ||
394 | OFFSET(COP0_STATUS, mips_coproc, reg[MIPS_CP0_STATUS][0]); | ||
395 | BLANK(); | ||
396 | } | ||
diff --git a/arch/mips/kernel/binfmt_elfo32.c b/arch/mips/kernel/binfmt_elfo32.c index 556a4357d7fc..97c5a1668e53 100644 --- a/arch/mips/kernel/binfmt_elfo32.c +++ b/arch/mips/kernel/binfmt_elfo32.c | |||
@@ -48,7 +48,11 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | |||
48 | __res; \ | 48 | __res; \ |
49 | }) | 49 | }) |
50 | 50 | ||
51 | #ifdef CONFIG_KVM_GUEST | ||
52 | #define TASK32_SIZE 0x3fff8000UL | ||
53 | #else | ||
51 | #define TASK32_SIZE 0x7fff8000UL | 54 | #define TASK32_SIZE 0x7fff8000UL |
55 | #endif | ||
52 | #undef ELF_ET_DYN_BASE | 56 | #undef ELF_ET_DYN_BASE |
53 | #define ELF_ET_DYN_BASE (TASK32_SIZE / 3 * 2) | 57 | #define ELF_ET_DYN_BASE (TASK32_SIZE / 3 * 2) |
54 | 58 | ||
diff --git a/arch/mips/kernel/cevt-r4k.c b/arch/mips/kernel/cevt-r4k.c index 07b847d77f5d..fd75d7144524 100644 --- a/arch/mips/kernel/cevt-r4k.c +++ b/arch/mips/kernel/cevt-r4k.c | |||
@@ -118,6 +118,10 @@ int c0_compare_int_usable(void) | |||
118 | unsigned int delta; | 118 | unsigned int delta; |
119 | unsigned int cnt; | 119 | unsigned int cnt; |
120 | 120 | ||
121 | #ifdef CONFIG_KVM_GUEST | ||
122 | return 1; | ||
123 | #endif | ||
124 | |||
121 | /* | 125 | /* |
122 | * IP7 already pending? Try to clear it by acking the timer. | 126 | * IP7 already pending? Try to clear it by acking the timer. |
123 | */ | 127 | */ |
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index 66bf4e22d9b9..596620dd7ee2 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c | |||
@@ -83,6 +83,7 @@ static inline void set_cpu_sibling_map(int cpu) | |||
83 | } | 83 | } |
84 | 84 | ||
85 | struct plat_smp_ops *mp_ops; | 85 | struct plat_smp_ops *mp_ops; |
86 | EXPORT_SYMBOL(mp_ops); | ||
86 | 87 | ||
87 | __cpuinit void register_smp_ops(struct plat_smp_ops *ops) | 88 | __cpuinit void register_smp_ops(struct plat_smp_ops *ops) |
88 | { | 89 | { |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 3b98b7b8487f..7a99e60dadbd 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -1712,7 +1712,12 @@ void __init trap_init(void) | |||
1712 | ebase = (unsigned long) | 1712 | ebase = (unsigned long) |
1713 | __alloc_bootmem(size, 1 << fls(size), 0); | 1713 | __alloc_bootmem(size, 1 << fls(size), 0); |
1714 | } else { | 1714 | } else { |
1715 | ebase = CKSEG0; | 1715 | #ifdef CONFIG_KVM_GUEST |
1716 | #define KVM_GUEST_KSEG0 0x40000000 | ||
1717 | ebase = KVM_GUEST_KSEG0; | ||
1718 | #else | ||
1719 | ebase = CKSEG0; | ||
1720 | #endif | ||
1716 | if (cpu_has_mips_r2) | 1721 | if (cpu_has_mips_r2) |
1717 | ebase += (read_c0_ebase() & 0x3ffff000); | 1722 | ebase += (read_c0_ebase() & 0x3ffff000); |
1718 | } | 1723 | } |