On Fri, Aug 19, 2022 at 01:24:47PM +0200, Mark Kettenis wrote:
>
> This is one of those annoying corners where there is too much
> unecessary MD variation. Currently travelling without a laptop, so I
> can't easily check the tree. But one note I wanted to make is that the
> definition of struct clockframe and the CLKF_XXX macros should stay
> together. 

Sure.  Here's a version that consolidates the CLKF macros into frame.h
alongside the clockframe definitions.

Notes by arch:

alpha, amd64, hppa, i386, m88k, mips64, powerpc64, sh, sparc64:

- clockframe is defined in cpu.h with CLKF macros.

- Move clockframe definition and CLKF macros from cpu.h to frame.h.

arm, powerpc:

- clockframe is defined in frame.h.

- CLKF macros are defined in cpu.h.

- Move CLKF macros from cpu.h to frame.h.

arm64, riscv64:

- clockframe is defined in cpu.h with CLKF macros.

- clockframe is *also* defined in frame.h.

- Delete clockframe definition from frame.h

- Move (other) clockframe definition and CLKF macros from cpu.h to frame.h.

sparc64 remains the only one that looks not-quite-right because
trapframe64 is defined in reg.h, not frame.h.

Index: alpha/include/cpu.h
===================================================================
RCS file: /cvs/src/sys/arch/alpha/include/cpu.h,v
retrieving revision 1.66
diff -u -p -r1.66 cpu.h
--- alpha/include/cpu.h 10 Aug 2022 10:41:35 -0000      1.66
+++ alpha/include/cpu.h 29 Aug 2022 16:28:56 -0000
@@ -297,25 +297,6 @@ cpu_rnd_messybits(void)
 }
 
 /*
- * Arguments to hardclock and gatherstats encapsulate the previous
- * machine state in an opaque clockframe.  On the Alpha, we use
- * what we push on an interrupt (a trapframe).
- */
-struct clockframe {
-       struct trapframe        cf_tf;
-};
-#define        CLKF_USERMODE(framep)                                           
\
-       (((framep)->cf_tf.tf_regs[FRAME_PS] & ALPHA_PSL_USERMODE) != 0)
-#define        CLKF_PC(framep)         ((framep)->cf_tf.tf_regs[FRAME_PC])
-
-/*
- * This isn't perfect; if the clock interrupt comes in before the
- * r/m/w cycle is complete, we won't be counted... but it's not
- * like this statistic has to be extremely accurate.
- */
-#define        CLKF_INTR(framep)       (curcpu()->ci_intrdepth)
-
-/*
  * This is used during profiling to integrate system time.
  */
 #define        PROC_PC(p)      ((p)->p_md.md_tf->tf_regs[FRAME_PC])
Index: alpha/include/frame.h
===================================================================
RCS file: /cvs/src/sys/arch/alpha/include/frame.h,v
retrieving revision 1.4
diff -u -p -r1.4 frame.h
--- alpha/include/frame.h       23 Mar 2011 16:54:34 -0000      1.4
+++ alpha/include/frame.h       29 Aug 2022 16:28:56 -0000
@@ -92,4 +92,23 @@ struct trapframe {
        unsigned long   tf_regs[FRAME_SIZE];    /* See above */
 };
 
+/*
+ * Arguments to hardclock and gatherstats encapsulate the previous
+ * machine state in an opaque clockframe.  On the Alpha, we use
+ * what we push on an interrupt (a trapframe).
+ */
+struct clockframe {
+       struct trapframe        cf_tf;
+};
+#define        CLKF_USERMODE(framep)                                           
\
+       (((framep)->cf_tf.tf_regs[FRAME_PS] & ALPHA_PSL_USERMODE) != 0)
+#define        CLKF_PC(framep)         ((framep)->cf_tf.tf_regs[FRAME_PC])
+
+/*
+ * This isn't perfect; if the clock interrupt comes in before the
+ * r/m/w cycle is complete, we won't be counted... but it's not
+ * like this statistic has to be extremely accurate.
+ */
+#define        CLKF_INTR(framep)       (curcpu()->ci_intrdepth)
+
 #endif /* _MACHINE_FRAME_H_ */
