| 1254 | #define PMAP_INVLPG_THRESHOLD (4 * 1024 * PAGE_SIZE) |
| 1255 | |
| 1256 | static void |
| 1257 | pmap_invalidate_range_int(pmap_t pmap, vm_offset_t sva, vm_offset_t eva) |
| 1258 | { |
| 1259 | cpuset_t *mask, other_cpus; |
| 1260 | vm_offset_t addr; |
| 1261 | u_int cpuid; |
| 1262 | |
| 1263 | if (eva - sva >= PMAP_INVLPG_THRESHOLD) { |
| 1264 | pmap_invalidate_all_int(pmap); |
| 1265 | return; |
| 1266 | } |
| 1267 | |
| 1268 | sched_pin(); |
| 1269 | if (pmap == kernel_pmap) { |
| 1270 | for (addr = sva; addr < eva; addr += PAGE_SIZE) |
| 1271 | invlpg(addr); |
| 1272 | mask = &all_cpus; |
| 1273 | } else if (!CPU_CMP(&pmap->pm_active, &all_cpus)) { |
| 1274 | mask = &all_cpus; |
| 1275 | } else { |
| 1276 | cpuid = PCPU_GET(cpuid); |
| 1277 | other_cpus = all_cpus; |
| 1278 | CPU_CLR(cpuid, &other_cpus); |
| 1279 | CPU_AND(&other_cpus, &pmap->pm_active); |
| 1280 | mask = &other_cpus; |
| 1281 | } |
| 1282 | smp_masked_invlpg_range(*mask, sva, eva, pmap, pmap_curcpu_cb_dummy); |
| 1283 | sched_unpin(); |
| 1284 | } |
| 1285 | |
| 1286 | static void |
| 1287 | pmap_invalidate_all_int(pmap_t pmap) |
no test coverage detected