diff options
Diffstat (limited to '0054-x86-physdev-Return-pirq-that-irq-was-already-mapped-.patch')
-rw-r--r-- | 0054-x86-physdev-Return-pirq-that-irq-was-already-mapped-.patch | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/0054-x86-physdev-Return-pirq-that-irq-was-already-mapped-.patch b/0054-x86-physdev-Return-pirq-that-irq-was-already-mapped-.patch new file mode 100644 index 0000000..5e245f9 --- /dev/null +++ b/0054-x86-physdev-Return-pirq-that-irq-was-already-mapped-.patch @@ -0,0 +1,38 @@ +From f9f3062f11e144438fac9e9da6aa4cb41a6009b1 Mon Sep 17 00:00:00 2001 +From: Jiqian Chen <Jiqian.Chen@amd.com> +Date: Thu, 25 Jul 2024 16:20:17 +0200 +Subject: [PATCH 54/56] x86/physdev: Return pirq that irq was already mapped to + +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> +master commit: 0d2b87b5adfc19e87e9027d996db204c66a47f30 +master date: 2024-07-08 14:46:12 +0100 +--- + 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 5dae8bd1b9..6b1f338eae 100644 +--- a/xen/arch/x86/irq.c ++++ b/xen/arch/x86/irq.c +@@ -2914,6 +2914,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.45.2 + |