MCPcopy Create free account
hub / github.com/F-Stack/f-stack / pmap_invalidate_range_int

Function pmap_invalidate_range_int

freebsd/i386/i386/pmap.c:1256–1284  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1254#define PMAP_INVLPG_THRESHOLD (4 * 1024 * PAGE_SIZE)
1255
1256static void
1257pmap_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
1286static void
1287pmap_invalidate_all_int(pmap_t pmap)

Calls 5

pmap_invalidate_all_intFunction · 0.85
sched_pinFunction · 0.85
sched_unpinFunction · 0.85
smp_masked_invlpg_rangeFunction · 0.70
invlpgFunction · 0.50

Tested by

no test coverage detected