hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/arch/x86/kernel/apic/apic.c
....@@ -410,10 +410,9 @@
410410 if (vector && !eilvt_entry_is_changeable(vector, new))
411411 /* may not change if vectors are different */
412412 return rsvd;
413
- rsvd = atomic_cmpxchg(&eilvt_offsets[offset], rsvd, new);
414
- } while (rsvd != new);
413
+ } while (!atomic_try_cmpxchg(&eilvt_offsets[offset], &rsvd, new));
415414
416
- rsvd &= ~APIC_EILVT_MASKED;
415
+ rsvd = new & ~APIC_EILVT_MASKED;
417416 if (rsvd && rsvd != vector)
418417 pr_info("LVT offset %d assigned for vector 0x%02x\n",
419418 offset, rsvd);