Deleted Added
full compact
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 ---