summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
authorPhilip Guenther <guenther@cvs.openbsd.org>2023-07-27 00:28:26 +0000
committerPhilip Guenther <guenther@cvs.openbsd.org>2023-07-27 00:28:26 +0000
commit15e95a9e3dcbd148353ea64301b27ac8772293cf (patch)
treed442d492167c5f26be0d74a6934dabc7a1e1b437 /sys/arch
parent28710176506d247b7a41bb5af17c8972b77d7559 (diff)
Follow the lead of mips64 and make cpu_idle_cycle() just call the
indirect pointer itself and provide an initializer for that going to the default "just enable interrupts and halt" path. ok kettenis@
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/amd64/amd64/locore.S14
-rw-r--r--sys/arch/amd64/amd64/machdep.c5
-rw-r--r--sys/arch/amd64/include/cpu.h3
3 files changed, 10 insertions, 12 deletions
diff --git a/sys/arch/amd64/amd64/locore.S b/sys/arch/amd64/amd64/locore.S
index c2536e7395b..2046f0997c8 100644
--- a/sys/arch/amd64/amd64/locore.S
+++ b/sys/arch/amd64/amd64/locore.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: locore.S,v 1.137 2023/07/25 06:48:37 guenther Exp $ */
+/* $OpenBSD: locore.S,v 1.138 2023/07/27 00:28:24 guenther Exp $ */
/* $NetBSD: locore.S,v 1.13 2004/03/25 18:33:17 drochner Exp $ */
/*
@@ -473,21 +473,17 @@ bogus_proc_pmap:
#endif /* DIAGNOSTIC */
END(cpu_switchto)
-/* placed here for correct static branch prediction in cpu_idle_* */
NENTRY(retpoline_rax)
JMP_RETPOLINE(rax)
-ENTRY(cpu_idle_cycle)
- RETGUARD_SETUP(cpu_idle_cycle, r11)
- movq cpu_idle_cycle_fcn,%rax
- cmpq $0,%rax
- jne retpoline_rax
+ENTRY(cpu_idle_cycle_hlt)
+ RETGUARD_SETUP(cpu_idle_cycle_hlt, r11)
sti
hlt
- RETGUARD_CHECK(cpu_idle_cycle, r11)
+ RETGUARD_CHECK(cpu_idle_cycle_hlt, r11)
ret
lfence
-END(cpu_idle_cycle)
+END(cpu_idle_cycle_hlt)
/*
* savectx(struct pcb *pcb);
diff --git a/sys/arch/amd64/amd64/machdep.c b/sys/arch/amd64/amd64/machdep.c
index ddbeedb12b5..453de13fbfb 100644
--- a/sys/arch/amd64/amd64/machdep.c
+++ b/sys/arch/amd64/amd64/machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: machdep.c,v 1.285 2023/07/10 03:32:10 guenther Exp $ */
+/* $OpenBSD: machdep.c,v 1.286 2023/07/27 00:28:25 guenther Exp $ */
/* $NetBSD: machdep.c,v 1.3 2003/05/07 22:58:18 fvdl Exp $ */
/*-
@@ -160,7 +160,8 @@ char machine[] = MACHINE;
/*
* switchto vectors
*/
-void (*cpu_idle_cycle_fcn)(void) = NULL;
+void cpu_idle_cycle_hlt(void);
+void (*cpu_idle_cycle_fcn)(void) = &cpu_idle_cycle_hlt;
/* the following is used externally for concurrent handlers */
int setperf_prio = 0;
diff --git a/sys/arch/amd64/include/cpu.h b/sys/arch/amd64/include/cpu.h
index b5784abe689..cf322886269 100644
--- a/sys/arch/amd64/include/cpu.h
+++ b/sys/arch/amd64/include/cpu.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: cpu.h,v 1.157 2023/07/25 18:16:19 cheloha Exp $ */
+/* $OpenBSD: cpu.h,v 1.158 2023/07/27 00:28:24 guenther Exp $ */
/* $NetBSD: cpu.h,v 1.1 2003/04/26 18:39:39 fvdl Exp $ */
/*-
@@ -406,6 +406,7 @@ void cpu_proc_fork(struct proc *, struct proc *);
int amd64_pa_used(paddr_t);
#define cpu_idle_enter() do { /* nothing */ } while (0)
extern void (*cpu_idle_cycle_fcn)(void);
+#define cpu_idle_cycle() (*cpu_idle_cycle_fcn)()
#define cpu_idle_leave() do { /* nothing */ } while (0)
struct region_descriptor;