Message ID | 20240708062554.399784-1-Jiqian.Chen@amd.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [for-4.19] x86/physdev: Return pirq that irq was already mapped to | expand |
On 08.07.2024 08:25, Jiqian Chen wrote: > Fix bug imported by 0762e2502f1f ("x86/physdev: factor out the code to allocate and Nit: Perhaps s/imported/introduced/ ? > 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>
diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c index 9a611c79e024..1a827ccc8498 100644 --- a/xen/arch/x86/irq.c +++ b/xen/arch/x86/irq.c @@ -2897,6 +2897,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 ) {