forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
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);