Module Name: src Committed By: cliff Date: Sun Mar 21 18:45:53 UTC 2010
Modified Files: src/sys/arch/mips/mips [matt-nb5-mips64]: mips3_clockintr.c Log Message: - mips_int5_evcnt, mips_int5_missed_evcnt and next_cp0_clk_intr were moved to struct cpu_info to allow per-CPU MIPS count/compare clock programming To generate a diff of this commit: cvs rdiff -u -r1.8.12.1 -r1.8.12.2 src/sys/arch/mips/mips/mips3_clockintr.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/mips/mips/mips3_clockintr.c diff -u src/sys/arch/mips/mips/mips3_clockintr.c:1.8.12.1 src/sys/arch/mips/mips/mips3_clockintr.c:1.8.12.2 --- src/sys/arch/mips/mips/mips3_clockintr.c:1.8.12.1 Mon Feb 15 07:36:03 2010 +++ src/sys/arch/mips/mips/mips3_clockintr.c Sun Mar 21 18:45:53 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: mips3_clockintr.c,v 1.8.12.1 2010/02/15 07:36:03 matt Exp $ */ +/* $NetBSD: mips3_clockintr.c,v 1.8.12.2 2010/03/21 18:45:53 cliff Exp $ */ /* * Copyright (c) 1992, 1993 @@ -78,7 +78,7 @@ #include <sys/cdefs.h> /* RCS ID & Copyright macro defns */ -__KERNEL_RCSID(0, "$NetBSD: mips3_clockintr.c,v 1.8.12.1 2010/02/15 07:36:03 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mips3_clockintr.c,v 1.8.12.2 2010/03/21 18:45:53 cliff Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -90,13 +90,6 @@ #include <machine/locore.h> -struct evcnt mips_int5_evcnt = - EVCNT_INITIALIZER(EVCNT_TYPE_INTR, NULL, "mips", "int 5 (clock)"); -struct evcnt mips_int5_missed_evcnt = - EVCNT_INITIALIZER(EVCNT_TYPE_INTR, NULL, "mips", "missed int 5"); - -uint32_t next_cp0_clk_intr; /* used to schedule hard clock interrupts */ - /* * Handling to be done upon receipt of a MIPS 3 clock interrupt. This * routine is to be called from the master interrupt routine @@ -107,12 +100,14 @@ void mips3_clockintr(struct clockframe *cfp) { + struct cpu_info * const ci = curcpu(); uint32_t new_cnt; - mips_int5_evcnt.ev_count++; + ci->ci_count_compare_evcnt.ev_count++; - next_cp0_clk_intr += curcpu()->ci_cycles_per_hz; - mips3_cp0_compare_write(next_cp0_clk_intr); + KASSERT((ci->ci_cycles_per_hz & ~(0xffffffff)) == 0); + ci->ci_next_cp0_clk_intr += (uint32_t)(ci->ci_cycles_per_hz & 0xffffffff); + mips3_cp0_compare_write(ci->ci_next_cp0_clk_intr); /* Check for lost clock interrupts */ new_cnt = mips3_cp0_count_read(); @@ -121,11 +116,11 @@ * Missed one or more clock interrupts, so let's start * counting again from the current value. */ - if ((next_cp0_clk_intr - new_cnt) & 0x80000000) { + if ((ci->ci_next_cp0_clk_intr - new_cnt) & 0x80000000) { - next_cp0_clk_intr = new_cnt + curcpu()->ci_cycles_per_hz; - mips3_cp0_compare_write(next_cp0_clk_intr); - mips_int5_missed_evcnt.ev_count++; + ci->ci_next_cp0_clk_intr = new_cnt + curcpu()->ci_cycles_per_hz; + mips3_cp0_compare_write(ci->ci_next_cp0_clk_intr); + curcpu()->ci_count_compare_missed_evcnt.ev_count++; } /* @@ -144,10 +139,10 @@ void mips3_initclocks(void) { - evcnt_attach_static(&mips_int5_evcnt); + struct cpu_info * const ci = curcpu(); - next_cp0_clk_intr = mips3_cp0_count_read() + curcpu()->ci_cycles_per_hz; - mips3_cp0_compare_write(next_cp0_clk_intr); + ci->ci_next_cp0_clk_intr = mips3_cp0_count_read() + ci->ci_cycles_per_hz; + mips3_cp0_compare_write(ci->ci_next_cp0_clk_intr); mips3_init_tc();