Index: amd64/include/cpu.h
===================================================================
RCS file: /cvs/src/sys/arch/amd64/include/cpu.h,v
retrieving revision 1.149
diff -u -p -r1.149 cpu.h
--- amd64/include/cpu.h 25 Aug 2022 17:25:25 -0000      1.149
+++ amd64/include/cpu.h 29 Aug 2022 16:28:56 -0000
@@ -336,17 +336,6 @@ cpu_rnd_messybits(void)
 #define curpcb         curcpu()->ci_curpcb
 
 /*
- * Arguments to hardclock, softclock and statclock
- * encapsulate the previous machine state in an opaque
- * clockframe; for now, use generic intrframe.
- */
-#define clockframe intrframe
-
-#define        CLKF_USERMODE(frame)    USERMODE((frame)->if_cs, 
(frame)->if_rflags)
-#define CLKF_PC(frame)         ((frame)->if_rip)
-#define CLKF_INTR(frame)       (curcpu()->ci_idepth > 1)
-
-/*
  * Give a profiling tick to the current process when the user profiling
  * buffer pages are invalid.  On the i386, request an ast to send us
  * through usertrap(), marking the proc as needing a profiling tick.
Index: amd64/include/frame.h
===================================================================
RCS file: /cvs/src/sys/arch/amd64/include/frame.h,v
retrieving revision 1.10
diff -u -p -r1.10 frame.h
--- amd64/include/frame.h       10 Jul 2018 08:57:44 -0000      1.10
+++ amd64/include/frame.h       29 Aug 2022 16:28:56 -0000
@@ -171,4 +171,14 @@ struct callframe {
        long                    f_arg0;
 };
 
+/*
+ * Arguments to hardclock, softclock and statclock
+ * encapsulate the previous machine state in an opaque
+ * clockframe; for now, use generic intrframe.
+ */
+#define clockframe intrframe
+#define CLKF_USERMODE(frame)   USERMODE((frame)->if_cs, (frame)->if_rflags)
+#define CLKF_PC(frame)         ((frame)->if_rip)
+#define CLKF_INTR(frame)       (curcpu()->ci_idepth > 1)
+
 #endif  /* _MACHINE_FRAME_H_ */
Index: arm/include/cpu.h
===================================================================
RCS file: /cvs/src/sys/arch/arm/include/cpu.h,v
retrieving revision 1.61
diff -u -p -r1.61 cpu.h
--- arm/include/cpu.h   6 Jul 2021 09:34:06 -0000       1.61
+++ arm/include/cpu.h   29 Aug 2022 16:28:56 -0000
@@ -104,25 +104,6 @@
 /* 1 == use cpu_sleep(), 0 == don't */
 extern int cpu_do_powersave;
 
-/* All the CLKF_* macros take a struct clockframe * as an argument. */
-
-/*
- * CLKF_USERMODE: Return TRUE/FALSE (1/0) depending on whether the
- * frame came from USR mode or not.
- */
-#define CLKF_USERMODE(frame)   ((frame->if_spsr & PSR_MODE) == PSR_USR32_MODE)
-
-/*
- * CLKF_INTR: True if we took the interrupt from inside another
- * interrupt handler.
- */
-#define CLKF_INTR(frame)       (curcpu()->ci_idepth > 1) 
-
-/*
- * CLKF_PC: Extract the program counter from a clockframe
- */
-#define CLKF_PC(frame)         (frame->if_pc)
-
 /*
  * PROC_PC: Find out the program counter for the given process.
  */
Index: arm/include/frame.h
===================================================================
RCS file: /cvs/src/sys/arch/arm/include/frame.h,v
retrieving revision 1.13
diff -u -p -r1.13 frame.h
--- arm/include/frame.h 30 Jun 2018 15:23:37 -0000      1.13
+++ arm/include/frame.h 29 Aug 2022 16:28:56 -0000
@@ -144,7 +144,25 @@ typedef struct irqframe {
        unsigned int if_pad;
 } irqframe_t;
 
