[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 10/23] RISC-V: Hold rcu_read_lock when accessing
From: |
Michael Clark |
Subject: |
[Qemu-devel] [PATCH v2 10/23] RISC-V: Hold rcu_read_lock when accessing memory |
Date: |
Fri, 9 Mar 2018 17:12:32 +1300 |
>From reading other code that accesses memory regions directly,
it appears that the rcu_read_lock needs to be held. Note: the
original code for accessing RAM directly was added because
there is no other way to use atomic_cmpxchg on guest physical
address space.
Cc: Sagar Karandikar <address@hidden>
Cc: Bastian Koppelmann <address@hidden>
CC: Stefan O'Rear <address@hidden>
Signed-off-by: Michael Clark <address@hidden>
Signed-off-by: Palmer Dabbelt <address@hidden>
---
target/riscv/helper.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/target/riscv/helper.c b/target/riscv/helper.c
index 02cbcea..228933c 100644
--- a/target/riscv/helper.c
+++ b/target/riscv/helper.c
@@ -209,6 +209,7 @@ restart:
as the PTE is no longer valid */
MemoryRegion *mr;
hwaddr l = sizeof(target_ulong), addr1;
+ rcu_read_lock();
mr = address_space_translate(cs->as, pte_addr,
&addr1, &l, false);
if (memory_access_is_direct(mr, true)) {
@@ -222,16 +223,19 @@ restart:
target_ulong old_pte =
atomic_cmpxchg(pte_pa, pte, updated_pte);
if (old_pte != pte) {
+ rcu_read_unlock();
goto restart;
} else {
pte = updated_pte;
}
#endif
} else {
+ rcu_read_unlock();
/* misconfigured PTE in ROM (AD bits are not preset) or
* PTE is in IO space and can't be updated atomically */
return TRANSLATE_FAIL;
}
+ rcu_read_unlock();
}
/* for superpage mappings, make a fake leaf PTE for the TLB's
--
2.7.0
- [Qemu-devel] [PATCH v2 02/23] RISC-V: Replace hardcoded constants with enum values, (continued)
- [Qemu-devel] [PATCH v2 02/23] RISC-V: Replace hardcoded constants with enum values, Michael Clark, 2018/03/08
- [Qemu-devel] [PATCH v2 04/23] RISC-V: Use ROM base address and size from memmap, Michael Clark, 2018/03/08
- [Qemu-devel] [PATCH v2 05/23] RISC-V: Remove identity_translate from load_elf, Michael Clark, 2018/03/08
- [Qemu-devel] [PATCH v2 03/23] RISC-V: Make virt board description match spike, Michael Clark, 2018/03/08
- [Qemu-devel] [PATCH v2 06/23] RISC-V: Mark ROM read-only after copying in code, Michael Clark, 2018/03/08
- [Qemu-devel] [PATCH v2 07/23] RISC-V: Remove unused class definitions, Michael Clark, 2018/03/08
- [Qemu-devel] [PATCH v2 08/23] RISC-V: Make sure rom has space for fdt, Michael Clark, 2018/03/08
- [Qemu-devel] [PATCH v2 09/23] RISC-V: Include intruction hex in disassembly, Michael Clark, 2018/03/08
- [Qemu-devel] [PATCH v2 10/23] RISC-V: Hold rcu_read_lock when accessing memory,
Michael Clark <=
- [Qemu-devel] [PATCH v2 11/23] RISC-V: Improve page table walker spec compliance, Michael Clark, 2018/03/08
- [Qemu-devel] [PATCH v2 12/23] RISC-V: Update E order and I extension order, Michael Clark, 2018/03/08
- [Qemu-devel] [PATCH v2 14/23] RISC-V: Make virt header comment title consistent, Michael Clark, 2018/03/08
- [Qemu-devel] [PATCH v2 13/23] RISC-V: Make some header guards more specific, Michael Clark, 2018/03/08
- [Qemu-devel] [PATCH v2 16/23] RISC-V: Remove EM_RISCV ELF_MACHINE indirection, Michael Clark, 2018/03/08
- [Qemu-devel] [PATCH v2 15/23] RISC-V: Use memory_region_is_ram in pte update, Michael Clark, 2018/03/08