Deleted Added
full compact
libpmc.c (281098) libpmc.c (281713)
1/*-
2 * Copyright (c) 2003-2008 Joseph Koshy
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2003-2008 Joseph Koshy
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: head/lib/libpmc/libpmc.c 281098 2015-04-05 02:57:02Z adrian $");
28__FBSDID("$FreeBSD: head/lib/libpmc/libpmc.c 281713 2015-04-18 21:39:17Z jhibbits $");
29
30#include <sys/types.h>
31#include <sys/param.h>
32#include <sys/module.h>
33#include <sys/pmc.h>
34#include <sys/syscall.h>
35
36#include <ctype.h>

--- 122 unchanged lines hidden (view full) ---

159PMC_CLASSDEP_TABLE(xscale, XSCALE);
160PMC_CLASSDEP_TABLE(armv7, ARMV7);
161PMC_CLASSDEP_TABLE(mips24k, MIPS24K);
162PMC_CLASSDEP_TABLE(mips74k, MIPS74K);
163PMC_CLASSDEP_TABLE(octeon, OCTEON);
164PMC_CLASSDEP_TABLE(ucf, UCF);
165PMC_CLASSDEP_TABLE(ppc7450, PPC7450);
166PMC_CLASSDEP_TABLE(ppc970, PPC970);
29
30#include <sys/types.h>
31#include <sys/param.h>
32#include <sys/module.h>
33#include <sys/pmc.h>
34#include <sys/syscall.h>
35
36#include <ctype.h>

--- 122 unchanged lines hidden (view full) ---

159PMC_CLASSDEP_TABLE(xscale, XSCALE);
160PMC_CLASSDEP_TABLE(armv7, ARMV7);
161PMC_CLASSDEP_TABLE(mips24k, MIPS24K);
162PMC_CLASSDEP_TABLE(mips74k, MIPS74K);
163PMC_CLASSDEP_TABLE(octeon, OCTEON);
164PMC_CLASSDEP_TABLE(ucf, UCF);
165PMC_CLASSDEP_TABLE(ppc7450, PPC7450);
166PMC_CLASSDEP_TABLE(ppc970, PPC970);
167PMC_CLASSDEP_TABLE(e500, E500);
167
168static struct pmc_event_descr soft_event_table[PMC_EV_DYN_COUNT];
169
170#undef __PMC_EV_ALIAS
171#define __PMC_EV_ALIAS(N,CODE) { N, PMC_EV_##CODE },
172
173static const struct pmc_event_descr atom_event_table[] =
174{

--- 116 unchanged lines hidden (view full) ---

291PMC_MDEP_TABLE(p4, P4, PMC_CLASS_SOFT, PMC_CLASS_TSC);
292PMC_MDEP_TABLE(p5, P5, PMC_CLASS_SOFT, PMC_CLASS_TSC);
293PMC_MDEP_TABLE(p6, P6, PMC_CLASS_SOFT, PMC_CLASS_TSC);
294PMC_MDEP_TABLE(xscale, XSCALE, PMC_CLASS_SOFT, PMC_CLASS_XSCALE);
295PMC_MDEP_TABLE(armv7, ARMV7, PMC_CLASS_SOFT, PMC_CLASS_ARMV7);
296PMC_MDEP_TABLE(mips24k, MIPS24K, PMC_CLASS_SOFT, PMC_CLASS_MIPS24K);
297PMC_MDEP_TABLE(mips74k, MIPS74K, PMC_CLASS_SOFT, PMC_CLASS_MIPS74K);
298PMC_MDEP_TABLE(octeon, OCTEON, PMC_CLASS_SOFT, PMC_CLASS_OCTEON);
168
169static struct pmc_event_descr soft_event_table[PMC_EV_DYN_COUNT];
170
171#undef __PMC_EV_ALIAS
172#define __PMC_EV_ALIAS(N,CODE) { N, PMC_EV_##CODE },
173
174static const struct pmc_event_descr atom_event_table[] =
175{

--- 116 unchanged lines hidden (view full) ---

292PMC_MDEP_TABLE(p4, P4, PMC_CLASS_SOFT, PMC_CLASS_TSC);
293PMC_MDEP_TABLE(p5, P5, PMC_CLASS_SOFT, PMC_CLASS_TSC);
294PMC_MDEP_TABLE(p6, P6, PMC_CLASS_SOFT, PMC_CLASS_TSC);
295PMC_MDEP_TABLE(xscale, XSCALE, PMC_CLASS_SOFT, PMC_CLASS_XSCALE);
296PMC_MDEP_TABLE(armv7, ARMV7, PMC_CLASS_SOFT, PMC_CLASS_ARMV7);
297PMC_MDEP_TABLE(mips24k, MIPS24K, PMC_CLASS_SOFT, PMC_CLASS_MIPS24K);
298PMC_MDEP_TABLE(mips74k, MIPS74K, PMC_CLASS_SOFT, PMC_CLASS_MIPS74K);
299PMC_MDEP_TABLE(octeon, OCTEON, PMC_CLASS_SOFT, PMC_CLASS_OCTEON);
299PMC_MDEP_TABLE(ppc7450, PPC7450, PMC_CLASS_SOFT, PMC_CLASS_PPC7450);
300PMC_MDEP_TABLE(ppc970, PPC970, PMC_CLASS_SOFT, PMC_CLASS_PPC970);
300PMC_MDEP_TABLE(ppc7450, PPC7450, PMC_CLASS_SOFT, PMC_CLASS_PPC7450, PMC_CLASS_TSC);
301PMC_MDEP_TABLE(ppc970, PPC970, PMC_CLASS_SOFT, PMC_CLASS_PPC970, PMC_CLASS_TSC);
302PMC_MDEP_TABLE(e500, E500, PMC_CLASS_SOFT, PMC_CLASS_E500, PMC_CLASS_TSC);
301PMC_MDEP_TABLE(generic, SOFT, PMC_CLASS_SOFT);
302
303static const struct pmc_event_descr tsc_event_table[] =
304{
305 __PMC_EV_TSC()
306};
307
308#undef PMC_CLASS_TABLE_DESC

--- 54 unchanged lines hidden (view full) ---

363#if defined(__mips__)
364PMC_CLASS_TABLE_DESC(mips24k, MIPS24K, mips24k, mips);
365PMC_CLASS_TABLE_DESC(mips74k, MIPS74K, mips74k, mips);
366PMC_CLASS_TABLE_DESC(octeon, OCTEON, octeon, mips);
367#endif /* __mips__ */
368#if defined(__powerpc__)
369PMC_CLASS_TABLE_DESC(ppc7450, PPC7450, ppc7450, powerpc);
370PMC_CLASS_TABLE_DESC(ppc970, PPC970, ppc970, powerpc);
303PMC_MDEP_TABLE(generic, SOFT, PMC_CLASS_SOFT);
304
305static const struct pmc_event_descr tsc_event_table[] =
306{
307 __PMC_EV_TSC()
308};
309
310#undef PMC_CLASS_TABLE_DESC