+/* All the CLKF_* macros take a struct clockframe * as an argument. */
 #define clockframe irqframe
+
+/*
+ * CLKF_USERMODE: Return TRUE/FALSE (1/0) depending on whether the
+ * frame came from USR mode or not.
+ */
+#define CLKF_USERMODE(frame)   ((frame->if_spsr & PSR_MODE) == PSR_USR32_MODE)
+
+/*
+ * CLKF_INTR: True if we took the interrupt from inside another
+ * interrupt handler.
+ */
+#define CLKF_INTR(frame)       (curcpu()->ci_idepth > 1) 
+
+/*
+ * CLKF_PC: Extract the program counter from a clockframe
+ */
+#define CLKF_PC(frame)         (frame->if_pc)
 
 /*
  * Switch frame
Index: arm64/include/cpu.h
===================================================================
RCS file: /cvs/src/sys/arch/arm64/include/cpu.h,v
retrieving revision 1.28
diff -u -p -r1.28 cpu.h
--- arm64/include/cpu.h 29 Aug 2022 02:01:18 -0000      1.28
+++ arm64/include/cpu.h 29 Aug 2022 16:28:56 -0000
@@ -47,26 +47,6 @@
 #include <machine/frame.h>
 #include <machine/armreg.h>
 
-/* All the CLKF_* macros take a struct clockframe * as an argument. */
-
-#define clockframe trapframe
-/*
- * CLKF_USERMODE: Return TRUE/FALSE (1/0) depending on whether the
- * frame came from USR mode or not.
- */
-#define CLKF_USERMODE(frame)   ((frame->tf_elr & (1ul << 63)) == 0)
-
-/*
- * CLKF_INTR: True if we took the interrupt from inside another
- * interrupt handler.
- */
-#define CLKF_INTR(frame)       (curcpu()->ci_idepth > 1)
-
-/*
- * CLKF_PC: Extract the program counter from a clockframe
- */
-#define CLKF_PC(frame)         (frame->tf_elr)
-
 /*
  * PROC_PC: Find out the program counter for the given process.
  */
Index: arm64/include/frame.h
===================================================================
RCS file: /cvs/src/sys/arch/arm64/include/frame.h,v
retrieving revision 1.3
diff -u -p -r1.3 frame.h
--- arm64/include/frame.h       30 Jun 2018 15:23:37 -0000      1.3
+++ arm64/include/frame.h       29 Aug 2022 16:28:56 -0000
@@ -26,7 +26,6 @@
 /*
  * Exception/Trap Stack Frame
  */
-#define clockframe trapframe
 typedef struct trapframe {
        register_t tf_sp;
        register_t tf_lr;
@@ -34,6 +33,26 @@ typedef struct trapframe {
        register_t tf_spsr;
        register_t tf_x[30];
 } trapframe_t;
+
+/* All the CLKF_* macros take a struct clockframe * as an argument. */
+#define clockframe trapframe
+
+/*
+ * CLKF_USERMODE: Return TRUE/FALSE (1/0) depending on whether the
+ * frame came from USR mode or not.
+ */
+#define CLKF_USERMODE(frame)   ((frame->tf_elr & (1ul << 63)) == 0)
+
+/*
+ * CLKF_INTR: True if we took the interrupt from inside another
+ * interrupt handler.
+ */
+#define CLKF_INTR(frame)       (curcpu()->ci_idepth > 1)
+
+/*
+ * CLKF_PC: Extract the program counter from a clockframe
+ */
+#define CLKF_PC(frame)         (frame->tf_elr)
 
 /*
  * pushed on stack for signal delivery
Index: hppa/include/cpu.h
===================================================================
RCS file: /cvs/src/sys/arch/hppa/include/cpu.h,v
retrieving revision 1.95
diff -u -p -r1.95 cpu.h
--- hppa/include/cpu.h  6 Jul 2021 09:34:06 -0000       1.95
+++ hppa/include/cpu.h  29 Aug 2022 16:28:56 -0000
@@ -210,12 +210,6 @@ extern int cpu_hvers;
 #define        HPPA_SPA_ENABLE 0x00000020
 #define        HPPA_NMODSPBUS  64
 
-#define        clockframe              trapframe
-#define        CLKF_PC(framep)         ((framep)->tf_iioq_head)
-#define        CLKF_INTR(framep)       ((framep)->tf_flags & TFF_INTR)
-#define        CLKF_USERMODE(framep)   ((framep)->tf_flags & T_USER)
-#define        CLKF_SYSCALL(framep)    ((framep)->tf_flags & TFF_SYS)
-
 #define        need_proftick(p)        setsoftast(p)
 #define        PROC_PC(p)              ((p)->p_md.md_regs->tf_iioq_head & 
~HPPA_PC_PRIV_MASK)
 #define        PROC_STACK(p)           ((p)->p_md.md_regs->tf_sp)
Index: hppa/include/frame.h
===================================================================
RCS file: /cvs/src/sys/arch/hppa/include/frame.h,v
retrieving revision 1.19
diff -u -p -r1.19 frame.h
--- hppa/include/frame.h        21 Jun 2012 00:56:59 -0000      1.19
+++ hppa/include/frame.h        29 Aug 2022 16:28:56 -0000
@@ -136,6 +136,12 @@ struct trapframe {
        unsigned long   tf_pad[3];      /* pad to 256 bytes */
 };
 
