The lock must be grabbed before iterating on the global array, ok?

Index: uvm/uvm_pager.c
===================================================================
RCS file: /cvs/src/sys/uvm/uvm_pager.c,v
retrieving revision 1.88
diff -u -p -r1.88 uvm_pager.c
--- uvm/uvm_pager.c     15 Aug 2022 03:21:04 -0000      1.88
+++ uvm/uvm_pager.c     18 Aug 2022 10:31:16 -0000
@@ -209,6 +209,7 @@ uvm_pseg_release(vaddr_t segaddr)
        struct uvm_pseg *pseg;
        vaddr_t va = 0;
 
+       mtx_enter(&uvm_pseg_lck);
        for (pseg = &psegs[0]; pseg != &psegs[PSEG_NUMSEGS]; pseg++) {
                if (pseg->start <= segaddr &&
                    segaddr < pseg->start + MAX_PAGER_SEGS * MAXBSIZE)
@@ -222,7 +223,6 @@ uvm_pseg_release(vaddr_t segaddr)
        /* test for no remainder */
        KDASSERT(segaddr == pseg->start + id * MAXBSIZE);
 
-       mtx_enter(&uvm_pseg_lck);
 
        KASSERT(UVM_PSEG_INUSE(pseg, id));
 

Reply via email to