diff --git a/sys/arch/mips/include/cpu.h b/sys/arch/mips/include/cpu.h index f3c07a934224..fa3d57039561 100644 --- a/sys/arch/mips/include/cpu.h +++ b/sys/arch/mips/include/cpu.h @@ -151,6 +151,7 @@ struct cpu_info { #define CPUF_RUNNING 0x04 /* CPU is running */ #define CPUF_PAUSED 0x08 /* CPU is paused */ #define CPUF_USERPMAP 0x20 /* CPU has a user pmap activated */ + kcpuset_t *ci_shootdowncpus; kcpuset_t *ci_multicastcpus; kcpuset_t *ci_watchcpus; kcpuset_t *ci_ddbcpus; diff --git a/sys/arch/mips/include/types.h b/sys/arch/mips/include/types.h index 5884ca6cc4bd..8c69a800f747 100644 --- a/sys/arch/mips/include/types.h +++ b/sys/arch/mips/include/types.h @@ -146,7 +146,9 @@ typedef __uint32_t tlb_asid_t; #define __SIMPLELOCK_LOCKED 1 #define __SIMPLELOCK_UNLOCKED 0 +#if 0 #define __HAVE_FAST_SOFTINTS +#endif #define __HAVE_SYSCALL_INTERN #define __HAVE_CPU_LWP_SETPRIVATE #define __HAVE_CPU_DATA_FIRST diff --git a/sys/arch/mips/mips/cpu_subr.c b/sys/arch/mips/mips/cpu_subr.c index 5ac1c70236d4..830820f37fb8 100644 --- a/sys/arch/mips/mips/cpu_subr.c +++ b/sys/arch/mips/mips/cpu_subr.c @@ -291,6 +291,7 @@ cpu_attach_common(device_t self, struct cpu_info *ci) */ ipi_init(ci); + kcpuset_create(&ci->ci_shootdowncpus, true); kcpuset_create(&ci->ci_multicastcpus, true); kcpuset_create(&ci->ci_watchcpus, true); kcpuset_create(&ci->ci_ddbcpus, true); diff --git a/sys/uvm/pmap/pmap_tlb.c b/sys/uvm/pmap/pmap_tlb.c index 58c2fb50b1c8..ce70c8bc7e62 100644 --- a/sys/uvm/pmap/pmap_tlb.c +++ b/sys/uvm/pmap/pmap_tlb.c @@ -643,8 +643,9 @@ pmap_tlb_shootdown_bystanders(pmap_t pm) UVMHIST_FUNC(__func__); UVMHIST_CALLARGS(maphist, "pm %#jx", (uintptr_t)pm, 0, 0, 0); - kcpuset_t *pm_active; - kcpuset_clone(&pm_active, pm->pm_active); + const struct cpu_info * const ci = curcpu(); + kcpuset_t *pm_active = ci->ci_shootdowncpus; + kcpuset_copy(pm_active, pm->pm_active); kcpuset_remove(pm_active, cpu_tlb_info(curcpu())->ti_kcpuset); const bool kernel_p = (pm == pmap_kernel()); bool ipi_sent = false; @@ -719,8 +720,6 @@ pmap_tlb_shootdown_bystanders(pmap_t pm) TLBINFO_UNLOCK(ti); } - kcpuset_destroy(pm_active); - UVMHIST_LOG(maphist, " <-- done (ipi_sent=%jd)", ipi_sent, 0, 0, 0); return ipi_sent;