diff --git a/sys/platform/pc64/x86_64/pmap.c b/sys/platform/pc64/x86_64/pmap.c --- a/sys/platform/pc64/x86_64/pmap.c +++ b/sys/platform/pc64/x86_64/pmap.c @@ -6277,9 +6277,12 @@ pd += (va - DMAP_MIN_ADDRESS) >> PDRSHIFT; while ((long)count > 0) { - *pd = - (*pd & ~(pd_entry_t)(kernel_pmap->pmap_cache_mask_pde)) | - kernel_pmap->pmap_cache_bits_pde[mode]; + pd_entry_t opt, npt; + do { + opt = *pd; + npt = (opt & ~(pd_entry_t)(kernel_pmap->pmap_cache_mask_pde)) | + kernel_pmap->pmap_cache_bits_pde[mode]; + } while (atomic_cmpset_long(pd, opt, npt) == 0); count -= NBPDR / PAGE_SIZE; va += NBPDR; ++pd;