mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-07-30 15:06:49 +00:00
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:
parent
0a83cf462d
commit
bd3f3b00f7
@ -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");
|
||||
}
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user