]> xenbits.xensource.com Git - people/aperard/xen-unstable.git/commitdiff
x86/physdev: Return pirq that irq was already mapped to
authorJiqian Chen <Jiqian.Chen@amd.com>
Mon, 8 Jul 2024 08:04:56 +0000 (16:04 +0800)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Mon, 8 Jul 2024 13:46:12 +0000 (14:46 +0100)
Fix bug introduced by 0762e2502f1f ("x86/physdev: factor out the code to allocate and
map a pirq"). After that re-factoring, when pirq<0 and current_pirq>0, it means
caller want to allocate a free pirq for irq but irq already has a mapped pirq, then
it returns the negative pirq, so it fails. However, the logic before that
re-factoring is different, it should return the current_pirq that irq was already
mapped to and make the call success.

Fixes: 0762e2502f1f ("x86/physdev: factor out the code to allocate and map a pirq")
Signed-off-by: Jiqian Chen <Jiqian.Chen@amd.com>
Signed-off-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Jiqian Chen <Jiqian.Chen@amd.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Release-Acked-By: Oleksii Kurochko <oleksii.kurochko@gmail.com>
xen/arch/x86/irq.c

index 017a94e31155488f29162b7d8327b171a456d9f2..47477d88171bd56df939ed7ad601b0a037e2da02 100644 (file)
@@ -2898,6 +2898,7 @@ static int allocate_pirq(struct domain *d, int index, int pirq, int irq,
                     d->domain_id, index, pirq, current_pirq);
             if ( current_pirq < 0 )
                 return -EBUSY;
+            pirq = current_pirq;
         }
         else if ( type == MAP_PIRQ_TYPE_MULTI_MSI )
         {