kernel/arch/x86/kernel/apic/apic.c
.. .. @@ -410,10 +410,9 @@ 410 410 if (vector && !eilvt_entry_is_changeable(vector, new)) 411 411 /* may not change if vectors are different */ 412 412 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));415 414 416 - rsvd &= ~APIC_EILVT_MASKED;415 + rsvd = new & ~APIC_EILVT_MASKED;417 416 if (rsvd && rsvd != vector) 418 417 pr_info("LVT offset %d assigned for vector 0x%02x\n", 419 418 offset, rsvd);