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 <[email protected]>
Signed-off-by: Huang Rui <[email protected]>
Signed-off-by: Jiqian Chen <[email protected]>
Reviewed-by: Jan Beulich <[email protected]>
---
xen/arch/x86/irq.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c
index 017a94e31155..47477d88171b 100644
--- a/xen/arch/x86/irq.c
+++ b/xen/arch/x86/irq.c
@@ -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 )
{
--
2.34.1