On Thu, Aug 18, 2022 at 12:39:58PM +0200, Martin Pieuchot wrote:
> 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));
>
>
ok mlarkin