On Sat, Aug 19, 2023 at 01:44:47PM -0500, Scott Cheloha wrote: > On Sun, Aug 13, 2023 at 01:48:21PM -0500, Scott Cheloha wrote: > > This is the next patch in the clock interrupt reorganization series. > > > > Before we continue breaking up the hardclock(9) we need to detour into > > the MD code. > > > > This patch divides the "initialization" parts of cpu_initclocks() from > > the "start the clock interrupt" parts. Seprating the two parts leaves > > initclocks() an opportunity to prepare the primary CPU for clock > > interrupt dispatch in a machine-independent manner before actually > > pulling the trigger. It's nearly impossible to do any MI setup during > > initclocks() because cpu_initclocks() does everything in one go: both > > initialization and kickoff are done when cpu_initclocks() returns. > > > > Many platforms have a "cpu_startclock()" function, so this patch takes > > that de facto standard and makes it a rule: cpu_startclock() is now > > required. It is prototyped in sys/systm.h and every platform must > > implement it. > > > > The revised initclocks() sequence is then: > > > > 1. Call cpu_initclocks(). At minimum, cpu_initclocks() ensures > > hz, stathz, and profhz are initialized. All the machine > > independent setup in step (2) (currently) depends upon > > these machine-dependent values. > > > > 2. Compute intervals using hz, stathz, and profhz. > > > > In a later step I will move the full contents of clockintr_init() > > up into initclocks() and get rid of clockintr_init() entirely. > > > > 3. Call cpu_startclock(). At minimum, cpu_startclock() starts the > > clock interrupt dispatch cycle on the primary CPU. > > > > I have compiled/booted this patch on amd64 (lapic path), arm64, i386 > > (lapic path), macppc, octeon, and sparc64 (sun4v). > > > > I am looking for compile/boot tests on alpha, armv7, hppa, landisk, > > luna88k, powerpc64, and riscv64. I think armv7 is the tricky one > > here. Everything else is relatively straightforward, though I may > > have missed a few stray variables here or there. > > > > Test results? Ok? > > Here is an updated patch that removes several MD prototypes for > cpu_startclock() that I missed the first time through. > > I went back and tested these again: > > - amd64 (lapic) > - arm64 > - i386 (lapic) > - powerpc/macppc > - mips64/octeon (loongson should be fine) > - sparc64 (sys_tick; tick/stick should be fine) > > arm/armv7 and riscv64 were tested under the previous version, but I > would appreciate a second compile-test to make sure the header changes > in the updated patch did not break the build (CC phessler@, jsg@). > > I am still seeking compile/boot-tests for the following: > > - alpha > - hppa > - m88k/luna88k
if you are really interested in doing this you could run this in nono since you're just looking for a compile/boot test. > - powerpc64 builds and boots on powerpc64 > - sh/landisk > > Test results? Ok? > > Index: kern/kern_clock.c > =================================================================== > RCS file: /cvs/src/sys/kern/kern_clock.c,v > retrieving revision 1.113 > diff -u -p -r1.113 kern_clock.c > --- kern/kern_clock.c 12 Aug 2023 13:19:28 -0000 1.113 > +++ kern/kern_clock.c 19 Aug 2023 18:16:16 -0000 > @@ -103,6 +103,9 @@ initclocks(void) > profclock_period = 1000000000 / profhz; > > inittimecounter(); > + > + /* Start dispatching clock interrupts on the primary CPU. */ > + cpu_startclock(); > } > > /* > Index: sys/systm.h > =================================================================== > RCS file: /cvs/src/sys/sys/systm.h,v > retrieving revision 1.164 > diff -u -p -r1.164 systm.h > --- sys/systm.h 5 Aug 2023 20:07:56 -0000 1.164 > +++ sys/systm.h 19 Aug 2023 18:16:17 -0000 > @@ -243,6 +243,7 @@ void initclocks(void); > void inittodr(time_t); > void resettodr(void); > void cpu_initclocks(void); > +void cpu_startclock(void); > > void startprofclock(struct process *); > void stopprofclock(struct process *); > Index: arch/alpha/alpha/clock.c > =================================================================== > RCS file: /cvs/src/sys/arch/alpha/alpha/clock.c,v > retrieving revision 1.28 > diff -u -p -r1.28 clock.c > --- arch/alpha/alpha/clock.c 25 Jul 2023 18:16:19 -0000 1.28 > +++ arch/alpha/alpha/clock.c 19 Aug 2023 18:16:17 -0000 > @@ -193,7 +193,11 @@ cpu_initclocks(void) > stathz = hz; > profhz = stathz; > clockintr_init(0); > +} > > +void > +cpu_startclock(void) > +{ > clockintr_cpu_init(NULL); > > /* > Index: arch/amd64/amd64/machdep.c > =================================================================== > RCS file: /cvs/src/sys/arch/amd64/amd64/machdep.c,v > retrieving revision 1.286 > diff -u -p -r1.286 machdep.c > --- arch/amd64/amd64/machdep.c 27 Jul 2023 00:28:25 -0000 1.286 > +++ arch/amd64/amd64/machdep.c 19 Aug 2023 18:16:18 -0000 > @@ -227,6 +227,7 @@ paddr_t avail_end; > > void (*delay_func)(int) = i8254_delay; > void (*initclock_func)(void) = i8254_initclocks; > +void (*startclock_func)(void) = i8254_start_both_clocks; > > /* > * Format of boot information passed to us by 32-bit /boot > @@ -1878,6 +1879,12 @@ void > cpu_initclocks(void) > { > (*initclock_func)(); > +} > + > +void > +cpu_startclock(void) > +{ > + (*startclock_func)(); > } > > void > Index: arch/amd64/amd64/lapic.c > =================================================================== > RCS file: /cvs/src/sys/arch/amd64/amd64/lapic.c,v > retrieving revision 1.68 > diff -u -p -r1.68 lapic.c > --- arch/amd64/amd64/lapic.c 26 Apr 2023 10:52:55 -0000 1.68 > +++ arch/amd64/amd64/lapic.c 19 Aug 2023 18:16:19 -0000 > @@ -499,8 +499,6 @@ lapic_initclocks(void) > stathz = hz; > profhz = stathz * 10; > clockintr_init(CL_RNDSTAT); > - > - lapic_startclock(); > } > > > @@ -599,6 +597,7 @@ skip_calibration: > lapic_per_second * (1ULL << 32) / 1000000000; > lapic_timer_nsec_max = UINT64_MAX / lapic_timer_nsec_cycle_ratio; > initclock_func = lapic_initclocks; > + startclock_func = lapic_startclock; > } > > /* > Index: arch/amd64/include/cpu.h > =================================================================== > RCS file: /cvs/src/sys/arch/amd64/include/cpu.h,v > retrieving revision 1.158 > diff -u -p -r1.158 cpu.h > --- arch/amd64/include/cpu.h 27 Jul 2023 00:28:24 -0000 1.158 > +++ arch/amd64/include/cpu.h 19 Aug 2023 18:16:19 -0000 > @@ -408,6 +408,8 @@ int amd64_pa_used(paddr_t); > extern void (*cpu_idle_cycle_fcn)(void); > #define cpu_idle_cycle() (*cpu_idle_cycle_fcn)() > #define cpu_idle_leave() do { /* nothing */ } while (0) > +extern void (*initclock_func)(void); > +extern void (*startclock_func)(void); > > struct region_descriptor; > void lgdt(struct region_descriptor *); > @@ -418,7 +420,6 @@ void switch_exit(struct proc *, void (*) > void proc_trampoline(void); > > /* clock.c */ > -extern void (*initclock_func)(void); > void startclocks(void); > void rtcinit(void); > void rtcstart(void); > @@ -426,6 +427,7 @@ void rtcstop(void); > void i8254_delay(int); > void i8254_initclocks(void); > void i8254_startclock(void); > +void i8254_start_both_clocks(void); > void i8254_inittimecounter(void); > void i8254_inittimecounter_simple(void); > > Index: arch/amd64/isa/clock.c > =================================================================== > RCS file: /cvs/src/sys/arch/amd64/isa/clock.c,v > retrieving revision 1.40 > diff -u -p -r1.40 clock.c > --- arch/amd64/isa/clock.c 25 Jul 2023 18:16:19 -0000 1.40 > +++ arch/amd64/isa/clock.c 19 Aug 2023 18:16:19 -0000 > @@ -284,7 +284,11 @@ i8254_initclocks(void) > stathz = 128; > profhz = 1024; /* XXX does not divide into 1 billion */ > clockintr_init(0); > +} > > +void > +i8254_start_both_clocks(void) > +{ > clockintr_cpu_init(NULL); > > /* > Index: arch/arm/cortex/agtimer.c > =================================================================== > RCS file: /cvs/src/sys/arch/arm/cortex/agtimer.c,v > retrieving revision 1.18 > diff -u -p -r1.18 agtimer.c > --- arch/arm/cortex/agtimer.c 25 Jul 2023 18:16:19 -0000 1.18 > +++ arch/arm/cortex/agtimer.c 19 Aug 2023 18:16:19 -0000 > @@ -227,7 +227,6 @@ void > agtimer_cpu_initclocks(void) > { > struct agtimer_softc *sc = agtimer_cd.cd_devs[0]; > - uint32_t reg; > > stathz = hz; > profhz = stathz * 10; > @@ -237,21 +236,11 @@ agtimer_cpu_initclocks(void) > agtimer_set_clockrate(agtimer_frequency); > } > > - clockintr_cpu_init(&agtimer_intrclock); > - > /* Setup secure and non-secure timer IRQs. */ > arm_intr_establish_fdt_idx(sc->sc_node, 0, IPL_CLOCK, > agtimer_intr, NULL, "tick"); > arm_intr_establish_fdt_idx(sc->sc_node, 1, IPL_CLOCK, > agtimer_intr, NULL, "tick"); > - > - reg = agtimer_get_ctrl(); > - reg &= ~GTIMER_CNTP_CTL_IMASK; > - reg |= GTIMER_CNTP_CTL_ENABLE; > - agtimer_set_tval(INT32_MAX); > - agtimer_set_ctrl(reg); > - > - clockintr_trigger(); > } > > void > Index: arch/arm/cortex/amptimer.c > =================================================================== > RCS file: /cvs/src/sys/arch/arm/cortex/amptimer.c,v > retrieving revision 1.17 > diff -u -p -r1.17 amptimer.c > --- arch/arm/cortex/amptimer.c 25 Jul 2023 18:16:19 -0000 1.17 > +++ arch/arm/cortex/amptimer.c 19 Aug 2023 18:16:19 -0000 > @@ -301,10 +301,6 @@ amptimer_cpu_initclocks(void) > /* Enable private timer counter and interrupt. */ > bus_space_write_4(sc->sc_iot, sc->sc_pioh, PTIMER_CTRL, > (PTIMER_CTRL_ENABLE | PTIMER_CTRL_IRQEN)); > - > - /* Start the clock interrupt cycle. */ > - clockintr_cpu_init(&timer_intrclock); > - clockintr_trigger(); > } > > void > Index: arch/arm/include/cpu.h > =================================================================== > RCS file: /cvs/src/sys/arch/arm/include/cpu.h,v > retrieving revision 1.63 > diff -u -p -r1.63 cpu.h > --- arch/arm/include/cpu.h 25 Jul 2023 18:16:19 -0000 1.63 > +++ arch/arm/include/cpu.h 19 Aug 2023 18:16:19 -0000 > @@ -329,8 +329,6 @@ intr_restore(u_long cpsr) > __asm volatile ("msr cpsr_c, %0" :: "r"(cpsr)); > } > > -void cpu_startclock(void); > - > #endif /* _KERNEL */ > > #ifdef MULTIPROCESSOR > Index: arch/armv7/omap/dmtimer.c > =================================================================== > RCS file: /cvs/src/sys/arch/armv7/omap/dmtimer.c,v > retrieving revision 1.19 > diff -u -p -r1.19 dmtimer.c > --- arch/armv7/omap/dmtimer.c 25 Jul 2023 18:16:19 -0000 1.19 > +++ arch/armv7/omap/dmtimer.c 19 Aug 2023 18:16:21 -0000 > @@ -102,6 +102,7 @@ int dmtimer_intr(void *frame); > void dmtimer_reset_tisr(void); > void dmtimer_wait(int reg); > void dmtimer_cpu_initclocks(void); > +void dmtimer_cpu_startclock(void); > void dmtimer_delay(u_int); > void dmtimer_setstatclockrate(int newhz); > > @@ -195,7 +196,7 @@ dmtimer_attach(struct device *parent, st > dmtimer_timecounter.tc_priv = sc; > tc_init(&dmtimer_timecounter); > arm_clock_register(dmtimer_cpu_initclocks, dmtimer_delay, > - dmtimer_setstatclockrate, NULL); > + dmtimer_setstatclockrate, dmtimer_cpu_startclock); > } > else > panic("attaching too many dmtimers at 0x%lx", > @@ -247,7 +248,11 @@ dmtimer_cpu_initclocks(void) > bus_space_write_4(sc->sc_iot, sc->sc_ioh[0], DM_TLDR, 0); > bus_space_write_4(sc->sc_iot, sc->sc_ioh[0], DM_TIER, DM_TIER_OVF_EN); > bus_space_write_4(sc->sc_iot, sc->sc_ioh[0], DM_TWER, DM_TWER_OVF_EN); > +} > > +void > +dmtimer_cpu_startclock(void) > +{ > /* start the clock interrupt cycle */ > clockintr_cpu_init(&dmtimer_intrclock); > clockintr_trigger(); > Index: arch/armv7/omap/gptimer.c > =================================================================== > RCS file: /cvs/src/sys/arch/armv7/omap/gptimer.c,v > retrieving revision 1.20 > diff -u -p -r1.20 gptimer.c > --- arch/armv7/omap/gptimer.c 25 Jul 2023 18:16:19 -0000 1.20 > +++ arch/armv7/omap/gptimer.c 19 Aug 2023 18:16:21 -0000 > @@ -99,6 +99,7 @@ void gptimer_attach(struct device *paren > int gptimer_intr(void *frame); > void gptimer_wait(int reg); > void gptimer_cpu_initclocks(void); > +void gptimer_cpu_startclock(void); > void gptimer_delay(u_int); > void gptimer_reset_tisr(void); > void gptimer_setstatclockrate(int newhz); > @@ -176,7 +177,7 @@ gptimer_attach(struct device *parent, st > aa->aa_dev->mem[0].addr); > > arm_clock_register(gptimer_cpu_initclocks, gptimer_delay, > - gptimer_setstatclockrate, NULL); > + gptimer_setstatclockrate, gptimer_cpu_startclock); > } > > int > @@ -216,7 +217,11 @@ gptimer_cpu_initclocks(void) > gptimer_wait(GP_TWPS_ALL); > bus_space_write_4(gptimer_iot, gptimer_ioh0, GP_TWER, GP_TWER_OVF_EN); > gptimer_wait(GP_TWPS_ALL); > +} > > +void > +gptimer_cpu_startclock(void) > +{ > /* start the clock interrupt cycle */ > clockintr_cpu_init(&gptimer_intrclock); > clockintr_trigger(); > Index: arch/armv7/sunxi/sxitimer.c > =================================================================== > RCS file: /cvs/src/sys/arch/armv7/sunxi/sxitimer.c,v > retrieving revision 1.21 > diff -u -p -r1.21 sxitimer.c > --- arch/armv7/sunxi/sxitimer.c 25 Jul 2023 18:16:19 -0000 1.21 > +++ arch/armv7/sunxi/sxitimer.c 19 Aug 2023 18:16:21 -0000 > @@ -77,6 +77,7 @@ void sxitimer_attach(struct device *, st > int sxitimer_tickintr(void *); > int sxitimer_statintr(void *); > void sxitimer_cpu_initclocks(void); > +void sxitimer_cpu_startclock(void); > void sxitimer_setstatclockrate(int); > uint64_t sxitimer_readcnt64(void); > uint32_t sxitimer_readcnt32(void); > @@ -191,7 +192,7 @@ sxitimer_attach(struct device *parent, s > tc_init(&sxitimer_timecounter); > > arm_clock_register(sxitimer_cpu_initclocks, sxitimer_delay, > - sxitimer_setstatclockrate, NULL); > + sxitimer_setstatclockrate, sxitimer_cpu_startclock); > > printf(": %d kHz", sxitimer_freq[CNTRTIMER] / 1000); > > @@ -229,7 +230,11 @@ sxitimer_cpu_initclocks(void) > bus_space_write_4(sxitimer_iot, sxitimer_ioh, > TIMER_CTRL(CNTRTIMER), > ctrl | TIMER_ENABLE | TIMER_RELOAD | TIMER_CONTINOUS); > +} > > +void > +sxitimer_cpu_startclock(void) > +{ > /* start clock interrupt cycle */ > clockintr_cpu_init(&sxitimer_intrclock); > clockintr_trigger(); > Index: arch/arm64/dev/agtimer.c > =================================================================== > RCS file: /cvs/src/sys/arch/arm64/dev/agtimer.c,v > retrieving revision 1.25 > diff -u -p -r1.25 agtimer.c > --- arch/arm64/dev/agtimer.c 11 Aug 2023 01:28:19 -0000 1.25 > +++ arch/arm64/dev/agtimer.c 19 Aug 2023 18:16:21 -0000 > @@ -290,8 +290,6 @@ void > agtimer_cpu_initclocks(void) > { > struct agtimer_softc *sc = agtimer_cd.cd_devs[0]; > - uint32_t reg; > - uint64_t kctl; > > stathz = hz; > profhz = stathz * 10; > @@ -304,20 +302,6 @@ agtimer_cpu_initclocks(void) > /* configure virtual timer interrupt */ > sc->sc_ih = arm_intr_establish_fdt_idx(sc->sc_node, 2, > IPL_CLOCK|IPL_MPSAFE, agtimer_intr, NULL, "tick"); > - > - clockintr_cpu_init(&agtimer_intrclock); > - > - reg = agtimer_get_ctrl(); > - reg &= ~GTIMER_CNTV_CTL_IMASK; > - reg |= GTIMER_CNTV_CTL_ENABLE; > - agtimer_set_tval(INT32_MAX); > - agtimer_set_ctrl(reg); > - > - clockintr_trigger(); > - > - /* enable userland access to virtual counter */ > - kctl = READ_SPECIALREG(CNTKCTL_EL1); > - WRITE_SPECIALREG(CNTKCTL_EL1, kctl | CNTKCTL_EL0VCTEN); > } > > void > @@ -343,7 +327,8 @@ agtimer_startclock(void) > uint64_t kctl; > uint32_t reg; > > - arm_intr_route(sc->sc_ih, 1, curcpu()); > + if (!CPU_IS_PRIMARY(curcpu())) > + arm_intr_route(sc->sc_ih, 1, curcpu()); > > clockintr_cpu_init(&agtimer_intrclock); > > Index: arch/arm64/include/cpu.h > =================================================================== > RCS file: /cvs/src/sys/arch/arm64/include/cpu.h,v > retrieving revision 1.38 > diff -u -p -r1.38 cpu.h > --- arch/arm64/include/cpu.h 25 Jul 2023 18:16:20 -0000 1.38 > +++ arch/arm64/include/cpu.h 19 Aug 2023 18:16:21 -0000 > @@ -344,7 +344,6 @@ intr_restore(u_long daif) > } > > void cpu_halt(void); > -void cpu_startclock(void); > int cpu_suspend_primary(void); > void cpu_resume_secondary(struct cpu_info *); > > Index: arch/hppa/dev/clock.c > =================================================================== > RCS file: /cvs/src/sys/arch/hppa/dev/clock.c,v > retrieving revision 1.36 > diff -u -p -r1.36 clock.c > --- arch/hppa/dev/clock.c 25 Jul 2023 18:16:20 -0000 1.36 > +++ arch/hppa/dev/clock.c 19 Aug 2023 18:16:21 -0000 > @@ -120,8 +120,6 @@ cpu_initclocks(void) > > itmr_nsec_cycle_ratio = itmr_freq * (1ULL << 32) / 1000000000; > itmr_nsec_max = UINT64_MAX / itmr_nsec_cycle_ratio; > - > - cpu_startclock(); > } > > void > Index: arch/hppa/include/cpu.h > =================================================================== > RCS file: /cvs/src/sys/arch/hppa/include/cpu.h,v > retrieving revision 1.100 > diff -u -p -r1.100 cpu.h > --- arch/hppa/include/cpu.h 25 Jul 2023 18:16:20 -0000 1.100 > +++ arch/hppa/include/cpu.h 19 Aug 2023 18:16:21 -0000 > @@ -241,7 +241,6 @@ int copy_on_fault(void); > void proc_trampoline(void); > int cpu_dumpsize(void); > int cpu_dump(void); > -void cpu_startclock(void); > > static inline unsigned int > cpu_rnd_messybits(void) > Index: arch/i386/i386/lapic.c > =================================================================== > RCS file: /cvs/src/sys/arch/i386/i386/lapic.c,v > retrieving revision 1.55 > diff -u -p -r1.55 lapic.c > --- arch/i386/i386/lapic.c 9 Feb 2023 01:41:15 -0000 1.55 > +++ arch/i386/i386/lapic.c 19 Aug 2023 18:16:21 -0000 > @@ -327,8 +327,6 @@ lapic_initclocks(void) > stathz = hz; > profhz = stathz * 10; > clockintr_init(CL_RNDSTAT); > - > - lapic_startclock(); > } > > extern int gettick(void); /* XXX put in header file */ > @@ -422,6 +420,7 @@ lapic_calibrate_timer(struct cpu_info *c > lapic_per_second * (1ULL << 32) / 1000000000; > lapic_timer_nsec_max = UINT64_MAX / lapic_timer_nsec_cycle_ratio; > initclock_func = lapic_initclocks; > + startclock_func = lapic_startclock; > } > > /* > Index: arch/i386/i386/machdep.c > =================================================================== > RCS file: /cvs/src/sys/arch/i386/i386/machdep.c,v > retrieving revision 1.668 > diff -u -p -r1.668 machdep.c > --- arch/i386/i386/machdep.c 16 Aug 2023 09:51:39 -0000 1.668 > +++ arch/i386/i386/machdep.c 19 Aug 2023 18:16:24 -0000 > @@ -233,6 +233,7 @@ void (*cpusensors_setup)(struct cpu_info > > void (*delay_func)(int) = i8254_delay; > void (*initclock_func)(void) = i8254_initclocks; > +void (*startclock_func)(void) = i8254_start_both_clocks; > > /* > * Extent maps to manage I/O and ISA memory hole space. Allocate > @@ -3436,6 +3437,12 @@ void > cpu_initclocks(void) > { > (*initclock_func)(); /* lapic or i8254 */ > +} > + > +void > +cpu_startclock(void) > +{ > + (*startclock_func)(); > } > > void > Index: arch/i386/include/cpu.h > =================================================================== > RCS file: /cvs/src/sys/arch/i386/include/cpu.h,v > retrieving revision 1.182 > diff -u -p -r1.182 cpu.h > --- arch/i386/include/cpu.h 25 Jul 2023 18:16:20 -0000 1.182 > +++ arch/i386/include/cpu.h 19 Aug 2023 18:16:27 -0000 > @@ -399,6 +399,9 @@ extern int i386_has_sse2; > > extern void (*update_cpuspeed)(void); > > +extern void (*initclock_func)(void); > +extern void (*startclock_func)(void); > + > /* machdep.c */ > void dumpconf(void); > void cpu_reset(void); > @@ -416,7 +419,6 @@ void switch_exit(struct proc *); > void proc_trampoline(void); > > /* clock.c */ > -extern void (*initclock_func)(void); > void startclocks(void); > void rtcinit(void); > void rtcstart(void); > @@ -424,6 +426,7 @@ void rtcstop(void); > void i8254_delay(int); > void i8254_initclocks(void); > void i8254_startclock(void); > +void i8254_start_both_clocks(void); > void i8254_inittimecounter(void); > void i8254_inittimecounter_simple(void); > > Index: arch/i386/isa/clock.c > =================================================================== > RCS file: /cvs/src/sys/arch/i386/isa/clock.c,v > retrieving revision 1.65 > diff -u -p -r1.65 clock.c > --- arch/i386/isa/clock.c 25 Jul 2023 18:16:20 -0000 1.65 > +++ arch/i386/isa/clock.c 19 Aug 2023 18:16:27 -0000 > @@ -427,7 +427,11 @@ i8254_initclocks(void) > stathz = 128; > profhz = 1024; /* XXX does not divide into 1 billion */ > clockintr_init(0); > +} > > +void > +i8254_start_both_clocks(void) > +{ > clockintr_cpu_init(NULL); > > /* When using i8254 for clock, we also use the rtc for profclock */ > Index: arch/luna88k/luna88k/clock.c > =================================================================== > RCS file: /cvs/src/sys/arch/luna88k/luna88k/clock.c,v > retrieving revision 1.17 > diff -u -p -r1.17 clock.c > --- arch/luna88k/luna88k/clock.c 25 Jul 2023 18:16:20 -0000 1.17 > +++ arch/luna88k/luna88k/clock.c 19 Aug 2023 18:16:27 -0000 > @@ -139,7 +139,11 @@ cpu_initclocks() > stathz = hz; > profhz = stathz; > clockintr_init(0); > +} > > +void > +cpu_startclock(void) > +{ > clockintr_cpu_init(NULL); > > clockinitted = 1; > Index: arch/macppc/macppc/clock.c > =================================================================== > RCS file: /cvs/src/sys/arch/macppc/macppc/clock.c,v > retrieving revision 1.55 > diff -u -p -r1.55 clock.c > --- arch/macppc/macppc/clock.c 25 Jul 2023 18:16:20 -0000 1.55 > +++ arch/macppc/macppc/clock.c 19 Aug 2023 18:16:35 -0000 > @@ -147,8 +147,6 @@ decr_intr(struct clockframe *frame) > (void) ppc_intr_disable(); > } > > -void cpu_startclock(void); > - > void > cpu_initclocks(void) > { > @@ -204,15 +202,13 @@ cpu_initclocks(void) > > evcount_attach(&clk_count, "clock", &clk_irq); > > - clock_initialized = 1; > - cpu_startclock(); > - > ppc_intr_enable(intrstate); > } > > void > cpu_startclock(void) > { > + clock_initialized = 1; > clockintr_cpu_init(&dec_intrclock); > clockintr_trigger(); > } > Index: arch/mips64/mips64/mips64_machdep.c > =================================================================== > RCS file: /cvs/src/sys/arch/mips64/mips64/mips64_machdep.c,v > retrieving revision 1.42 > diff -u -p -r1.42 mips64_machdep.c > --- arch/mips64/mips64/mips64_machdep.c 25 Jul 2023 18:16:20 -0000 > 1.42 > +++ arch/mips64/mips64/mips64_machdep.c 19 Aug 2023 18:16:35 -0000 > @@ -322,12 +322,16 @@ cpu_initclocks(void) > (uint64_t)ci->ci_hw.clock / CP0_CYCLE_DIVIDER; > tc_init(&cp0_timecounter); > } > +} > > +void > +cpu_startclock(void) > +{ > #ifdef DIAGNOSTIC > if (md_startclock == NULL) > panic("no clock"); > #endif > - (*md_startclock)(ci); > + (*md_startclock)(curcpu()); > } > > void > Index: arch/powerpc64/powerpc64/clock.c > =================================================================== > RCS file: /cvs/src/sys/arch/powerpc64/powerpc64/clock.c,v > retrieving revision 1.11 > diff -u -p -r1.11 clock.c > --- arch/powerpc64/powerpc64/clock.c 25 Jul 2023 18:16:21 -0000 1.11 > +++ arch/powerpc64/powerpc64/clock.c 19 Aug 2023 18:16:35 -0000 > @@ -53,8 +53,6 @@ static struct timecounter tb_timecounter > .tc_user = TC_TB, > }; > > -void cpu_startclock(void); > - > void > dec_rearm(void *unused, uint64_t nsecs) > { > @@ -99,8 +97,6 @@ cpu_initclocks(void) > clockintr_init(CL_RNDSTAT); > > evcount_attach(&clock_count, "clock", NULL); > - > - cpu_startclock(); > } > > void > Index: arch/powerpc64/include/cpu.h > =================================================================== > RCS file: /cvs/src/sys/arch/powerpc64/include/cpu.h,v > retrieving revision 1.33 > diff -u -p -r1.33 cpu.h > --- arch/powerpc64/include/cpu.h 29 Nov 2022 01:04:44 -0000 1.33 > +++ arch/powerpc64/include/cpu.h 19 Aug 2023 18:16:35 -0000 > @@ -153,7 +153,6 @@ curcpu(void) > void cpu_kick(struct cpu_info *); > void cpu_unidle(struct cpu_info *); > void cpu_boot_secondary_processors(void); > -void cpu_startclock(void); > > extern void (*ul_setperf)(int); > void mp_setperf(int); > Index: arch/riscv64/riscv64/clock.c > =================================================================== > RCS file: /cvs/src/sys/arch/riscv64/riscv64/clock.c,v > retrieving revision 1.10 > diff -u -p -r1.10 clock.c > --- arch/riscv64/riscv64/clock.c 25 Jul 2023 18:16:21 -0000 1.10 > +++ arch/riscv64/riscv64/clock.c 19 Aug 2023 18:16:35 -0000 > @@ -56,7 +56,6 @@ static struct timecounter tb_timecounter > .tc_user = TC_TB, > }; > > -void cpu_startclock(void); > int clock_intr(void *); > > void > @@ -100,8 +99,6 @@ cpu_initclocks(void) > > evcount_attach(&clock_count, "clock", NULL); > evcount_percpu(&clock_count); > - > - cpu_startclock(); > } > > void > Index: arch/riscv64/include/cpu.h > =================================================================== > RCS file: /cvs/src/sys/arch/riscv64/include/cpu.h,v > retrieving revision 1.17 > diff -u -p -r1.17 cpu.h > --- arch/riscv64/include/cpu.h 5 Aug 2023 05:45:52 -0000 1.17 > +++ arch/riscv64/include/cpu.h 19 Aug 2023 18:16:38 -0000 > @@ -171,7 +171,6 @@ extern struct cpu_info *cpu_info_list; > extern struct cpu_info *cpu_info[MAXCPUS]; > > void cpu_boot_secondary_processors(void); > -void cpu_startclock(void); > > #endif /* !MULTIPROCESSOR */ > > Index: arch/sh/sh/clock.c > =================================================================== > RCS file: /cvs/src/sys/arch/sh/sh/clock.c,v > retrieving revision 1.15 > diff -u -p -r1.15 clock.c > --- arch/sh/sh/clock.c 25 Jul 2023 18:16:21 -0000 1.15 > +++ arch/sh/sh/clock.c 19 Aug 2023 18:16:38 -0000 > @@ -260,7 +260,11 @@ cpu_initclocks(void) > stathz = hz; > profhz = stathz; > clockintr_init(0); > +} > > +void > +cpu_startclock(void) > +{ > clockintr_cpu_init(NULL); > > /* > Index: arch/sparc64/sparc64/clock.c > =================================================================== > RCS file: /cvs/src/sys/arch/sparc64/sparc64/clock.c,v > retrieving revision 1.79 > diff -u -p -r1.79 clock.c > --- arch/sparc64/sparc64/clock.c 7 Aug 2023 17:11:13 -0000 1.79 > +++ arch/sparc64/sparc64/clock.c 19 Aug 2023 18:16:38 -0000 > @@ -562,7 +562,11 @@ cpu_initclocks(void) > > for (ci = cpus; ci != NULL; ci = ci->ci_next) > memcpy(&ci->ci_tickintr, &level0, sizeof(level0)); > +} > > +void > +cpu_startclock(void) > +{ > cpu_start_clock(); > } > >