+#define        clockframe              trapframe
+#define        CLKF_PC(framep)         ((framep)->tf_iioq_head)
+#define        CLKF_INTR(framep)       ((framep)->tf_flags & TFF_INTR)
+#define        CLKF_USERMODE(framep)   ((framep)->tf_flags & T_USER)
+#define        CLKF_SYSCALL(framep)    ((framep)->tf_flags & TFF_SYS)
+
 #ifdef _KERNEL
 int    setstack(struct trapframe *, u_long, register_t);
 #endif /* _KERNEL */
Index: i386/include/cpu.h
===================================================================
RCS file: /cvs/src/sys/arch/i386/include/cpu.h,v
retrieving revision 1.179
diff -u -p -r1.179 cpu.h
--- i386/include/cpu.h  29 Aug 2022 02:58:13 -0000      1.179
+++ i386/include/cpu.h  29 Aug 2022 16:28:56 -0000
@@ -55,15 +55,6 @@
 
 #endif /* _KERNEL */
 
-/*
- * Arguments to hardclock, softclock and statclock
- * encapsulate the previous machine state in an opaque
- * clockframe; for now, use generic intrframe.
- *
- * XXX intrframe has a lot of gunk we don't need.
- */
-#define clockframe intrframe
-
 #include <sys/device.h>
 #include <sys/sched.h>
 #include <sys/sensors.h>
@@ -274,10 +265,6 @@ unsigned int cpu_rnd_messybits(void);
  */
 extern void need_resched(struct cpu_info *);
 #define clear_resched(ci) (ci)->ci_want_resched = 0
-
-#define        CLKF_USERMODE(frame)    USERMODE((frame)->if_cs, 
(frame)->if_eflags)
-#define        CLKF_PC(frame)          ((frame)->if_eip)
-#define        CLKF_INTR(frame)        (IDXSEL((frame)->if_cs) == GICODE_SEL)
 
 /*
  * This is used during profiling to integrate system time.
Index: i386/include/frame.h
===================================================================
RCS file: /cvs/src/sys/arch/i386/include/frame.h,v
retrieving revision 1.13
diff -u -p -r1.13 frame.h
--- i386/include/frame.h        15 Jun 2018 17:58:41 -0000      1.13
+++ i386/include/frame.h        29 Aug 2022 16:28:56 -0000
@@ -170,4 +170,17 @@ struct sigframe {
        struct  sigcontext sf_sc;
        siginfo_t sf_si;
 };
+
+/*
+ * Arguments to hardclock, softclock and statclock
+ * encapsulate the previous machine state in an opaque
+ * clockframe; for now, use generic intrframe.
+ *
+ * XXX intrframe has a lot of gunk we don't need.
+ */
+#define clockframe intrframe
+#define        CLKF_USERMODE(frame)    USERMODE((frame)->if_cs, 
(frame)->if_eflags)
+#define        CLKF_PC(frame)          ((frame)->if_eip)
+#define        CLKF_INTR(frame)        (IDXSEL((frame)->if_cs) == GICODE_SEL)
+
 #endif
