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/

Reply via email to