--- 54 unchanged lines hidden (view full) ---

365#if defined(__mips__)
366PMC_CLASS_TABLE_DESC(mips24k, MIPS24K, mips24k, mips);
367PMC_CLASS_TABLE_DESC(mips74k, MIPS74K, mips74k, mips);
368PMC_CLASS_TABLE_DESC(octeon, OCTEON, octeon, mips);
369#endif /* __mips__ */
370#if defined(__powerpc__)
371PMC_CLASS_TABLE_DESC(ppc7450, PPC7450, ppc7450, powerpc);
372PMC_CLASS_TABLE_DESC(ppc970, PPC970, ppc970, powerpc);
373PMC_CLASS_TABLE_DESC(e500, E500, e500, powerpc);
371#endif
372
373static struct pmc_class_descr soft_class_table_descr =
374{
375 .pm_evc_name = "SOFT-",
376 .pm_evc_name_size = sizeof("SOFT-") - 1,
377 .pm_evc_class = PMC_CLASS_SOFT,
378 .pm_evc_event_table = NULL,

--- 2110 unchanged lines hidden (view full) ---

2489};
2490
2491static struct pmc_event_alias ppc970_aliases[] = {
2492 EV_ALIAS("instructions", "INSTR_COMPLETED"),
2493 EV_ALIAS("cycles", "CYCLES"),
2494 EV_ALIAS(NULL, NULL)
2495};
2496
374#endif
375
376static struct pmc_class_descr soft_class_table_descr =
377{
378 .pm_evc_name = "SOFT-",
379 .pm_evc_name_size = sizeof("SOFT-") - 1,
380 .pm_evc_class = PMC_CLASS_SOFT,
381 .pm_evc_event_table = NULL,

--- 2110 unchanged lines hidden (view full) ---

2492};
2493
2494static struct pmc_event_alias ppc970_aliases[] = {
2495 EV_ALIAS("instructions", "INSTR_COMPLETED"),
2496 EV_ALIAS("cycles", "CYCLES"),
2497 EV_ALIAS(NULL, NULL)
2498};
2499
2500static struct pmc_event_alias e500_aliases[] = {
2501 EV_ALIAS("instructions", "INSTR_COMPLETED"),
2502 EV_ALIAS("cycles", "CYCLES"),
2503 EV_ALIAS(NULL, NULL)
2504};
2505
2497#define POWERPC_KW_OS "os"
2498#define POWERPC_KW_USR "usr"
2499#define POWERPC_KW_ANYTHREAD "anythread"
2500
2501static int
2502powerpc_allocate_pmc(enum pmc_event pe, char *ctrspec __unused,
2503 struct pmc_op_pmcallocate *pmc_config __unused)
2504{

--- 439 unchanged lines hidden (view full) ---

2944 case PMC_CLASS_PPC7450:
2945 ev = ppc7450_event_table;
2946 count = PMC_EVENT_TABLE_SIZE(ppc7450);
2947 break;
2948 case PMC_CLASS_PPC970:
2949 ev = ppc970_event_table;
2950 count = PMC_EVENT_TABLE_SIZE(ppc970);
2951 break;
2506#define POWERPC_KW_OS "os"
2507#define POWERPC_KW_USR "usr"
2508#define POWERPC_KW_ANYTHREAD "anythread"
2509
2510static int
2511powerpc_allocate_pmc(enum pmc_event pe, char *ctrspec __unused,
2512 struct pmc_op_pmcallocate *pmc_config __unused)
2513{

--- 439 unchanged lines hidden (view full) ---

2953 case PMC_CLASS_PPC7450:
2954 ev = ppc7450_event_table;
2955 count = PMC_EVENT_TABLE_SIZE(ppc7450);
2956 break;
2957 case PMC_CLASS_PPC970:
2958 ev = ppc970_event_table;
2959 count = PMC_EVENT_TABLE_SIZE(ppc970);
2960 break;
2961 case PMC_CLASS_E500:
2962 ev = e500_event_table;
2963 count = PMC_EVENT_TABLE_SIZE(e500);
2964 break;
2952 case PMC_CLASS_SOFT:
2953 ev = soft_event_table;
2954 count = soft_event_info.pm_nevent;
2955 break;
2956 default:
2957 errno = EINVAL;
2958 return (-1);
2959 }

--- 280 unchanged lines hidden (view full) ---

3240 case PMC_CPU_PPC_7450:
3241 PMC_MDEP_INIT(ppc7450);
3242 pmc_class_table[n] = &ppc7450_class_table_descr;
3243 break;
3244 case PMC_CPU_PPC_970:
3245 PMC_MDEP_INIT(ppc970);
3246 pmc_class_table[n] = &ppc970_class_table_descr;
3247 break;
2965 case PMC_CLASS_SOFT:
2966 ev = soft_event_table;
2967 count = soft_event_info.pm_nevent;
2968 break;
2969 default:
2970 errno = EINVAL;
2971 return (-1);
2972 }