Index: m88k/include/cpu.h
===================================================================
RCS file: /cvs/src/sys/arch/m88k/include/cpu.h,v
retrieving revision 1.70
diff -u -p -r1.70 cpu.h
--- m88k/include/cpu.h  6 Jul 2021 09:34:06 -0000       1.70
+++ m88k/include/cpu.h  29 Aug 2022 16:28:56 -0000
@@ -250,22 +250,6 @@ unsigned int cpu_rnd_messybits(void);
 #include <sys/mplock.h>
 #endif
 
-/*
- * Arguments to hardclock and gatherstats encapsulate the previous
- * machine state in an opaque clockframe. CLKF_INTR is only valid
- * if the process is in kernel mode. Clockframe is really trapframe,
- * so pointer to clockframe can be safely cast into a pointer to
- * trapframe.
- */
-struct clockframe {
-       struct trapframe tf;
-};
-
-#define        CLKF_USERMODE(framep)   (((framep)->tf.tf_epsr & PSR_MODE) == 0)
-#define        CLKF_PC(framep)         ((framep)->tf.tf_sxip & XIP_ADDR)
-#define        CLKF_INTR(framep) \
-       (((struct cpu_info *)(framep)->tf.tf_cpu)->ci_intrdepth > 1)
-
 #define        aston(p)                ((p)->p_md.md_astpending = 1)
 
 /*
Index: m88k/include/frame.h
===================================================================
RCS file: /cvs/src/sys/arch/m88k/include/frame.h,v
retrieving revision 1.4
diff -u -p -r1.4 frame.h
--- m88k/include/frame.h        15 Nov 2007 21:24:12 -0000      1.4
+++ m88k/include/frame.h        29 Aug 2022 16:28:56 -0000
@@ -87,4 +87,20 @@ struct trapframe {
 #define        tf_fprl         tf_regs.fprl
 #define        tf_fpit         tf_regs.fpit
 
+/*
+ * Arguments to hardclock and gatherstats encapsulate the previous
+ * machine state in an opaque clockframe. CLKF_INTR is only valid
+ * if the process is in kernel mode. Clockframe is really trapframe,
+ * so pointer to clockframe can be safely cast into a pointer to
+ * trapframe.
+ */
+struct clockframe {
+       struct trapframe tf;
+};
+
+#define        CLKF_USERMODE(framep)   (((framep)->tf.tf_epsr & PSR_MODE) == 0)
+#define        CLKF_PC(framep)         ((framep)->tf.tf_sxip & XIP_ADDR)
+#define        CLKF_INTR(framep) \
+       (((struct cpu_info *)(framep)->tf.tf_cpu)->ci_intrdepth > 1)
+
 #endif /* _M88K_FRAME_H_ */
Index: mips64/include/cpu.h
===================================================================
RCS file: /cvs/src/sys/arch/mips64/include/cpu.h,v
retrieving revision 1.139
diff -u -p -r1.139 cpu.h
--- mips64/include/cpu.h        22 Aug 2022 00:35:06 -0000      1.139
+++ mips64/include/cpu.h        29 Aug 2022 16:28:56 -0000
@@ -265,17 +265,6 @@ unsigned int cpu_rnd_messybits(void);
 #include <machine/frame.h>
 
 /*
- * Arguments to hardclock encapsulate the previous machine state in
- * an opaque clockframe.
- */
-#define        clockframe trapframe    /* Use normal trap frame */
-
-#define        SR_KSU_USER             0x00000010
-#define        CLKF_USERMODE(framep)   ((framep)->sr & SR_KSU_USER)
-#define        CLKF_PC(framep)         ((framep)->pc)
-#define        CLKF_INTR(framep)       (curcpu()->ci_intrdepth > 1)    /* XXX 
*/
-
-/*
  * This is used during profiling to integrate system time.
  */
 #define        PROC_PC(p)      ((p)->p_md.md_regs->pc)
