Changeset View
Changeset View
Standalone View
Standalone View
sys/i386/i386/vm_machdep.c
Show First 20 Lines • Show All 598 Lines • ▼ Show 20 Lines | sf_buf_shootdown(struct sf_buf *sf, int flags) | ||||
cpuid = PCPU_GET(cpuid); | cpuid = PCPU_GET(cpuid); | ||||
if (!CPU_ISSET(cpuid, &sf->cpumask)) { | if (!CPU_ISSET(cpuid, &sf->cpumask)) { | ||||
CPU_SET(cpuid, &sf->cpumask); | CPU_SET(cpuid, &sf->cpumask); | ||||
invlpg(sf->kva); | invlpg(sf->kva); | ||||
} | } | ||||
if ((flags & SFB_CPUPRIVATE) == 0) { | if ((flags & SFB_CPUPRIVATE) == 0) { | ||||
other_cpus = all_cpus; | other_cpus = all_cpus; | ||||
CPU_CLR(cpuid, &other_cpus); | CPU_CLR(cpuid, &other_cpus); | ||||
CPU_ANDNOT(&other_cpus, &sf->cpumask); | CPU_ANDNOT(&other_cpus, &other_cpus, &sf->cpumask); | ||||
if (!CPU_EMPTY(&other_cpus)) { | if (!CPU_EMPTY(&other_cpus)) { | ||||
CPU_OR(&sf->cpumask, &other_cpus); | CPU_OR(&sf->cpumask, &sf->cpumask, &other_cpus); | ||||
smp_masked_invlpg(other_cpus, sf->kva, kernel_pmap, | smp_masked_invlpg(other_cpus, sf->kva, kernel_pmap, | ||||
sf_buf_shootdown_curcpu_cb); | sf_buf_shootdown_curcpu_cb); | ||||
} | } | ||||
} | } | ||||
sched_unpin(); | sched_unpin(); | ||||
} | } | ||||
#endif | #endif | ||||
▲ Show 20 Lines • Show All 70 Lines • Show Last 20 Lines |