kern_pmc.c (153072) | kern_pmc.c (174395) |
---|---|
1/*- | 1/*- |
2 * Copyright (c) 2003-2005, Joseph Koshy | 2 * Copyright (c) 2003-2007 Joseph Koshy 3 * Copyright (c) 2007 The FreeBSD Foundation 4 * All rights reserved. |
3 * | 5 * |
6 * Portions of this software were developed by A. Joseph Koshy under 7 * sponsorship from the FreeBSD Foundation and Google, Inc. 8 * |
|
4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. --- 7 unchanged lines hidden (view full) --- 19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23 * SUCH DAMAGE. 24 */ 25 26#include <sys/cdefs.h> | 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. --- 7 unchanged lines hidden (view full) --- 24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * SUCH DAMAGE. 29 */ 30 31#include <sys/cdefs.h> |
27__FBSDID("$FreeBSD: head/sys/kern/kern_pmc.c 153072 2005-12-04 02:12:43Z ru $"); | 32__FBSDID("$FreeBSD: head/sys/kern/kern_pmc.c 174395 2007-12-07 08:20:17Z jkoshy $"); |
28 29#include "opt_hwpmc_hooks.h" 30 31#include <sys/types.h> 32#include <sys/pmc.h> 33#include <sys/pmckern.h> 34#include <sys/smp.h> 35 --- 4 unchanged lines hidden (view full) --- 40#endif 41 42const int pmc_kernel_version = PMC_KERNEL_VERSION; 43 44/* Hook variable. */ 45int (*pmc_hook)(struct thread *td, int function, void *arg) = NULL; 46 47/* Interrupt handler */ | 33 34#include "opt_hwpmc_hooks.h" 35 36#include <sys/types.h> 37#include <sys/pmc.h> 38#include <sys/pmckern.h> 39#include <sys/smp.h> 40 --- 4 unchanged lines hidden (view full) --- 45#endif 46 47const int pmc_kernel_version = PMC_KERNEL_VERSION; 48 49/* Hook variable. */ 50int (*pmc_hook)(struct thread *td, int function, void *arg) = NULL; 51 52/* Interrupt handler */ |
48int (*pmc_intr)(int cpu, uintptr_t pc, int usermode) = NULL; | 53int (*pmc_intr)(int cpu, struct trapframe *tf) = NULL; |
49 50/* Bitmask of CPUs requiring servicing at hardclock time */ 51volatile cpumask_t pmc_cpumask; 52 53/* 54 * A global count of SS mode PMCs. When non-zero, this means that 55 * we have processes that are sampling the system as a whole. 56 */ --- 4 unchanged lines hidden (view full) --- 61 * convention followed is that a non-NULL value of 'pmc_hook' implies 62 * the presence of this kernel module. 63 * 64 * This requires us to protect 'pmc_hook' with a 65 * shared (sx) lock -- thus making the process of calling into PMC(4) 66 * somewhat more expensive than a simple 'if' check and indirect call. 67 */ 68struct sx pmc_sx; | 54 55/* Bitmask of CPUs requiring servicing at hardclock time */ 56volatile cpumask_t pmc_cpumask; 57 58/* 59 * A global count of SS mode PMCs. When non-zero, this means that 60 * we have processes that are sampling the system as a whole. 61 */ --- 4 unchanged lines hidden (view full) --- 66 * convention followed is that a non-NULL value of 'pmc_hook' implies 67 * the presence of this kernel module. 68 * 69 * This requires us to protect 'pmc_hook' with a 70 * shared (sx) lock -- thus making the process of calling into PMC(4) 71 * somewhat more expensive than a simple 'if' check and indirect call. 72 */ 73struct sx pmc_sx; |
69SX_SYSINIT(pmc, &pmc_sx, "pmc shared lock"); | |
70 | 74 |
75static void 76pmc_init_sx(void) 77{ 78 sx_init_flags(&pmc_sx, "pmc-sx", SX_NOWITNESS); 79} 80 81SYSINIT(pmcsx, SI_SUB_LOCK, SI_ORDER_MIDDLE, pmc_init_sx, NULL); 82 |
|
71/* 72 * Helper functions 73 */ 74 75int 76pmc_cpu_is_disabled(int cpu) 77{ 78#ifdef SMP --- 15 unchanged lines hidden --- | 83/* 84 * Helper functions 85 */ 86 87int 88pmc_cpu_is_disabled(int cpu) 89{ 90#ifdef SMP --- 15 unchanged lines hidden --- |