diff options
Diffstat (limited to 'arch/x86/kvm/hyperv.c')
| -rw-r--r-- | arch/x86/kvm/hyperv.c | 16 | 
1 files changed, 11 insertions, 5 deletions
diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c index 5e19e6e4c2ce..6e38a7d22e97 100644 --- a/arch/x86/kvm/hyperv.c +++ b/arch/x86/kvm/hyperv.c @@ -164,7 +164,7 @@ static int synic_set_sint(struct kvm_vcpu_hv_synic *synic, int sint,  static struct kvm_vcpu *get_vcpu_by_vpidx(struct kvm *kvm, u32 vpidx)  {  	struct kvm_vcpu *vcpu = NULL; -	int i; +	unsigned long i;  	if (vpidx >= KVM_MAX_VCPUS)  		return NULL; @@ -1716,7 +1716,8 @@ static __always_inline unsigned long *sparse_set_to_vcpu_mask(  {  	struct kvm_hv *hv = to_kvm_hv(kvm);  	struct kvm_vcpu *vcpu; -	int i, bank, sbank = 0; +	int bank, sbank = 0; +	unsigned long i;  	memset(vp_bitmap, 0,  	       KVM_HV_MAX_SPARSE_VCPU_SET_BITS * sizeof(*vp_bitmap)); @@ -1863,7 +1864,7 @@ static void kvm_send_ipi_to_many(struct kvm *kvm, u32 vector,  		.vector = vector  	};  	struct kvm_vcpu *vcpu; -	int i; +	unsigned long i;  	kvm_for_each_vcpu(i, vcpu, kvm) {  		if (vcpu_bitmap && !test_bit(i, vcpu_bitmap)) @@ -1922,11 +1923,13 @@ static u64 kvm_hv_send_ipi(struct kvm_vcpu *vcpu, struct kvm_hv_hcall *hc, bool  		all_cpus = send_ipi_ex.vp_set.format == HV_GENERIC_SET_ALL; +		if (all_cpus) +			goto check_and_send_ipi; +  		if (!sparse_banks_len)  			goto ret_success; -		if (!all_cpus && -		    kvm_read_guest(kvm, +		if (kvm_read_guest(kvm,  				   hc->ingpa + offsetof(struct hv_send_ipi_ex,  							vp_set.bank_contents),  				   sparse_banks, @@ -1934,6 +1937,7 @@ static u64 kvm_hv_send_ipi(struct kvm_vcpu *vcpu, struct kvm_hv_hcall *hc, bool  			return HV_STATUS_INVALID_HYPERCALL_INPUT;  	} +check_and_send_ipi:  	if ((vector < HV_IPI_LOW_VECTOR) || (vector > HV_IPI_HIGH_VECTOR))  		return HV_STATUS_INVALID_HYPERCALL_INPUT; @@ -2516,6 +2520,8 @@ int kvm_get_hv_cpuid(struct kvm_vcpu *vcpu, struct kvm_cpuid2 *cpuid,  		case HYPERV_CPUID_NESTED_FEATURES:  			ent->eax = evmcs_ver; +			if (evmcs_ver) +				ent->eax |= HV_X64_NESTED_MSR_BITMAP;  			break;  |