summaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/apic/apic.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-08 04:17:39 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-08 04:17:39 +0000
commita51ea39b76ddbe91aa5ccf9f24762ef7c8b0d0cd (patch)
tree13f5692a56e72fd7da499f399ec0f91e68905c40 /arch/x86/kernel/apic/apic.c
parentAdding debian version 4.19.282-1. (diff)
downloadlinux-a51ea39b76ddbe91aa5ccf9f24762ef7c8b0d0cd.tar.xz
linux-a51ea39b76ddbe91aa5ccf9f24762ef7c8b0d0cd.zip
Merging upstream version 4.19.289.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'arch/x86/kernel/apic/apic.c')
-rw-r--r--arch/x86/kernel/apic/apic.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index 926939978..9318fe7d8 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -403,10 +403,9 @@ static unsigned int reserve_eilvt_offset(int offset, unsigned int new)
if (vector && !eilvt_entry_is_changeable(vector, new))
/* may not change if vectors are different */
return rsvd;
- rsvd = atomic_cmpxchg(&eilvt_offsets[offset], rsvd, new);
- } while (rsvd != new);
+ } while (!atomic_try_cmpxchg(&eilvt_offsets[offset], &rsvd, new));
- rsvd &= ~APIC_EILVT_MASKED;
+ rsvd = new & ~APIC_EILVT_MASKED;
if (rsvd && rsvd != vector)
pr_info("LVT offset %d assigned for vector 0x%02x\n",
offset, rsvd);