From: hshoexer Subject: retire wbinvd_on_all_cpus_acked() To: tech@openbsd.org Date: Tue, 11 Nov 2025 13:45:11 +0100 Hi, having replaced wbinvd_on_all_cpus_acked() with cpu_xcall(9) in psp(4), that function can be retired now. ok? Take care, HJ. --------- diff --git a/sys/arch/amd64/amd64/cpu.c b/sys/arch/amd64/amd64/cpu.c index 8ac783d7b9c..1052c7d9407 100644 --- a/sys/arch/amd64/amd64/cpu.c +++ b/sys/arch/amd64/amd64/cpu.c @@ -1479,46 +1479,6 @@ wbinvd_on_all_cpus(void) wbinvd(); return 0; } - -volatile long wbinvd_wait __attribute__((section(".kudata"))); - -void -wbinvd_on_all_cpus_acked(void) -{ - struct cpu_info *ci, *self = curcpu();; - CPU_INFO_ITERATOR cii; - long wait = 0; - u_int64_t mask = 0; - int s; - - CPU_INFO_FOREACH(cii, ci) { - if (ci == self || !(ci->ci_flags & CPUF_RUNNING)) - continue; - mask |= (1ULL << ci->ci_cpuid); - wait++; - } - - if (wait > 0) { - s = splvm(); - while (atomic_cas_ulong(&wbinvd_wait, 0 , wait) != 0) { - while (wbinvd_wait != 0) - CPU_BUSY_CYCLE(); - } - - CPU_INFO_FOREACH(cii, ci) { - if ((mask & (1ULL << ci->ci_cpuid)) == 0) - continue; - if (x86_fast_ipi(ci, LAPIC_IPI_WBINVD) != 0) - panic("%s: ipi failed", __func__); - } - splx(s); - } - - wbinvd(); - - while (wbinvd_wait != 0) - CPU_BUSY_CYCLE(); -} #endif /* MULTIPROCESSOR */ int cpu_suspended; diff --git a/sys/arch/amd64/amd64/lapic.c b/sys/arch/amd64/amd64/lapic.c index f7fdb81ccca..ccf743303f2 100644 --- a/sys/arch/amd64/amd64/lapic.c +++ b/sys/arch/amd64/amd64/lapic.c @@ -364,8 +364,6 @@ lapic_boot_init(paddr_t lapic_base) idt_vec_set(LAPIC_IPI_INVLPG, Xipi_invlpg_pcid); idt_vec_set(LAPIC_IPI_INVLRANGE, Xipi_invlrange_pcid); } - idt_allocmap[LAPIC_IPI_WBINVD] = 1; - idt_vec_set(LAPIC_IPI_WBINVD, Xipi_wbinvd); #if NVMM > 0 idt_allocmap[LAPIC_IPI_INVEPT] = 1; idt_vec_set(LAPIC_IPI_INVEPT, Xipi_invept); diff --git a/sys/arch/amd64/amd64/vector.S b/sys/arch/amd64/amd64/vector.S index c77bfb1c72c..cfc6cc6ee66 100644 --- a/sys/arch/amd64/amd64/vector.S +++ b/sys/arch/amd64/amd64/vector.S @@ -817,17 +817,6 @@ IDTVEC(ipi_invlrange_pcid) iretq END(Xipi_invlrange_pcid) -IDTVEC(ipi_wbinvd) - ioapic_asm_ack() - - wbinvd - - lock - decq wbinvd_wait - - iretq -END(Xipi_wbinvd) - #endif /* MULTIPROCESSOR */ /* diff --git a/sys/arch/amd64/include/cpufunc.h b/sys/arch/amd64/include/cpufunc.h index 59837bca884..86c4722a34f 100644 --- a/sys/arch/amd64/include/cpufunc.h +++ b/sys/arch/amd64/include/cpufunc.h @@ -304,7 +304,6 @@ wbinvd(void) #ifdef MULTIPROCESSOR int wbinvd_on_all_cpus(void); -void wbinvd_on_all_cpus_acked(void); #else static inline int wbinvd_on_all_cpus(void) diff --git a/sys/arch/amd64/include/i82489var.h b/sys/arch/amd64/include/i82489var.h index 561efa3fbd7..95dfff5173d 100644 --- a/sys/arch/amd64/include/i82489var.h +++ b/sys/arch/amd64/include/i82489var.h @@ -72,8 +72,7 @@ extern void Xresume_lapic_ipi(void); #define LAPIC_IPI_INVLTLB (LAPIC_IPI_OFFSET + 0) #define LAPIC_IPI_INVLPG (LAPIC_IPI_OFFSET + 1) #define LAPIC_IPI_INVLRANGE (LAPIC_IPI_OFFSET + 2) -#define LAPIC_IPI_WBINVD (LAPIC_IPI_OFFSET + 3) -#define LAPIC_IPI_INVEPT (LAPIC_IPI_OFFSET + 4) +#define LAPIC_IPI_INVEPT (LAPIC_IPI_OFFSET + 3) extern void Xipi_invltlb(void); extern void Xipi_invltlb_pcid(void); @@ -81,7 +80,6 @@ extern void Xipi_invlpg(void); extern void Xipi_invlpg_pcid(void); extern void Xipi_invlrange(void); extern void Xipi_invlrange_pcid(void); -extern void Xipi_wbinvd(void); #if NVMM > 0 extern void Xipi_invept(void); #endif /* NVMM > 0 */