From: Mike Larkin Subject: Re: retire wbinvd_on_all_cpus_acked() To: tech@openbsd.org Date: Tue, 11 Nov 2025 09:02:01 -0800 On Tue, Nov 11, 2025 at 01:45:11PM +0100, hshoexer wrote: > Hi, > > having replaced wbinvd_on_all_cpus_acked() with cpu_xcall(9) in > psp(4), that function can be retired now. > > ok? 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 */ >