--- 280 unchanged lines hidden (view full) ---

3253 case PMC_CPU_PPC_7450:
3254 PMC_MDEP_INIT(ppc7450);
3255 pmc_class_table[n] = &ppc7450_class_table_descr;
3256 break;
3257 case PMC_CPU_PPC_970:
3258 PMC_MDEP_INIT(ppc970);
3259 pmc_class_table[n] = &ppc970_class_table_descr;
3260 break;
3261 case PMC_CPU_PPC_E500:
3262 PMC_MDEP_INIT(e500);
3263 pmc_class_table[n] = &e500_class_table_descr;
3264 break;
3248#endif
3249 default:
3250 /*
3251 * Some kind of CPU this version of the library knows nothing
3252 * about. This shouldn't happen since the abi version check
3253 * should have caught this.
3254 */
3255 errno = ENXIO;

--- 183 unchanged lines hidden (view full) ---

3439 ev = octeon_event_table;
3440 evfence = octeon_event_table + PMC_EVENT_TABLE_SIZE(octeon);
3441 } else if (pe >= PMC_EV_PPC7450_FIRST && pe <= PMC_EV_PPC7450_LAST) {
3442 ev = ppc7450_event_table;
3443 evfence = ppc7450_event_table + PMC_EVENT_TABLE_SIZE(ppc7450);
3444 } else if (pe >= PMC_EV_PPC970_FIRST && pe <= PMC_EV_PPC970_LAST) {
3445 ev = ppc970_event_table;
3446 evfence = ppc970_event_table + PMC_EVENT_TABLE_SIZE(ppc970);
3265#endif
3266 default:
3267 /*
3268 * Some kind of CPU this version of the library knows nothing
3269 * about. This shouldn't happen since the abi version check
3270 * should have caught this.
3271 */
3272 errno = ENXIO;

--- 183 unchanged lines hidden (view full) ---

3456 ev = octeon_event_table;
3457 evfence = octeon_event_table + PMC_EVENT_TABLE_SIZE(octeon);
3458 } else if (pe >= PMC_EV_PPC7450_FIRST && pe <= PMC_EV_PPC7450_LAST) {
3459 ev = ppc7450_event_table;
3460 evfence = ppc7450_event_table + PMC_EVENT_TABLE_SIZE(ppc7450);
3461 } else if (pe >= PMC_EV_PPC970_FIRST && pe <= PMC_EV_PPC970_LAST) {
3462 ev = ppc970_event_table;
3463 evfence = ppc970_event_table + PMC_EVENT_TABLE_SIZE(ppc970);
3464 } else if (pe >= PMC_EV_E500_FIRST && pe <= PMC_EV_E500_LAST) {
3465 ev = e500_event_table;
3466 evfence = e500_event_table + PMC_EVENT_TABLE_SIZE(e500);
3447 } else if (pe == PMC_EV_TSC_TSC) {
3448 ev = tsc_event_table;
3449 evfence = tsc_event_table + PMC_EVENT_TABLE_SIZE(tsc);
3450 } else if ((int)pe >= PMC_EV_SOFT_FIRST && (int)pe <= PMC_EV_SOFT_LAST) {
3451 ev = soft_event_table;
3452 evfence = soft_event_table + soft_event_info.pm_nevent;
3453 }
3454

--- 202 unchanged lines hidden ---
3467 } else if (pe == PMC_EV_TSC_TSC) {
3468 ev = tsc_event_table;
3469 evfence = tsc_event_table + PMC_EVENT_TABLE_SIZE(tsc);
3470 } else if ((int)pe >= PMC_EV_SOFT_FIRST && (int)pe <= PMC_EV_SOFT_LAST) {
3471 ev = soft_event_table;
3472 evfence = soft_event_table + soft_event_info.pm_nevent;
3473 }
3474

--- 202 unchanged lines hidden ---