Index: mips64/include/frame.h
===================================================================
RCS file: /cvs/src/sys/arch/mips64/include/frame.h,v
retrieving revision 1.8
diff -u -p -r1.8 frame.h
--- mips64/include/frame.h      29 Apr 2021 12:49:19 -0000      1.8
+++ mips64/include/frame.h      29 Aug 2022 16:28:56 -0000
@@ -111,4 +111,14 @@ struct trapframe {
        register_t      fsr;
 };
 
+/*
+ * Arguments to hardclock encapsulate the previous machine state in
+ * an opaque clockframe.
+ */
+#define        clockframe trapframe    /* Use normal trap frame */
+#define        SR_KSU_USER             0x00000010
+#define        CLKF_USERMODE(framep)   ((framep)->sr & SR_KSU_USER)
+#define        CLKF_PC(framep)         ((framep)->pc)
+#define        CLKF_INTR(framep)       (curcpu()->ci_intrdepth > 1)    /* XXX 
*/
+
 #endif /* !_MIPS64_FRAME_H_ */
Index: powerpc/include/cpu.h
===================================================================
RCS file: /cvs/src/sys/arch/powerpc/include/cpu.h,v
retrieving revision 1.72
diff -u -p -r1.72 cpu.h
--- powerpc/include/cpu.h       24 Jul 2022 00:28:09 -0000      1.72
+++ powerpc/include/cpu.h       29 Aug 2022 16:28:56 -0000
@@ -155,10 +155,6 @@ void cpu_unidle(struct cpu_info *);
 
 extern struct cpu_info cpu_info[PPC_MAXPROCS];
 
-#define        CLKF_USERMODE(frame)    (((frame)->srr1 & PSL_PR) != 0)
-#define        CLKF_PC(frame)          ((frame)->srr0)
-#define        CLKF_INTR(frame)        ((frame)->depth != 0)
-
 extern int ppc_cpuidle;
 extern int ppc_proc_is_64b;
 extern int ppc_nobat;
Index: powerpc/include/frame.h
===================================================================
RCS file: /cvs/src/sys/arch/powerpc/include/frame.h,v
retrieving revision 1.7
diff -u -p -r1.7 frame.h
--- powerpc/include/frame.h     6 Jan 2006 18:53:05 -0000       1.7
+++ powerpc/include/frame.h     29 Aug 2022 16:28:56 -0000
@@ -55,6 +55,10 @@ struct clockframe {
        int depth;
 };
 
+#define        CLKF_USERMODE(frame)    (((frame)->srr1 & PSL_PR) != 0)
+#define        CLKF_PC(frame)          ((frame)->srr0)
+#define        CLKF_INTR(frame)        ((frame)->depth != 0)
+
 /*
  * Call frame for PowerPC used during fork.
  */
Index: powerpc64/include/cpu.h
===================================================================
RCS file: /cvs/src/sys/arch/powerpc64/include/cpu.h,v
retrieving revision 1.32
diff -u -p -r1.32 cpu.h
--- powerpc64/include/cpu.h     9 Aug 2022 04:40:08 -0000       1.32
+++ powerpc64/include/cpu.h     29 Aug 2022 16:28:56 -0000
@@ -161,12 +161,6 @@ void       mp_setperf(int);
 
 #endif
 
-#define clockframe trapframe
-
-#define CLKF_INTR(frame)       (curcpu()->ci_idepth > 1)
-#define CLKF_USERMODE(frame)   (frame->srr1 & PSL_PR)
-#define CLKF_PC(frame)         (frame->srr0)
-
 #define aston(p)               ((p)->p_md.md_astpending = 1)
 #define need_proftick(p)       aston(p)
 
Index: powerpc64/include/frame.h
===================================================================
RCS file: /cvs/src/sys/arch/powerpc64/include/frame.h,v
retrieving revision 1.5
diff -u -p -r1.5 frame.h
--- powerpc64/include/frame.h   13 Jul 2020 22:37:37 -0000      1.5
+++ powerpc64/include/frame.h   29 Aug 2022 16:28:56 -0000
@@ -101,4 +101,9 @@ struct switchframe {
        register_t      sf_r31;
 };
 
