Hello,
Here is a patch to update q-tools to support the latest libpfm
release 3.2-070725. Note that with the patch applied q-tools
will not work with older versions of libpfm. How old?
Most likely any release older than 3.2-070926.
Thanks to Andreas Hirstius for contributing to the patch
--
-Stephane
diff -urNp q-tools-0.3/NEWS q-tools-0.3a/NEWS
--- q-tools-0.3/NEWS 2006-05-30 09:28:49.000000000 -0700
+++ q-tools-0.3a/NEWS 2007-07-31 14:14:19.000000000 -0700
@@ -1,5 +1,9 @@
-*-Mode: outline-*-
+* News for v0.3a
+*** q-syscollect: added support for the latest libpfm-3.2-070725 on IA-64 with
+ perfmon v2.0 or higher
+
* News for v0.3
*** q-syscollect: added support for Dual-Core Itanium2 (Montecito)
*** q-syscollect: restructured code to split each PMU model for BTB support
diff -urNp q-tools-0.3/q-syscollect/q-syscollect.c
q-tools-0.3a/q-syscollect/q-syscollect.c
--- q-tools-0.3/q-syscollect/q-syscollect.c 2006-05-30 09:28:49.000000000
-0700
+++ q-tools-0.3a/q-syscollect/q-syscollect.c 2007-07-31 14:14:19.000000000
-0700
@@ -99,7 +99,7 @@ static pfm_default_smpl_hdr_t *sampling_
static int sampling_fd;
static struct qsys_btb_support *qsys;
-unsigned int cs_event_code, cs_cycle_code;
+pfmlib_event_t cs_event_code, cs_cycle_code;
unsigned long cycle_frequency;
double code_sample_rate = 1000.0;
double call_sample_rate = 1000.0;
@@ -683,7 +683,7 @@ write_profile (struct addr_space *as, co
" (q:event-name . \"%s\")\n"
" (q:x-unit-label . \"address\")\n",
hist_file_name, cs_event_name);
- if (cs_event_code == cs_cycle_code)
+ if (cs_event_code.event == cs_cycle_code.event)
fprintf (info,
" (q:y-unit-label . \"seconds\")\n"
" (q:y-unit-conversion-factor . %g)\n",
@@ -798,7 +798,7 @@ setup_code_sampling (pfarg_reg_t *pc, in
for(i=0; i < num_pcs; i++)
pfm_regmask_set(&iparam.pfp_unavail_pmcs, pc[i].reg_num);
- iparam.pfp_events[0].event = cs_event_code;
+ iparam.pfp_events[0] = cs_event_code;
memset (&oparam, 0, sizeof (oparam));
@@ -831,7 +831,7 @@ setup_code_sampling (pfarg_reg_t *pc, in
pc[num_pcs].reg_flags |= PFM_REGFL_OVFL_NOTIFY; /* notify on overflow */
pc[num_pcs].reg_flags |= PFM_REGFL_RANDOM; /* randomize the interval */
- if (cs_event_code == cs_cycle_code)
+ if (cs_event_code.event == cs_cycle_code.event)
reset_value = - (long) (cycle_frequency / code_sample_rate);
else
reset_value = -100000; /* your guess is as good as mine... */
@@ -913,15 +913,15 @@ init_default_cycle_event(void)
panic("cannot allocate memory for cycle event name\n");
cs_event_code = cs_cycle_code;
- if (pfm_get_event_name(cs_event_code, cs_event_name, len)
+ if (pfm_get_full_event_name(&cs_event_code, cs_event_name, len)
!= PFMLIB_SUCCESS)
panic ("pfm_get_event_name: failed\n");
}
else
{
- if (pfm_find_event_byname (cs_event_name, &cs_event_code)
+ if (pfm_find_full_event(cs_event_name, &cs_event_code)
!= PFMLIB_SUCCESS)
- panic ("pfm_find_event_byname: failed to find %s\n", cs_event_name);
+ panic ("pfm_find_full_event: failed to find %s\n", cs_event_name);
}
}
diff -urNp q-tools-0.3/q-syscollect/q-syscollect.h
q-tools-0.3a/q-syscollect/q-syscollect.h
--- q-tools-0.3/q-syscollect/q-syscollect.h 2006-05-30 09:28:49.000000000
-0700
+++ q-tools-0.3a/q-syscollect/q-syscollect.h 2007-07-31 14:14:19.000000000
-0700
@@ -83,7 +83,7 @@ struct qsys_btb_support
extern void check_addr_space_mapping (struct addr_space *as, unsigned long
addr);
-extern unsigned int cs_event_code, cs_cycle_code;
+extern pfmlib_event_t cs_event_code, cs_cycle_code;
extern unsigned long cycle_frequency;
extern double code_sample_rate;
extern double call_sample_rate;
diff -urNp q-tools-0.3/q-syscollect/qsys-mckinley.c
q-tools-0.3a/q-syscollect/qsys-mckinley.c
--- q-tools-0.3/q-syscollect/qsys-mckinley.c 2006-05-30 09:28:49.000000000
-0700
+++ q-tools-0.3a/q-syscollect/qsys-mckinley.c 2007-07-31 14:14:19.000000000
-0700
@@ -308,7 +308,7 @@ setup_ita2_btb_code_sampling (pfarg_reg_
/* for system-wide monitoring we must use privileged monitors: */
iparam.pfp_flags = PFMLIB_PFP_SYSTEMWIDE;
- iparam.pfp_events[0].event = cs_event_code;
+ iparam.pfp_events[0].event = cs_event_code.event;
memset (&oparam, 0, sizeof (oparam));
ret = pfm_dispatch_events (&iparam, &i2param, &oparam, NULL);
@@ -338,7 +338,7 @@ setup_ita2_btb_code_sampling (pfarg_reg_
/* clear BTB index (PMD16): */
pc[num_pcs].reg_reset_pmds[0] = REG_MASK (16);
- if (cs_event_code == cs_cycle_code)
+ if (cs_event_code.event == cs_cycle_code.event)
reset_value = - (long) (cycle_frequency / code_sample_rate);
else
reset_value = -100000; /* your guess is as good as mine... */
diff -urNp q-tools-0.3/q-syscollect/qsys-montecito.c
q-tools-0.3a/q-syscollect/qsys-montecito.c
--- q-tools-0.3/q-syscollect/qsys-montecito.c 2006-05-30 09:28:49.000000000
-0700
+++ q-tools-0.3a/q-syscollect/qsys-montecito.c 2007-07-31 14:14:19.000000000
-0700
@@ -334,7 +334,7 @@ setup_mont_btb_code_sampling (pfarg_reg_
/* for system-wide monitoring we must use privileged monitors: */
mparam.pfp_flags = PFMLIB_PFP_SYSTEMWIDE;
- mparam.pfp_events[0].event = cs_event_code;
+ mparam.pfp_events[0].event = cs_event_code.event;
memset (&oparam, 0, sizeof (oparam));
ret = pfm_dispatch_events (&mparam, &m2param, &oparam, NULL);
@@ -364,7 +364,7 @@ setup_mont_btb_code_sampling (pfarg_reg_
/* clear ETB index (PMD38): */
pc[num_pcs].reg_reset_pmds[0] = REG_MASK (38);
- if (cs_event_code == cs_cycle_code)
+ if (cs_event_code.event == cs_cycle_code.event)
reset_value = - (long) (cycle_frequency / code_sample_rate);
else
reset_value = -100000; /* your guess is as good as mine... */
_______________________________________________
perfmon mailing list
[email protected]
http://www.hpl.hp.com/hosted/linux/mail-archives/perfmon/