Index | Thread | Search

From:
hshoexer <hshoexer@yerbouti.franken.de>
Subject:
retire wbinvd_on_all_cpus_acked()
To:
tech@openbsd.org
Date:
Tue, 11 Nov 2025 13:45:11 +0100

Download raw body.

Thread
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 */