diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-13 12:47:01 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-13 12:47:01 -0400 |
commit | 900360131066f192c82311a098d03d6ac6429e20 (patch) | |
tree | e9681537a2d1f75fa5be21d8f1116f9f0ba8a391 /arch/arm64/include | |
parent | 4541fec3104bef0c60633f9e180be94ea5ccc2b7 (diff) | |
parent | ca3f0874723fad81d0c701b63ae3a17a408d5f25 (diff) |
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
Pull KVM updates from Paolo Bonzini:
"First batch of KVM changes for 4.1
The most interesting bit here is irqfd/ioeventfd support for ARM and
ARM64.
Summary:
ARM/ARM64:
fixes for live migration, irqfd and ioeventfd support (enabling
vhost, too), page aging
s390:
interrupt handling rework, allowing to inject all local interrupts
via new ioctl and to get/set the full local irq state for migration
and introspection. New ioctls to access memory by virtual address,
and to get/set the guest storage keys. SIMD support.
MIPS:
FPU and MIPS SIMD Architecture (MSA) support. Includes some
patches from Ralf Baechle's MIPS tree.
x86:
bugfixes (notably for pvclock, the others are small) and cleanups.
Another small latency improvement for the TSC deadline timer"
* tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (146 commits)
KVM: use slowpath for cross page cached accesses
kvm: mmu: lazy collapse small sptes into large sptes
KVM: x86: Clear CR2 on VCPU reset
KVM: x86: DR0-DR3 are not clear on reset
KVM: x86: BSP in MSR_IA32_APICBASE is writable
KVM: x86: simplify kvm_apic_map
KVM: x86: avoid logical_map when it is invalid
KVM: x86: fix mixed APIC mode broadcast
KVM: x86: use MDA for interrupt matching
kvm/ppc/mpic: drop unused IRQ_testbit
KVM: nVMX: remove unnecessary double caching of MAXPHYADDR
KVM: nVMX: checks for address bits beyond MAXPHYADDR on VM-entry
KVM: x86: cache maxphyaddr CPUID leaf in struct kvm_vcpu
KVM: vmx: pass error code with internal error #2
x86: vdso: fix pvclock races with task migration
KVM: remove kvm_read_hva and kvm_read_hva_atomic
KVM: x86: optimize delivery of TSC deadline timer interrupt
KVM: x86: extract blocking logic from __vcpu_run
kvm: x86: fix x86 eflags fixed bit
KVM: s390: migrate vcpu interrupt state
...
Diffstat (limited to 'arch/arm64/include')
-rw-r--r-- | arch/arm64/include/asm/esr.h | 1 | ||||
-rw-r--r-- | arch/arm64/include/asm/kvm_arm.h | 1 | ||||
-rw-r--r-- | arch/arm64/include/asm/kvm_host.h | 15 | ||||
-rw-r--r-- | arch/arm64/include/asm/kvm_mmio.h | 22 | ||||
-rw-r--r-- | arch/arm64/include/uapi/asm/kvm.h | 3 |
5 files changed, 9 insertions, 33 deletions
diff --git a/arch/arm64/include/asm/esr.h b/arch/arm64/include/asm/esr.h index 92bbae381598..70522450ca23 100644 --- a/arch/arm64/include/asm/esr.h +++ b/arch/arm64/include/asm/esr.h | |||
@@ -90,6 +90,7 @@ | |||
90 | #define ESR_ELx_FSC (0x3F) | 90 | #define ESR_ELx_FSC (0x3F) |
91 | #define ESR_ELx_FSC_TYPE (0x3C) | 91 | #define ESR_ELx_FSC_TYPE (0x3C) |
92 | #define ESR_ELx_FSC_EXTABT (0x10) | 92 | #define ESR_ELx_FSC_EXTABT (0x10) |
93 | #define ESR_ELx_FSC_ACCESS (0x08) | ||
93 | #define ESR_ELx_FSC_FAULT (0x04) | 94 | #define ESR_ELx_FSC_FAULT (0x04) |
94 | #define ESR_ELx_FSC_PERM (0x0C) | 95 | #define ESR_ELx_FSC_PERM (0x0C) |
95 | #define ESR_ELx_CV (UL(1) << 24) | 96 | #define ESR_ELx_CV (UL(1) << 24) |
diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h index 54bb4ba97441..ac6fafb95fe7 100644 --- a/arch/arm64/include/asm/kvm_arm.h +++ b/arch/arm64/include/asm/kvm_arm.h | |||
@@ -188,6 +188,7 @@ | |||
188 | 188 | ||
189 | /* For compatibility with fault code shared with 32-bit */ | 189 | /* For compatibility with fault code shared with 32-bit */ |
190 | #define FSC_FAULT ESR_ELx_FSC_FAULT | 190 | #define FSC_FAULT ESR_ELx_FSC_FAULT |
191 | #define FSC_ACCESS ESR_ELx_FSC_ACCESS | ||
191 | #define FSC_PERM ESR_ELx_FSC_PERM | 192 | #define FSC_PERM ESR_ELx_FSC_PERM |
192 | 193 | ||
193 | /* Hyp Prefetch Fault Address Register (HPFAR/HDFAR) */ | 194 | /* Hyp Prefetch Fault Address Register (HPFAR/HDFAR) */ |
diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h index 8ac3c70fe3c6..f0f58c9beec0 100644 --- a/arch/arm64/include/asm/kvm_host.h +++ b/arch/arm64/include/asm/kvm_host.h | |||
@@ -28,6 +28,8 @@ | |||
28 | #include <asm/kvm_asm.h> | 28 | #include <asm/kvm_asm.h> |
29 | #include <asm/kvm_mmio.h> | 29 | #include <asm/kvm_mmio.h> |
30 | 30 | ||
31 | #define __KVM_HAVE_ARCH_INTC_INITIALIZED | ||
32 | |||
31 | #if defined(CONFIG_KVM_ARM_MAX_VCPUS) | 33 | #if defined(CONFIG_KVM_ARM_MAX_VCPUS) |
32 | #define KVM_MAX_VCPUS CONFIG_KVM_ARM_MAX_VCPUS | 34 | #define KVM_MAX_VCPUS CONFIG_KVM_ARM_MAX_VCPUS |
33 | #else | 35 | #else |
@@ -177,19 +179,10 @@ int kvm_unmap_hva(struct kvm *kvm, unsigned long hva); | |||
177 | int kvm_unmap_hva_range(struct kvm *kvm, | 179 | int kvm_unmap_hva_range(struct kvm *kvm, |
178 | unsigned long start, unsigned long end); | 180 | unsigned long start, unsigned long end); |
179 | void kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte); | 181 | void kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte); |
182 | int kvm_age_hva(struct kvm *kvm, unsigned long start, unsigned long end); | ||
183 | int kvm_test_age_hva(struct kvm *kvm, unsigned long hva); | ||
180 | 184 | ||
181 | /* We do not have shadow page tables, hence the empty hooks */ | 185 | /* We do not have shadow page tables, hence the empty hooks */ |
182 | static inline int kvm_age_hva(struct kvm *kvm, unsigned long start, | ||
183 | unsigned long end) | ||
184 | { | ||
185 | return 0; | ||
186 | } | ||
187 | |||
188 | static inline int kvm_test_age_hva(struct kvm *kvm, unsigned long hva) | ||
189 | { | ||
190 | return 0; | ||
191 | } | ||
192 | |||
193 | static inline void kvm_arch_mmu_notifier_invalidate_page(struct kvm *kvm, | 186 | static inline void kvm_arch_mmu_notifier_invalidate_page(struct kvm *kvm, |
194 | unsigned long address) | 187 | unsigned long address) |
195 | { | 188 | { |
diff --git a/arch/arm64/include/asm/kvm_mmio.h b/arch/arm64/include/asm/kvm_mmio.h index 9f52beb7cb13..889c908ee631 100644 --- a/arch/arm64/include/asm/kvm_mmio.h +++ b/arch/arm64/include/asm/kvm_mmio.h | |||
@@ -31,28 +31,6 @@ struct kvm_decode { | |||
31 | bool sign_extend; | 31 | bool sign_extend; |
32 | }; | 32 | }; |
33 | 33 | ||
34 | /* | ||
35 | * The in-kernel MMIO emulation code wants to use a copy of run->mmio, | ||
36 | * which is an anonymous type. Use our own type instead. | ||
37 | */ | ||
38 | struct kvm_exit_mmio { | ||
39 | phys_addr_t phys_addr; | ||
40 | u8 data[8]; | ||
41 | u32 len; | ||
42 | bool is_write; | ||
43 | void *private; | ||
44 | }; | ||
45 | |||
46 | static inline void kvm_prepare_mmio(struct kvm_run *run, | ||
47 | struct kvm_exit_mmio *mmio) | ||
48 | { | ||
49 | run->mmio.phys_addr = mmio->phys_addr; | ||
50 | run->mmio.len = mmio->len; | ||
51 | run->mmio.is_write = mmio->is_write; | ||
52 | memcpy(run->mmio.data, mmio->data, mmio->len); | ||
53 | run->exit_reason = KVM_EXIT_MMIO; | ||
54 | } | ||
55 | |||
56 | int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run); | 34 | int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run); |
57 | int io_mem_abort(struct kvm_vcpu *vcpu, struct kvm_run *run, | 35 | int io_mem_abort(struct kvm_vcpu *vcpu, struct kvm_run *run, |
58 | phys_addr_t fault_ipa); | 36 | phys_addr_t fault_ipa); |
diff --git a/arch/arm64/include/uapi/asm/kvm.h b/arch/arm64/include/uapi/asm/kvm.h index 3ef77a466018..c154c0b7eb60 100644 --- a/arch/arm64/include/uapi/asm/kvm.h +++ b/arch/arm64/include/uapi/asm/kvm.h | |||
@@ -191,6 +191,9 @@ struct kvm_arch_memory_slot { | |||
191 | /* Highest supported SPI, from VGIC_NR_IRQS */ | 191 | /* Highest supported SPI, from VGIC_NR_IRQS */ |
192 | #define KVM_ARM_IRQ_GIC_MAX 127 | 192 | #define KVM_ARM_IRQ_GIC_MAX 127 |
193 | 193 | ||
194 | /* One single KVM irqchip, ie. the VGIC */ | ||
195 | #define KVM_NR_IRQCHIPS 1 | ||
196 | |||
194 | /* PSCI interface */ | 197 | /* PSCI interface */ |
195 | #define KVM_PSCI_FN_BASE 0x95c1ba5e | 198 | #define KVM_PSCI_FN_BASE 0x95c1ba5e |
196 | #define KVM_PSCI_FN(n) (KVM_PSCI_FN_BASE + (n)) | 199 | #define KVM_PSCI_FN(n) (KVM_PSCI_FN_BASE + (n)) |