kvm: svm: fix unsigned compare less than zero comparison
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.king@canonical.com> Acked-by: Joerg Roedel <jroedel@suse.de> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
095cf55df7
commit
adad0d02a7
@ -1412,7 +1412,7 @@ static void avic_vm_destroy(struct kvm *kvm)
|
|||||||
static int avic_vm_init(struct kvm *kvm)
|
static int avic_vm_init(struct kvm *kvm)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int err = -ENOMEM;
|
int vm_id, err = -ENOMEM;
|
||||||
struct kvm_arch *vm_data = &kvm->arch;
|
struct kvm_arch *vm_data = &kvm->arch;
|
||||||
struct page *p_page;
|
struct page *p_page;
|
||||||
struct page *l_page;
|
struct page *l_page;
|
||||||
@ -1420,9 +1420,10 @@ static int avic_vm_init(struct kvm *kvm)
|
|||||||
if (!avic)
|
if (!avic)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
vm_data->avic_vm_id = avic_get_next_vm_id();
|
vm_id = avic_get_next_vm_id();
|
||||||
if (vm_data->avic_vm_id < 0)
|
if (vm_id < 0)
|
||||||
return vm_data->avic_vm_id;
|
return vm_id;
|
||||||
|
vm_data->avic_vm_id = (u32)vm_id;
|
||||||
|
|
||||||
/* Allocating physical APIC ID table (4KB) */
|
/* Allocating physical APIC ID table (4KB) */
|
||||||
p_page = alloc_page(GFP_KERNEL);
|
p_page = alloc_page(GFP_KERNEL);
|
||||||
|
Loading…
Reference in New Issue
Block a user