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 */ /* mask -> umask */
if ((last & IOAPIC_RTE_INTMASK) && if ((last & IOAPIC_RTE_INTMASK) &&
((new & IOAPIC_RTE_INTMASK) == 0)) { ((new & IOAPIC_RTE_INTMASK) == 0)) {
if ((vioapic->vm->vpic_wire_mode if ((vioapic->vm->vpic_wire_mode ==
== VPIC_WIRE_NULL) || VPIC_WIRE_NULL) ||
(vioapic->vm->vpic_wire_mode (vioapic->vm->vpic_wire_mode ==
== VPIC_WIRE_INTR)) { VPIC_WIRE_INTR)) {
atomic_set_int( vioapic->vm->vpic_wire_mode =
&vioapic->vm->vpic_wire_mode, VPIC_WIRE_IOAPIC;
VPIC_WIRE_IOAPIC);
dev_dbg(ACRN_DBG_IOAPIC, dev_dbg(ACRN_DBG_IOAPIC,
"vpic wire mode -> IOAPIC"); "vpic wire mode -> IOAPIC");
} else { } else {
@ -347,11 +346,10 @@ vioapic_write(struct vioapic *vioapic, uint32_t addr, uint32_t data)
/* unmask -> mask */ /* unmask -> mask */
} else if (((last & IOAPIC_RTE_INTMASK) == 0) && } else if (((last & IOAPIC_RTE_INTMASK) == 0) &&
(new & IOAPIC_RTE_INTMASK)) { (new & IOAPIC_RTE_INTMASK)) {
if (vioapic->vm->vpic_wire_mode if (vioapic->vm->vpic_wire_mode ==
== VPIC_WIRE_IOAPIC) { VPIC_WIRE_IOAPIC) {
atomic_set_int( vioapic->vm->vpic_wire_mode =
&vioapic->vm->vpic_wire_mode, VPIC_WIRE_INTR;
VPIC_WIRE_INTR);
dev_dbg(ACRN_DBG_IOAPIC, dev_dbg(ACRN_DBG_IOAPIC,
"vpic wire mode -> INTR"); "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 ((last & APIC_LVT_M) && ((val & APIC_LVT_M) == 0)) {
if (vlapic->vm->vpic_wire_mode == VPIC_WIRE_INTR || if (vlapic->vm->vpic_wire_mode == VPIC_WIRE_INTR ||
vlapic->vm->vpic_wire_mode == VPIC_WIRE_NULL) { vlapic->vm->vpic_wire_mode == VPIC_WIRE_NULL) {
atomic_set_int(&vlapic->vm->vpic_wire_mode, vlapic->vm->vpic_wire_mode = VPIC_WIRE_LAPIC;
VPIC_WIRE_LAPIC);
dev_dbg(ACRN_DBG_LAPIC, dev_dbg(ACRN_DBG_LAPIC,
"vpic wire mode -> LAPIC"); "vpic wire mode -> LAPIC");
} else { } else {
@ -539,8 +538,7 @@ vlapic_lvt_write_handler(struct vlapic *vlapic, uint32_t offset)
/* unmask -> mask: only from the vlapic LINT0-ExtINT enabled */ /* unmask -> mask: only from the vlapic LINT0-ExtINT enabled */
} else if (((last & APIC_LVT_M) == 0) && (val & APIC_LVT_M)) { } else if (((last & APIC_LVT_M) == 0) && (val & APIC_LVT_M)) {
if (vlapic->vm->vpic_wire_mode == VPIC_WIRE_LAPIC) { if (vlapic->vm->vpic_wire_mode == VPIC_WIRE_LAPIC) {
atomic_set_int(&vlapic->vm->vpic_wire_mode, vlapic->vm->vpic_wire_mode = VPIC_WIRE_NULL;
VPIC_WIRE_NULL);
dev_dbg(ACRN_DBG_LAPIC, dev_dbg(ACRN_DBG_LAPIC,
"vpic wire mode -> NULL"); "vpic wire mode -> NULL");
} }
@ -1174,8 +1172,7 @@ vlapic_svr_write_handler(struct vlapic *vlapic)
vlapic_mask_lvts(vlapic); vlapic_mask_lvts(vlapic);
/* the only one enabled LINT0-ExtINT vlapic disabled */ /* the only one enabled LINT0-ExtINT vlapic disabled */
if (vlapic->vm->vpic_wire_mode == VPIC_WIRE_NULL) { if (vlapic->vm->vpic_wire_mode == VPIC_WIRE_NULL) {
atomic_set_int(&vlapic->vm->vpic_wire_mode, vlapic->vm->vpic_wire_mode = VPIC_WIRE_INTR;
VPIC_WIRE_INTR);
dev_dbg(ACRN_DBG_LAPIC, dev_dbg(ACRN_DBG_LAPIC,
"vpic wire mode -> INTR"); "vpic wire mode -> INTR");
} }

View File

@ -161,10 +161,10 @@ static int uart16550_init(struct tgt_uart *tgt_uart)
status = -ENODEV; status = -ENODEV;
} else { } else {
if (strcmp(tgt_uart->uart_id, "STDIO") == 0) { 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 { } else {
/* set open count to 1 to prevent open */ /* 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; status = -EINVAL;
} }
} }