git: 1fdb01ec5fdd - main - riscv vmm: fix remote fence.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 03 Feb 2025 11:51:55 UTC
The branch main has been updated by br:
URL: https://cgit.FreeBSD.org/src/commit/?id=1fdb01ec5fdd23d3f6d7d743d1f438915ded40d4
commit 1fdb01ec5fdd23d3f6d7d743d1f438915ded40d4
Author: Ruslan Bukin <br@FreeBSD.org>
AuthorDate: 2025-02-03 11:45:29 +0000
Commit: Ruslan Bukin <br@FreeBSD.org>
CommitDate: 2025-02-03 11:45:32 +0000
riscv vmm: fix remote fence.
From the spec:
The remote fence function acts as a full TLB flush if
• start_addr and size are both 0
• size is equal to 2^XLEN-1
Differential Revision: https://reviews.freebsd.org/D48716
---
sys/riscv/vmm/vmm_fence.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/sys/riscv/vmm/vmm_fence.c b/sys/riscv/vmm/vmm_fence.c
index 6bba3f4b5dfe..f8b69aac77a9 100644
--- a/sys/riscv/vmm/vmm_fence.c
+++ b/sys/riscv/vmm/vmm_fence.c
@@ -103,7 +103,8 @@ vmm_fence_process_one(struct vmm_fence *fence)
sfence_vma_page(va);
break;
case VMM_RISCV_FENCE_VMA_ASID:
- if (fence->start == 0 && fence->size == 0)
+ if ((fence->start == 0 && fence->size == 0) ||
+ fence->size == -1)
sfence_vma_asid(fence->asid);
else
for (va = fence->start; va < fence->start + fence->size;
@@ -165,7 +166,8 @@ vmm_fence_add(struct vm *vm, cpuset_t *cpus, struct vmm_fence *fence)
atomic_set_32(&hypctx->fence_req, FENCE_REQ_I);
break;
case VMM_RISCV_FENCE_VMA:
- if (fence->start == 0 && fence->size == 0)
+ if ((fence->start == 0 && fence->size == 0) ||
+ fence->size == -1)
atomic_set_32(&hypctx->fence_req,
FENCE_REQ_VMA);
else