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>
This commit is contained in:
Li, Fei1 2018-05-16 15:49:09 +08:00 committed by lijinxia
parent 0a83cf462d
commit bd3f3b00f7
3 changed files with 15 additions and 20 deletions

View File

@ -331,13 +331,12 @@ vioapic_write(struct vioapic *vioapic, uint32_t addr, uint32_t data)
/* mask -> umask */
if ((last & IOAPIC_RTE_INTMASK) &&
((new & IOAPIC_RTE_INTMASK) == 0)) {
if ((vioapic->vm->vpic_wire_mode
== VPIC_WIRE_NULL) ||
(vioapic->vm->vpic_wire_mode
== VPIC_WIRE_INTR)) {
atomic_set_int(
&vioapic->vm->vpic_wire_mode,
VPIC_WIRE_IOAPIC);
if ((vioapic->vm->vpic_wire_mode ==
VPIC_WIRE_NULL) ||
(vioapic->vm->vpic_wire_mode ==
VPIC_WIRE_INTR)) {
vioapic->vm->vpic_wire_mode =
VPIC_WIRE_IOAPIC;
dev_dbg(ACRN_DBG_IOAPIC,
"vpic wire mode -> IOAPIC");
} else {
@ -347,11 +346,10 @@ vioapic_write(struct vioapic *vioapic, uint32_t addr, uint32_t data)
/* unmask -> mask */
} else if (((last & IOAPIC_RTE_INTMASK) == 0) &&
(new & IOAPIC_RTE_INTMASK)) {
if (vioapic->vm->vpic_wire_mode
== VPIC_WIRE_IOAPIC) {
atomic_set_int(
&vioapic->vm->vpic_wire_mode,
VPIC_WIRE_INTR);
if (vioapic->vm->vpic_wire_mode ==
VPIC_WIRE_IOAPIC) {
vioapic->vm->vpic_wire_mode =
VPIC_WIRE_INTR;
dev_dbg(ACRN_DBG_IOAPIC,
"vpic wire mode -> INTR");
}

View File

@ -528,8 +528,7 @@ vlapic_lvt_write_handler(struct vlapic *vlapic, uint32_t offset)
if ((last & APIC_LVT_M) && ((val & APIC_LVT_M) == 0)) {
if (vlapic->vm->vpic_wire_mode == VPIC_WIRE_INTR ||
vlapic->vm->vpic_wire_mode == VPIC_WIRE_NULL) {
atomic_set_int(&vlapic->vm->vpic_wire_mode,
VPIC_WIRE_LAPIC);
vlapic->vm->vpic_wire_mode = VPIC_WIRE_LAPIC;
dev_dbg(ACRN_DBG_LAPIC,
"vpic wire mode -> LAPIC");
} else {
@ -539,8 +538,7 @@ vlapic_lvt_write_handler(struct vlapic *vlapic, uint32_t offset)
/* unmask -> mask: only from the vlapic LINT0-ExtINT enabled */
} else if (((last & APIC_LVT_M) == 0) && (val & APIC_LVT_M)) {
if (vlapic->vm->vpic_wire_mode == VPIC_WIRE_LAPIC) {
atomic_set_int(&vlapic->vm->vpic_wire_mode,
VPIC_WIRE_NULL);
vlapic->vm->vpic_wire_mode = VPIC_WIRE_NULL;
dev_dbg(ACRN_DBG_LAPIC,
"vpic wire mode -> NULL");
}
@ -1174,8 +1172,7 @@ vlapic_svr_write_handler(struct vlapic *vlapic)
vlapic_mask_lvts(vlapic);
/* the only one enabled LINT0-ExtINT vlapic disabled */
if (vlapic->vm->vpic_wire_mode == VPIC_WIRE_NULL) {
atomic_set_int(&vlapic->vm->vpic_wire_mode,
VPIC_WIRE_INTR);
vlapic->vm->vpic_wire_mode = VPIC_WIRE_INTR;
dev_dbg(ACRN_DBG_LAPIC,
"vpic wire mode -> INTR");
}

View File

@ -161,10 +161,10 @@ static int uart16550_init(struct tgt_uart *tgt_uart)
status = -ENODEV;
} else {
if (strcmp(tgt_uart->uart_id, "STDIO") == 0) {
atomic_set_int(&tgt_uart->open_count, 0);
atomic_store_rel_int(&tgt_uart->open_count, 0);
} else {
/* set open count to 1 to prevent open */
atomic_set_int(&tgt_uart->open_count, 1);
atomic_store_rel_int(&tgt_uart->open_count, 1);
status = -EINVAL;
}
}