lkml.org 
[lkml]   [2015]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH 4.3 090/125] KVM: s390: fix wrong lookup of VCPUs by array index
From
Date
On 12/07/2015 04:01 PM, Greg Kroah-Hartman wrote:
> 4.3-stable review patch. If anyone has any objections, please let me know.
>
> ------------------
>
> From: David Hildenbrand <dahi@linux.vnet.ibm.com>
>
> commit 152e9f65d66f0a3891efc3869440becc0e7ff53f upstream.

Greg,

That commit has a dependency, the patch description has
Cc: stable@vger.kernel.org # db27a7a KVM: Provide function for VCPU lookup b
but db27a7a is not in 4.1 4.2 and 4.3 stable queue

Without that commit 4.1, 4.2 and 4.3 fail to build

Is the syntax for a dependency wrong?




>
> For now, VCPUs were always created sequentially with incrementing
> VCPU ids. Therefore, the index in the VCPUs array matched the id.
>
> As sequential creation might change with cpu hotplug, let's use
> the correct lookup function to find a VCPU by id, not array index.
>
> Let's also use kvm_lookup_vcpu() for validation of the sending VCPU
> on external call injection.
>
> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
> Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>
> ---
> arch/s390/kvm/interrupt.c | 3 +--
> arch/s390/kvm/sigp.c | 8 ++------
> 2 files changed, 3 insertions(+), 8 deletions(-)
>
> --- a/arch/s390/kvm/interrupt.c
> +++ b/arch/s390/kvm/interrupt.c
> @@ -1057,8 +1057,7 @@ static int __inject_extcall(struct kvm_v
> src_id, 0);
>
> /* sending vcpu invalid */
> - if (src_id >= KVM_MAX_VCPUS ||
> - kvm_get_vcpu(vcpu->kvm, src_id) == NULL)
> + if (kvm_get_vcpu_by_id(vcpu->kvm, src_id) == NULL)
> return -EINVAL;
>
> if (sclp.has_sigpif)
> --- a/arch/s390/kvm/sigp.c
> +++ b/arch/s390/kvm/sigp.c
> @@ -291,12 +291,8 @@ static int handle_sigp_dst(struct kvm_vc
> u16 cpu_addr, u32 parameter, u64 *status_reg)
> {
> int rc;
> - struct kvm_vcpu *dst_vcpu;
> + struct kvm_vcpu *dst_vcpu = kvm_get_vcpu_by_id(vcpu->kvm, cpu_addr);
>
> - if (cpu_addr >= KVM_MAX_VCPUS)
> - return SIGP_CC_NOT_OPERATIONAL;
> -
> - dst_vcpu = kvm_get_vcpu(vcpu->kvm, cpu_addr);
> if (!dst_vcpu)
> return SIGP_CC_NOT_OPERATIONAL;
>
> @@ -478,7 +474,7 @@ int kvm_s390_handle_sigp_pei(struct kvm_
> trace_kvm_s390_handle_sigp_pei(vcpu, order_code, cpu_addr);
>
> if (order_code == SIGP_EXTERNAL_CALL) {
> - dest_vcpu = kvm_get_vcpu(vcpu->kvm, cpu_addr);
> + dest_vcpu = kvm_get_vcpu_by_id(vcpu->kvm, cpu_addr);
> BUG_ON(dest_vcpu == NULL);
>
> kvm_s390_vcpu_wakeup(dest_vcpu);
>
>



\
 
 \ /
  Last update: 2015-12-07 23:21    [W:0.308 / U:0.256 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site