On 19/09/2016 08:11, Colin King wrote:
> From: Colin Ian King <colin.k...@canonical.com>
> 
> vm_data->avic_vm_id is a u32, so the check for a error
> return (less than zero) such as -EAGAIN from
> avic_get_next_vm_id currently has no effect whatsoever.
> Fix this by using a temporary int for the comparison
> and assign vm_data->avic_vm_id to this. I used an explicit
> u32 cast in the assignment to show why vm_data->avic_vm_id
> cannot be used in the assign/compare steps.
> 
> Signed-off-by: Colin Ian King <colin.k...@canonical.com>
> ---
>  arch/x86/kvm/svm.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
> index 1b66c5a..2ca66aa 100644
> --- a/arch/x86/kvm/svm.c
> +++ b/arch/x86/kvm/svm.c
> @@ -1419,7 +1419,7 @@ static void avic_vm_destroy(struct kvm *kvm)
>  static int avic_vm_init(struct kvm *kvm)
>  {
>       unsigned long flags;
> -     int err = -ENOMEM;
> +     int vm_id, err = -ENOMEM;
>       struct kvm_arch *vm_data = &kvm->arch;
>       struct page *p_page;
>       struct page *l_page;
> @@ -1427,9 +1427,10 @@ static int avic_vm_init(struct kvm *kvm)
>       if (!avic)
>               return 0;
>  
> -     vm_data->avic_vm_id = avic_get_next_vm_id();
> -     if (vm_data->avic_vm_id < 0)
> -             return vm_data->avic_vm_id;
> +     vm_id = avic_get_next_vm_id();
> +     if (vm_id < 0)
> +             return vm_id;
> +     vm_data->avic_vm_id = (u32)vm_id;
>  
>       /* Allocating physical APIC ID table (4KB) */
>       p_page = alloc_page(GFP_KERNEL);
> 

Applying the patch, thanks.

Paolo

Reply via email to