Skip to content

Commit bd3f3b0

Browse files
lifeixlijinxia
authored andcommitted
hv: fix incorrect use of atomic_set_xxx
1. vpic_wire_mode no need to atomically set its value. 2. uart open conut want to atomically set its value not atomically set its bits. Signed-off-by: Li, Fei1 <fei1.li@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
1 parent 0a83cf4 commit bd3f3b0

File tree

3 files changed

+15
-20
lines changed

3 files changed

+15
-20
lines changed

hypervisor/arch/x86/guest/vioapic.c

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -331,13 +331,12 @@ vioapic_write(struct vioapic *vioapic, uint32_t addr, uint32_t data)
331331
/* mask -> umask */
332332
if ((last & IOAPIC_RTE_INTMASK) &&
333333
((new & IOAPIC_RTE_INTMASK) == 0)) {
334-
if ((vioapic->vm->vpic_wire_mode
335-
== VPIC_WIRE_NULL) ||
336-
(vioapic->vm->vpic_wire_mode
337-
== VPIC_WIRE_INTR)) {
338-
atomic_set_int(
339-
&vioapic->vm->vpic_wire_mode,
340-
VPIC_WIRE_IOAPIC);
334+
if ((vioapic->vm->vpic_wire_mode ==
335+
VPIC_WIRE_NULL) ||
336+
(vioapic->vm->vpic_wire_mode ==
337+
VPIC_WIRE_INTR)) {
338+
vioapic->vm->vpic_wire_mode =
339+
VPIC_WIRE_IOAPIC;
341340
dev_dbg(ACRN_DBG_IOAPIC,
342341
"vpic wire mode -> IOAPIC");
343342
} else {
@@ -347,11 +346,10 @@ vioapic_write(struct vioapic *vioapic, uint32_t addr, uint32_t data)
347346
/* unmask -> mask */
348347
} else if (((last & IOAPIC_RTE_INTMASK) == 0) &&
349348
(new & IOAPIC_RTE_INTMASK)) {
350-
if (vioapic->vm->vpic_wire_mode
351-
== VPIC_WIRE_IOAPIC) {
352-
atomic_set_int(
353-
&vioapic->vm->vpic_wire_mode,
354-
VPIC_WIRE_INTR);
349+
if (vioapic->vm->vpic_wire_mode ==
350+
VPIC_WIRE_IOAPIC) {
351+
vioapic->vm->vpic_wire_mode =
352+
VPIC_WIRE_INTR;
355353
dev_dbg(ACRN_DBG_IOAPIC,
356354
"vpic wire mode -> INTR");
357355
}

hypervisor/arch/x86/guest/vlapic.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -528,8 +528,7 @@ vlapic_lvt_write_handler(struct vlapic *vlapic, uint32_t offset)
528528
if ((last & APIC_LVT_M) && ((val & APIC_LVT_M) == 0)) {
529529
if (vlapic->vm->vpic_wire_mode == VPIC_WIRE_INTR ||
530530
vlapic->vm->vpic_wire_mode == VPIC_WIRE_NULL) {
531-
atomic_set_int(&vlapic->vm->vpic_wire_mode,
532-
VPIC_WIRE_LAPIC);
531+
vlapic->vm->vpic_wire_mode = VPIC_WIRE_LAPIC;
533532
dev_dbg(ACRN_DBG_LAPIC,
534533
"vpic wire mode -> LAPIC");
535534
} else {
@@ -539,8 +538,7 @@ vlapic_lvt_write_handler(struct vlapic *vlapic, uint32_t offset)
539538
/* unmask -> mask: only from the vlapic LINT0-ExtINT enabled */
540539
} else if (((last & APIC_LVT_M) == 0) && (val & APIC_LVT_M)) {
541540
if (vlapic->vm->vpic_wire_mode == VPIC_WIRE_LAPIC) {
542-
atomic_set_int(&vlapic->vm->vpic_wire_mode,
543-
VPIC_WIRE_NULL);
541+
vlapic->vm->vpic_wire_mode = VPIC_WIRE_NULL;
544542
dev_dbg(ACRN_DBG_LAPIC,
545543
"vpic wire mode -> NULL");
546544
}
@@ -1174,8 +1172,7 @@ vlapic_svr_write_handler(struct vlapic *vlapic)
11741172
vlapic_mask_lvts(vlapic);
11751173
/* the only one enabled LINT0-ExtINT vlapic disabled */
11761174
if (vlapic->vm->vpic_wire_mode == VPIC_WIRE_NULL) {
1177-
atomic_set_int(&vlapic->vm->vpic_wire_mode,
1178-
VPIC_WIRE_INTR);
1175+
vlapic->vm->vpic_wire_mode = VPIC_WIRE_INTR;
11791176
dev_dbg(ACRN_DBG_LAPIC,
11801177
"vpic wire mode -> INTR");
11811178
}

hypervisor/debug/uart16550.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,10 @@ static int uart16550_init(struct tgt_uart *tgt_uart)
161161
status = -ENODEV;
162162
} else {
163163
if (strcmp(tgt_uart->uart_id, "STDIO") == 0) {
164-
atomic_set_int(&tgt_uart->open_count, 0);
164+
atomic_store_rel_int(&tgt_uart->open_count, 0);
165165
} else {
166166
/* set open count to 1 to prevent open */
167-
atomic_set_int(&tgt_uart->open_count, 1);
167+
atomic_store_rel_int(&tgt_uart->open_count, 1);
168168
status = -EINVAL;
169169
}
170170
}

0 commit comments

Comments
 (0)