diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-10-21 19:09:29 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-10-21 19:09:29 -0700 | 
| commit | a23b27ae122fdcbc7628cd31fcffafec1e09189a (patch) | |
| tree | 3adef9baa9a9eeb6c6a287e46ff7ca7bcbe91207 | |
| parent | 02593ac680dfd7d8fd128936183ee5ead8ce9aa7 (diff) | |
| parent | 658f7c4bb714740366b6d6ab1d88ba1b774a97fc (diff) | |
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
Pull KVM fixes from Radim Krčmář:
 "ARM:
   - avoid livelock when walking guest page tables
   - fix HYP mode static keys without CC_HAVE_ASM_GOTO
  MIPS:
   - fix a build error without TRACEPOINTS_ENABLED
  s390:
   - reject a malformed userspace configuration
  x86:
   - suppress a warning without CONFIG_CPU_FREQ
   - initialize whole irq_eoi array"
* tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
  arm/arm64: KVM: Map the BSS at HYP
  arm64: KVM: Take S1 walks into account when determining S2 write faults
  KVM: s390: reject invalid modes for runtime instrumentation
  kvm: x86: memset whole irq_eoi
  kvm/x86: Fix unused variable warning in kvm_timer_init()
  KVM: MIPS: Add missing uaccess.h include
| -rw-r--r-- | arch/arm/kvm/arm.c | 7 | ||||
| -rw-r--r-- | arch/arm64/include/asm/kvm_emulate.h | 11 | ||||
| -rw-r--r-- | arch/mips/kvm/mips.c | 1 | ||||
| -rw-r--r-- | arch/s390/kvm/intercept.c | 9 | ||||
| -rw-r--r-- | arch/x86/kvm/ioapic.c | 2 | ||||
| -rw-r--r-- | arch/x86/kvm/x86.c | 4 | 
6 files changed, 24 insertions, 10 deletions
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c index 03e9273f1876..08bb84f2ad58 100644 --- a/arch/arm/kvm/arm.c +++ b/arch/arm/kvm/arm.c @@ -1312,6 +1312,13 @@ static int init_hyp_mode(void)  		goto out_err;  	} +	err = create_hyp_mappings(kvm_ksym_ref(__bss_start), +				  kvm_ksym_ref(__bss_stop), PAGE_HYP_RO); +	if (err) { +		kvm_err("Cannot map bss section\n"); +		goto out_err; +	} +  	/*  	 * Map the Hyp stack pages  	 */ diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/kvm_emulate.h index fd9d5fd788f5..f5ea0ba70f07 100644 --- a/arch/arm64/include/asm/kvm_emulate.h +++ b/arch/arm64/include/asm/kvm_emulate.h @@ -178,11 +178,6 @@ static inline bool kvm_vcpu_dabt_isvalid(const struct kvm_vcpu *vcpu)  	return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_ISV);  } -static inline bool kvm_vcpu_dabt_iswrite(const struct kvm_vcpu *vcpu) -{ -	return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_WNR); -} -  static inline bool kvm_vcpu_dabt_issext(const struct kvm_vcpu *vcpu)  {  	return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_SSE); @@ -203,6 +198,12 @@ static inline bool kvm_vcpu_dabt_iss1tw(const struct kvm_vcpu *vcpu)  	return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_S1PTW);  } +static inline bool kvm_vcpu_dabt_iswrite(const struct kvm_vcpu *vcpu) +{ +	return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_WNR) || +		kvm_vcpu_dabt_iss1tw(vcpu); /* AF/DBM update */ +} +  static inline bool kvm_vcpu_dabt_is_cm(const struct kvm_vcpu *vcpu)  {  	return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_CM); diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c index ce961495b5e1..622037d851a3 100644 --- a/arch/mips/kvm/mips.c +++ b/arch/mips/kvm/mips.c @@ -14,6 +14,7 @@  #include <linux/err.h>  #include <linux/kdebug.h>  #include <linux/module.h> +#include <linux/uaccess.h>  #include <linux/vmalloc.h>  #include <linux/fs.h>  #include <linux/bootmem.h> diff --git a/arch/s390/kvm/intercept.c b/arch/s390/kvm/intercept.c index 1cab8a177d0e..7a27eebab28a 100644 --- a/arch/s390/kvm/intercept.c +++ b/arch/s390/kvm/intercept.c @@ -119,8 +119,13 @@ static int handle_validity(struct kvm_vcpu *vcpu)  	vcpu->stat.exit_validity++;  	trace_kvm_s390_intercept_validity(vcpu, viwhy); -	WARN_ONCE(true, "kvm: unhandled validity intercept 0x%x\n", viwhy); -	return -EOPNOTSUPP; +	KVM_EVENT(3, "validity intercept 0x%x for pid %u (kvm 0x%pK)", viwhy, +		  current->pid, vcpu->kvm); + +	/* do not warn on invalid runtime instrumentation mode */ +	WARN_ONCE(viwhy != 0x44, "kvm: unhandled validity intercept 0x%x\n", +		  viwhy); +	return -EINVAL;  }  static int handle_instruction(struct kvm_vcpu *vcpu) diff --git a/arch/x86/kvm/ioapic.c b/arch/x86/kvm/ioapic.c index c7220ba94aa7..1a22de70f7f7 100644 --- a/arch/x86/kvm/ioapic.c +++ b/arch/x86/kvm/ioapic.c @@ -594,7 +594,7 @@ static void kvm_ioapic_reset(struct kvm_ioapic *ioapic)  	ioapic->irr = 0;  	ioapic->irr_delivered = 0;  	ioapic->id = 0; -	memset(ioapic->irq_eoi, 0x00, IOAPIC_NUM_PINS); +	memset(ioapic->irq_eoi, 0x00, sizeof(ioapic->irq_eoi));  	rtc_irq_eoi_tracking_reset(ioapic);  } diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 6c633de84dd7..e375235d81c9 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -5733,13 +5733,13 @@ static int kvmclock_cpu_online(unsigned int cpu)  static void kvm_timer_init(void)  { -	int cpu; -  	max_tsc_khz = tsc_khz;  	if (!boot_cpu_has(X86_FEATURE_CONSTANT_TSC)) {  #ifdef CONFIG_CPU_FREQ  		struct cpufreq_policy policy; +		int cpu; +  		memset(&policy, 0, sizeof(policy));  		cpu = get_cpu();  		cpufreq_get_policy(&policy, cpu);  | 
