The branch main has been updated by br:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=1fdb01ec5fdd23d3f6d7d743d1f438915ded40d4

commit 1fdb01ec5fdd23d3f6d7d743d1f438915ded40d4
Author:     Ruslan Bukin <b...@freebsd.org>
AuthorDate: 2025-02-03 11:45:29 +0000
Commit:     Ruslan Bukin <b...@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

Reply via email to