Index: arm64/arm64/pmap.c =================================================================== --- arm64/arm64/pmap.c +++ arm64/arm64/pmap.c @@ -5810,13 +5810,21 @@ case ISS_DATA_DFSC_TF_L1: case ISS_DATA_DFSC_TF_L2: case ISS_DATA_DFSC_TF_L3: + if (pmap == kernel_pmap) { + /* + * The translation fault may have occurred within a + * critical section. Therefore, we must determine if + * the address was invalid due to a break-before-make + * sequence without acquiring the pmap lock. + */ + if (pmap_kextract(far) != 0) + rv = KERN_SUCCESS; + break; + } PMAP_LOCK(pmap); /* Ask the MMU to check the address */ intr = intr_disable(); - if (pmap == kernel_pmap) - par = arm64_address_translate_s1e1r(far); - else - par = arm64_address_translate_s1e0r(far); + par = arm64_address_translate_s1e0r(far); intr_restore(intr); PMAP_UNLOCK(pmap);