+#define clockframe trapframe
+#define CLKF_INTR(frame)       (curcpu()->ci_idepth > 1)
+#define CLKF_USERMODE(frame)   (frame->srr1 & PSL_PR)
+#define CLKF_PC(frame)         (frame->srr0)
+
 #endif /* _MACHDEP_FRAME_H_ */
Index: riscv64/include/cpu.h
===================================================================
RCS file: /cvs/src/sys/arch/riscv64/include/cpu.h,v
retrieving revision 1.14
diff -u -p -r1.14 cpu.h
--- riscv64/include/cpu.h       29 Aug 2022 02:01:18 -0000      1.14
+++ riscv64/include/cpu.h       29 Aug 2022 16:28:56 -0000
@@ -42,26 +42,6 @@
 #include <machine/frame.h>
 #include <machine/riscvreg.h>
 
-/* All the CLKF_* macros take a struct clockframe * as an argument. */
-
-#define clockframe trapframe
-/*
- * CLKF_USERMODE: Return TRUE/FALSE (1/0) depending on whether the
- * frame came from USR mode or not.
- */
-#define CLKF_USERMODE(frame)   ((frame->tf_sstatus & SSTATUS_SPP) == 0)
-
-/*
- * CLKF_INTR: True if we took the interrupt from inside another
- * interrupt handler.
- */
-#define CLKF_INTR(frame)       (curcpu()->ci_idepth > 1)
-
-/*
- * CLKF_PC: Extract the program counter from a clockframe
- */
-#define CLKF_PC(frame)         (frame->tf_sepc)
-
 /*
  * PROC_PC: Find out the program counter for the given process.
  */
Index: riscv64/include/frame.h
===================================================================
RCS file: /cvs/src/sys/arch/riscv64/include/frame.h,v
retrieving revision 1.3
diff -u -p -r1.3 frame.h
--- riscv64/include/frame.h     24 Feb 2022 14:19:10 -0000      1.3
+++ riscv64/include/frame.h     29 Aug 2022 16:28:56 -0000
@@ -49,7 +49,6 @@
 /*
  * Exception/Trap Stack Frame
  */
