Hello,

On Sat, 09 Jan 2021 01:18:27 +0900,
Scott Cheloha wrote:

> > > > Anyway, I don't think I have missed any platforms.  However, if
> > > > platform experts could weigh in here to verify my changes (and test
> > > > them!) I'd really appreciate it.

> Also, sorry if I've CC'd you and you're not the right person for one
> of these platforms/architectures.  My thinking is:
> 
> miod: loongson (?), sh
> aoyama: luna88k
> visa: mips64, sgi
> deraadt: alpha
> kettenis: hppa
> sthen: i386

Yes, I am the right person for luna88k:-)
I applied this diff and it works well on my luna88k box.

-- aoyama

> Index: sys/kern/kern_clock.c
> ===================================================================
> RCS file: /cvs/src/sys/kern/kern_clock.c,v
> retrieving revision 1.101
> diff -u -p -r1.101 kern_clock.c
> --- sys/kern/kern_clock.c     21 Jan 2020 16:16:23 -0000      1.101
> +++ sys/kern/kern_clock.c     8 Jan 2021 15:56:24 -0000
> @@ -164,12 +164,6 @@ hardclock(struct clockframe *frame)
>               }
>       }
>  
> -     /*
> -      * If no separate statistics clock is available, run it from here.
> -      */
> -     if (stathz == 0)
> -             statclock(frame);
> -
>       if (--ci->ci_schedstate.spc_rrticks <= 0)
>               roundrobin(ci);
>  
> Index: sys/arch/alpha/alpha/clock.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/alpha/alpha/clock.c,v
> retrieving revision 1.24
> diff -u -p -r1.24 clock.c
> --- sys/arch/alpha/alpha/clock.c      6 Jul 2020 13:33:06 -0000       1.24
> +++ sys/arch/alpha/alpha/clock.c      8 Jan 2021 15:56:24 -0000
> @@ -136,6 +136,13 @@ clockattach(dev, fns)
>   * Machine-dependent clock routines.
>   */
>  
> +void
> +clockintr(struct clockframe *frame)
> +{
> +     hardclock(frame);
> +     statclock(frame);
> +}
> +
>  /*
>   * Start the real-time and statistics clocks. Leave stathz 0 since there
>   * are no other timers available.
> @@ -165,7 +172,7 @@ cpu_initclocks(void)
>        * hardclock, which would then fall over because the pointer
>        * to the virtual timers wasn't set at that time.
>        */
> -     platform.clockintr = hardclock;
> +     platform.clockintr = clockintr;
>       schedhz = 16;
>  
>       evcount_attach(&clk_count, "clock", &clk_irq);
> Index: sys/arch/amd64/amd64/lapic.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/amd64/amd64/lapic.c,v
> retrieving revision 1.57
> diff -u -p -r1.57 lapic.c
> --- sys/arch/amd64/amd64/lapic.c      6 Sep 2020 20:50:00 -0000       1.57
> +++ sys/arch/amd64/amd64/lapic.c      8 Jan 2021 15:56:25 -0000
> @@ -452,6 +452,7 @@ lapic_clockintr(void *arg, struct intrfr
>       floor = ci->ci_handled_intr_level;
>       ci->ci_handled_intr_level = ci->ci_ilevel;
>       hardclock((struct clockframe *)&frame);
> +     statclock((struct clockframe *)&frame);
>       ci->ci_handled_intr_level = floor;
>  
>       clk_count.ec_count++;
> Index: sys/arch/hppa/dev/clock.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/hppa/dev/clock.c,v
> retrieving revision 1.31
> diff -u -p -r1.31 clock.c
> --- sys/arch/hppa/dev/clock.c 6 Jul 2020 13:33:07 -0000       1.31
> +++ sys/arch/hppa/dev/clock.c 8 Jan 2021 15:56:25 -0000
> @@ -43,7 +43,7 @@
>  
>  u_long       cpu_hzticks;
>  
> -int  cpu_hardclock(void *);
> +int  cpu_clockintr(void *);
>  u_int        itmr_get_timecount(struct timecounter *);
>  
>  struct timecounter itmr_timecounter = {
> @@ -106,7 +106,7 @@ cpu_initclocks(void)
>  }
>  
>  int
> -cpu_hardclock(void *v)
> +cpu_clockintr(void *v)
>  {
>       struct cpu_info *ci = curcpu();
>       u_long __itmr, delta, eta;
> @@ -114,14 +114,15 @@ cpu_hardclock(void *v)
>       register_t eiem;
>  
>       /*
> -      * Invoke hardclock as many times as there has been cpu_hzticks
> -      * ticks since the last interrupt.
> +      * Invoke hardclock and statclock as many times as there has been
> +      * cpu_hzticks ticks since the last interrupt.
>        */
>       for (;;) {
>               mfctl(CR_ITMR, __itmr);
>               delta = __itmr - ci->ci_itmr;
>               if (delta >= cpu_hzticks) {
>                       hardclock(v);
> +                     statclock(v);
>                       ci->ci_itmr += cpu_hzticks;
>               } else
>                       break;
> Index: sys/arch/hppa/dev/cpu.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/hppa/dev/cpu.c,v
> retrieving revision 1.42
> diff -u -p -r1.42 cpu.c
> --- sys/arch/hppa/dev/cpu.c   29 May 2020 04:42:23 -0000      1.42
> +++ sys/arch/hppa/dev/cpu.c   8 Jan 2021 15:56:25 -0000
> @@ -89,7 +89,7 @@ cpuattach(struct device *parent, struct 
>       extern u_int cpu_ticksnum, cpu_ticksdenom;
>       extern u_int fpu_enable;
>       /* clock.c */
> -     extern int cpu_hardclock(void *);
> +     extern int cpu_clockintr(void *);
>       /* ipi.c */
>       extern int hppa_ipi_intr(void *);
>  
> @@ -173,7 +173,7 @@ cpuattach(struct device *parent, struct 
>               printf(", %u/%u D/I BTLBs",
>                   pdc_btlb.finfo.num_i, pdc_btlb.finfo.num_d);
>  
> -     cpu_intr_establish(IPL_CLOCK, 31, cpu_hardclock, NULL, "clock");
> +     cpu_intr_establish(IPL_CLOCK, 31, cpu_clockintr, NULL, "clock");
>  #ifdef MULTIPROCESSOR
>       cpu_intr_establish(IPL_IPI, 30, hppa_ipi_intr, NULL, "ipi");
>  #endif
> Index: sys/arch/i386/i386/lapic.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/i386/i386/lapic.c,v
> retrieving revision 1.47
> diff -u -p -r1.47 lapic.c
> --- sys/arch/i386/i386/lapic.c        30 Jul 2018 14:19:12 -0000      1.47
> +++ sys/arch/i386/i386/lapic.c        8 Jan 2021 15:56:25 -0000
> @@ -257,6 +257,7 @@ lapic_clockintr(void *arg)
>       struct clockframe *frame = arg;
>  
>       hardclock(frame);
> +     statclock(frame);
>  
>       clk_count.ec_count++;
>  }
> Index: sys/arch/loongson/dev/glxclk.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/loongson/dev/glxclk.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 glxclk.c
> --- sys/arch/loongson/dev/glxclk.c    19 Jul 2015 21:11:47 -0000      1.5
> +++ sys/arch/loongson/dev/glxclk.c    8 Jan 2021 15:56:25 -0000
> @@ -286,6 +286,7 @@ glxclk_intr(void *arg)
>               return 1;
>  
>       hardclock(frame);
> +     statclock(frame);
>  
>       return 1;
>  }
> Index: sys/arch/luna88k/luna88k/clock.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/luna88k/luna88k/clock.c,v
> retrieving revision 1.15
> diff -u -p -r1.15 clock.c
> --- sys/arch/luna88k/luna88k/clock.c  6 Jul 2020 13:33:07 -0000       1.15
> +++ sys/arch/luna88k/luna88k/clock.c  8 Jan 2021 15:56:25 -0000
> @@ -165,8 +165,10 @@ clockintr(void *eframe)
>               clockevc->ec_count++;
>  
>       *(volatile uint32_t *)(ci->ci_clock_ack) = ~0;
> -     if (clockinitted)
> +     if (clockinitted) {
>               hardclock(eframe);
> +             statclock(eframe);
> +     }
>       return 1;
>  }
>  
> Index: sys/arch/mips64/mips64/clock.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/mips64/mips64/clock.c,v
> retrieving revision 1.42
> diff -u -p -r1.42 clock.c
> --- sys/arch/mips64/mips64/clock.c    30 Jun 2020 14:56:10 -0000      1.42
> +++ sys/arch/mips64/mips64/clock.c    8 Jan 2021 15:56:25 -0000
> @@ -151,6 +151,7 @@ cp0_int5(uint32_t mask, struct trapframe
>               while (ci->ci_pendingticks) {
>                       cp0_clock_count.ec_count++;
>                       hardclock(tf);
> +                     statclock(tf);
>                       ci->ci_pendingticks--;
>               }
>  #ifdef MULTIPROCESSOR
> Index: sys/arch/sgi/localbus/int.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/sgi/localbus/int.c,v
> retrieving revision 1.15
> diff -u -p -r1.15 int.c
> --- sys/arch/sgi/localbus/int.c       24 Feb 2018 11:42:31 -0000      1.15
> +++ sys/arch/sgi/localbus/int.c       8 Jan 2021 15:56:25 -0000
> @@ -524,6 +524,7 @@ int_8254_intr0(uint32_t hwpend, struct t
>                       while (ci->ci_pendingticks) {
>                               int_clock_count.ec_count++;
>                               hardclock(tf);
> +                             statclock(tf);
>                               ci->ci_pendingticks--;
>                       }
>               }
> Index: sys/arch/sh/sh/clock.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/sh/sh/clock.c,v
> retrieving revision 1.11
> diff -u -p -r1.11 clock.c
> --- sys/arch/sh/sh/clock.c    20 Oct 2020 15:59:17 -0000      1.11
> +++ sys/arch/sh/sh/clock.c    8 Jan 2021 15:56:25 -0000
> @@ -333,6 +333,7 @@ sh3_clock_intr(void *arg) /* trap frame 
>       _reg_bclr_2(SH3_TCR0, TCR_UNF);
>  
>       hardclock(arg);
> +     statclock(arg);
>  
>       return (1);
>  }
> @@ -354,6 +355,7 @@ sh4_clock_intr(void *arg) /* trap frame 
>       _reg_bclr_2(SH4_TCR0, TCR_UNF);
>  
>       hardclock(arg);
> +     statclock(arg);
>  
>       return (1);
>  }

Reply via email to