-#define clockframe trapframe
 typedef struct trapframe {
        /* Standard Registers */
        register_t tf_ra;
@@ -66,6 +65,26 @@ typedef struct trapframe {
        register_t tf_scause;
        register_t tf_pad;
 } trapframe_t;
+
+/* All the CLKF_* macros take a struct clockframe * as an argument. */
+#define clockframe trapframe
+
+/*
+ * CLKF_USERMODE: Return TRUE/FALSE (1/0) depending on whether the
+ * frame came from USR mode or not.
+ */
+#define CLKF_USERMODE(frame)   ((frame->tf_sstatus & SSTATUS_SPP) == 0)
+
+/*
+ * CLKF_INTR: True if we took the interrupt from inside another
+ * interrupt handler.
+ */
+#define CLKF_INTR(frame)       (curcpu()->ci_idepth > 1)
+
+/*
+ * CLKF_PC: Extract the program counter from a clockframe
+ */
+#define CLKF_PC(frame)         (frame->tf_sepc)
 
 /*
  * pushed on stack for signal delivery
Index: sh/include/cpu.h
===================================================================
RCS file: /cvs/src/sys/arch/sh/include/cpu.h,v
retrieving revision 1.33
diff -u -p -r1.33 cpu.h
--- sh/include/cpu.h    21 Feb 2022 10:44:58 -0000      1.33
+++ sh/include/cpu.h    29 Aug 2022 16:28:56 -0000
@@ -88,21 +88,6 @@ extern struct cpu_info cpu_info_store;
 
 #define CPU_BUSY_CYCLE()       do {} while (0)
 
-
-/*
- * Arguments to hardclock and gatherstats encapsulate the previous
- * machine state in an opaque clockframe.
- */
-struct clockframe {
-       int     spc;    /* program counter at time of interrupt */
-       int     ssr;    /* status register at time of interrupt */
-       int     ssp;    /* stack pointer at time of interrupt */
-};
-
-#define        CLKF_USERMODE(cf)       (!KERNELMODE((cf)->ssr))
-#define        CLKF_PC(cf)             ((cf)->spc)
-#define        CLKF_INTR(cf)           0       /* XXX */
-
 /*
  * This is used during profiling to integrate system time.  It can safely
  * assume that the process is resident.
Index: sh/include/frame.h
===================================================================
RCS file: /cvs/src/sys/arch/sh/include/frame.h,v
retrieving revision 1.3
diff -u -p -r1.3 frame.h
--- sh/include/frame.h  18 May 2016 20:21:13 -0000      1.3
+++ sh/include/frame.h  29 Aug 2022 16:28:56 -0000
@@ -130,4 +130,18 @@ struct switchframe {
        int     sf_mach;
 };
 
+/*
+ * Arguments to hardclock and gatherstats encapsulate the previous
+ * machine state in an opaque clockframe.
+ */
+struct clockframe {
+       int     spc;    /* program counter at time of interrupt */
+       int     ssr;    /* status register at time of interrupt */
+       int     ssp;    /* stack pointer at time of interrupt */
+};
+
+#define        CLKF_USERMODE(cf)       (!KERNELMODE((cf)->ssr))
+#define        CLKF_PC(cf)             ((cf)->spc)
+#define        CLKF_INTR(cf)           0       /* XXX */
+
 #endif /* !_SH_FRAME_H_ */
Index: sparc64/include/cpu.h
===================================================================
RCS file: /cvs/src/sys/arch/sparc64/include/cpu.h,v
retrieving revision 1.98
diff -u -p -r1.98 cpu.h
--- sparc64/include/cpu.h       6 Jul 2021 09:34:07 -0000       1.98
+++ sparc64/include/cpu.h       29 Aug 2022 16:28:56 -0000
@@ -265,20 +265,6 @@ do {                                                       
                \
                : : : "memory");                                        \
 } while (0)
 
-/*
- * Arguments to hardclock, softclock and gatherstats encapsulate the
- * previous machine state in an opaque clockframe.  The ipl is here
- * as well for strayintr (see locore.s:interrupt and intr.c:strayintr).
- */
-struct clockframe {
-       struct trapframe64 t;
-       int saved_intr_level;
-};
-
-#define        CLKF_USERMODE(framep)   (((framep)->t.tf_tstate & TSTATE_PRIV) 
== 0)
-#define        CLKF_PC(framep)         ((framep)->t.tf_pc)
-#define        CLKF_INTR(framep)       ((framep)->saved_intr_level != 0)
-
 extern void (*cpu_start_clock)(void);
 
 #define aston(p)       ((p)->p_md.md_astpending = 1)
Index: sparc64/include/frame.h
===================================================================
RCS file: /cvs/src/sys/arch/sparc64/include/frame.h,v
retrieving revision 1.6
diff -u -p -r1.6 frame.h
--- sparc64/include/frame.h     23 Mar 2011 16:54:37 -0000      1.6
+++ sparc64/include/frame.h     29 Aug 2022 16:28:56 -0000
@@ -116,4 +116,19 @@ struct frame64 {
  */
 #define BIAS   (2048-1)
 
+/*
+ * Arguments to hardclock, softclock and gatherstats encapsulate the
+ * previous machine state in an opaque clockframe.  The ipl is here
+ * as well for strayintr (see locore.s:interrupt and intr.c:strayintr).
+ */
+struct trapframe64;
+struct clockframe {
+       struct trapframe64 t;
+       int saved_intr_level;
+};
+
+#define        CLKF_USERMODE(framep)   (((framep)->t.tf_tstate & TSTATE_PRIV) 
== 0)
+#define        CLKF_PC(framep)         ((framep)->t.tf_pc)
+#define        CLKF_INTR(framep)       ((framep)->saved_intr_level != 0)
+
 #endif /* _MACHINE_FRAME_H_ */

Reply via email to