Blob Blame History Raw

	* src/configure: Ran autoconf to generate updated configure file.


	* src/components/README: Adding a component for the FreeBSD OS that
	  reports the value of the thermal sensors available in the Intel
	  Core processors.  There are as many counters as cores, and the
	  value reported by each counter is in Kelvin degrees.

	* src/freebsd.c: Implemented missing

	* src/:,,, ctests/Makefile:
	  Fix dependency on -ldl

	  Now configure checks if dl* symbols are in the base system
	  libraries (i.e., no -ldl needed). If so, avoid adding -ldl to
	  shlib example.

	  If dl* symbols are not find in the base system libraries, then
	  check for -ldl, and if it exists, pass it to ctests/Makefile
	  through Makefile. If -ldl is not found, fail at configure time.

	* src/ctests/multiattach.c: Fix to compile in FreeBSD.

	* src/: freebsd-memory.c, freebsd.c: Code cleanup.


	* src/: perf_events.c, perfmon.c: [PATCH 18/18] papi: make
	  _perfmon2_pfm_pmu_type variable static

	  In perf_events.c and perfmon.c the variable
	  _perfmon2_pfm_pmu_type is used locally only, making it static.

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/: linux-bgp.c, linux-ia64.c, perf_events.c, perfctr.c,
	  perfmon.c: [PATCH 17/18] papi: remove inline_static macro in
	  Linux only code

	  We better replace the macro with 'static inline'. Not sure if
	  this works for all compilers, so doing it for Linux only files.

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/x86_cache_info.c: [PATCH 16/18] papi: remove static inline
	  function declaration

	  By moving the static inline function cpuid() to the begin of the
	  file we may remove its declaration.

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/linux.h: [PATCH 15/18] papi: remove unused linux.h header

	  This file is included nowhere, removing it.

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/linux-ia64.c: [PATCH 14/18] papi: fix array out of bounds

	  Fixing the following warning:

	    linux-ia64.c: In function ?_ia64_init_substrate?:
	    linux-ia64.c:1123:22: warning: array subscript is above array

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/: configure, [PATCH 13/18] papi: remove
	  unnecassary checks in

	  The check is obsolete and covered by default.

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/: papi_pfm_events.c, perf_events.c, perfmon.c, perfmon.h:
	  [PATCH 12/18] papi: include perfmon header files only where

	  This patch includes perfmon header files only where necessary.
	  Declarations in perfmon/perfmon.h are never used, removing its
	  inclusion. Itanium header files are needed only in perfmon.c and

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/: papi_pfm_events.c, perfctr-x86.c: [PATCH 11/18] papi: make
	  some functions in papi_pfm_events.c static

	  Functions _pfm_decode_native_event() and _pfm_convert_umask() are
	  internally used only. Remove export declaration and make it

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/: Rules.pfm, linux-ia64-pfm.h, linux-ia64.c, pfmwrap.h:
	  [PATCH 10/18] papi: rename pfmwrap.h -> linux-ia64-pfm.h

	  pfmwrap.h actually only contains IA64 code included by
	  linux-ia64.c.  Rename it to linux-ia64-pfm.h.

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/: linux-ia64.c, pfmwrap.h: [PATCH 09/18] papi, linux-ia64:
	  make inline functions static

	  Inline functions should be static. Fixing it.

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/: linux-ia64.c, papi_pfm_events.c: [PATCH 08/18] papi: fix
	  _papi_pfm_ntv_name_to_code() function interface

	  The function is supposed to return a PAPI error code which is an
	  integer.  Make the function's return code an integer too.

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/perfctr-ppc64.c: [PATCH 07/18] papi: fix spelling modifer ->

	  Fix spelling: modifer -> modifier

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/: linux-ia64.c, papi_pfm_events.c, papi_pfm_events.h,
	  perf_events.c, perfctr-x86.c, perfmon.c: [PATCH 06/18] papi:
	  define function interface in papi_pfm_events.h

	  The header file should define the interface that
	  papi_pfm_events.c provides.  Declarations used internally only in
	  papi_pfm_events.c are moved there.  Now papi_pfm_events.h only
	  contains the prototype functions. Remapping of definitions is
	  removed too. This cleanup removes duplicate code and better
	  defines the interface.

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/: Rules.perfctr, Rules.perfctr-pfm, linux.c, multiplex.c,
	  papi_vector.c, perfctr-x86.c, perfctr.c, ctests/test_utils.c:
	  [PATCH 05/18] papi: rename linux.c -> perfctr.c

	  The name of linux.c is misleading, it only implements perfctr
	  functionality. Thus renaming it to perfctr.c.

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/: papi_pfm_events.c, perfctr-x86.c: [PATCH 04/18] papi: make
	  _papi_pfm_init() static by moving it to perfctr-x86.c

	  _papi_pfm_init() is only used in perfctr-x86.c but implemented in
	  papi_pfm_events.c. Move it to perfctr-x86.c and make it static.

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/perfmon.c: [PATCH 03/18] papi: make some functions static in

	  The functions are only used in perfmon.c, making it static.

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/: Rules.pfm, Rules.pfm_pe: [PATCH 02/18] papi: do not compile
	  libpfm examples to support cross compilation

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/Rules.pfm: To cross compile papi we need to pass the
	  architecture to libpfm.  Otherwise it will be confused and tries
	  to build the host's make targets with the cross compiler ending
	  up in the following error:

	   pfmlib_amd64.c: In function ?cpuid?:
	   pfmlib_amd64.c:166:3: error: impossible register constraint in
	   pfmlib_amd64.c:172:1: error: impossible register constraint in
	   make[2]: *** [pfmlib_amd64.o] Error 1

	  Signed-off-by: Robert Richter <robert.richter at>

	* src/ctests/Makefile: Temporarily back out the FreeBSD makefile
	  change that breaks the build so that I can properly test some
	  other changes.

	* src/papi_events.csv: Change the Core2 L1_TCM preset to be

	  The current event (L2_RQSTS:SELF:MESI) returns an event
	  equivelent to LLC_REFERENCES on libpfm3, but in libpfm4
	  L2_RQSTS:SELF:MESI maps instead to L2_RQSTS:SELF:MESI:ALL which
	  counts prefetches too.

	  By moving to LLC_REFERENCES both libpfm3 and libpfm4 count the
	  proper value.  This also makes the "tenth" benchmark pass  when
	  using PAPI/libpfm4.

	* src/configure: Update to match current

	* src/ctests/Makefile: Fix the if / fi syntax of the last change.


	* src/:,, freebsd-memory.c, freebsd.c,
	  ctests/Makefile, ctests/zero_attach.c: Changes from Harald Servat
	  for freebsd support. Note that configure has not been regenerated
	  from this version of

	* papi.spec, doc/Doxyfile, doc/Doxyfile-everything,
	  src/, src/, src/papi.h: Change version
	  numbers to 4.1.2 in preparation for a release.


	* src/ctests/code2name.c: The code2name test was assuming that the
	  native events start right at PAPI_NATIVE_MASK.  We specifically
	  document elsewhere this might not be the case, and indeed for the
	  libpfm4 code this fails.

	  This fix changes the code to properly enunmerate the native
	  events for the test.


	* src/: papi.c, papi_internal.c: Fix a long-standing bug where we
	  were walking off the end of the EventInfoArray in

	  This was noticed by Richard Strong when instrumenting some of the
	  PARSEC benchmarks.

	  In papi_internal.c in the remap_event_position() function we have
	  the loop

		  for ( i = 0; i <= total_events; i++ ) {

	   It seems weird that we are doing a <= compare, and in fact this
	  is why we
	   walk off the end of the array sometimes.  But why only somtimes?
	   If I
	   change that <= to a < then many of the regression tests fail.

	   It turns out that the two calls to remap_event_position() in
	   papi_internal.c are called with ESI->NumberOfEvents being one
	   than it should be, as it is incremented after the
	   call (though the new events are added before the call).  This is
	   <= is used.

	   However the call in PAPI_start() happens with
	   with the right value.  In this case < should be used.

	   The fix I've come up with has a NumberOfEvents value passed in
	  as a
	   parameter to remap_event_position().  This way the value+1 can
	   be passed in the former cases.


	* src/aix.c: Problem on POWER6 with AIX: pm_initialize() cannot be
	  called multiple times with PM_CURRENT. Instead, use the actual
	  proc type - here PM_POWER6 - and multiple invocations are no
	  longer a problem. Ctests/multiplex1.c passes now.


	* src/ If we don't run any tests, get buildbot's


	* src/aix.c: number_of_nodes var was set to zero in
	  _aix_get_system_info. This caused the papi utilities to report
	  that the number of total CPUs is zero. This also caused
	  ctests/hwinfo to fail on POWER6 with AIX.


	* src/papi_internal.h: Slight re-ordering of the no_vararg_macro
	  debug statements.  (I actually tested the changes with
	  --with-debug and without on aix)


	* src/ Change the syntax on our find command to be
	  more posix compliant.

	  GNU is Not UNIX, cute acronym or massive compatibility
	  conspiracy.  I fall back to posix, you decide!

	* src/: configure, Update configure file to be aware
	  of the existence of AIX-Power7.

	  PAPI still won't build, but it gets further than before.


	* src/ Make our grep invocation posix compliant.
	  (--invert-match == -v & --regex == -e )

	* src/ctests/overflow_allcounters.c: Separate 'indent' check-in so
	  that the previous modifications are comprehensible :)

	* src/ctests/overflow_allcounters.c: The overflow_allcounters test
	  failed on Power6 with AIX (pmapi) but passes on Power6 with linux
	  (perf_events | perfctr). Therefore detect if we're running on
	  AIX, print a warning, but still pass the test.

	* src/ Move away from echo -n to the shell builtin
	  printf (echo -n is not portable)

	  non-argumented instances of echo are fine.

	* src/run_tests_exclude.txt: Skip the non-test ctests/burn

	* src/Matlab/: PAPI_Matlab.c, PAPI_Matlab.readme: Change
	  documentation for matlab integration to reflect the need to link
	  to the library and not the static one.

	  Also listed me and the ptools-perfapi list as points of contact
	  for future questions *gulp*


	* src/: configure,, Clean up (purge)
	  references to libpfm-2.x in configure and

	* src/Matlab/PAPI_Matlab.c: MATLAB fixups: Calls to PAPI('stop')
	  now stop counting even if we ignore the return values.

	* src/Matlab/PAPI_Matlab.c: Fixup for papi matlab integration.

	  Calls to PAPI('stop') don't cause errors now.  If you call
	  PAPI('stop') with out capturing its return value, it does

	* src/Matlab/PAPI_Matlab.c: mex does not like c++ style comments


	* src/solaris-ultra.c: Resolved a couple type cast warnings.  Also
	  initialized a variable and enabled GET_OVERFLOW_ADDRESS code in
	  two places. The overflow test suite still has a number of
	  failures and is disabled in configure.


	* src/papi_internal.h: That last commit was lacking in
	  creativity...  By having the debug function names still a macro,
	  we get all the goodness of __FILE__ etc bing in the right place
	  and still not using variadic macros.

	  #define SUBDBG do{ if (_papi_hwi_debug & DEBUG_SUBSTRATE )
	  print_the_label; } while (0); _SUBDBG was the clever line that
	  eluded me yesterday.


	* src/papi_internal.h: Turns out that when DEBUG and
	  NO_VARARG_MACRO are true, we didn't correctly implement
	  component-level debug functions.  This change uses variable
	  argument lists ( man stdarg) to correctly handle this case. (
	  papi_internal.h defines these)

	  Note that debugging information is not completly useful; due to
	  functions which use variable argument lists not being inlinable (
	  the inline keyword is afterall only a sugestion), all messages
	  appear to come from papi_internal.h:PAPIDEBUG:525:22619 and I am
	  not clever enough to get around that in general right now.

	  Thanks to Maynard Johnson for reporting.

	* src/papi_events.csv: Enable the PAPI_HW_INT event on Nehalem, as
	  tests show the   HW_INT:RCV event is the proper one to use here.


	* src/papi_events.csv: Update the preset events for Nehalem, as
	  contributed by    Michel Brown.


	* src/: perf_events.h, perf_events.c: Address problem with overflow
	  handler continuing to count events.  Add overflow status field to
	  determine if an event set has any events enabled for overflow.
	  Use IOC_REFRESH instead of IOC_ENABLE when overflowing.
	  Implement IOC_REFRESH at end of overflow handler.  None of this
	  worked.  Also implemented an IOC_DISABLE at top of overflow
	  handler. That worked, even though it's suboptimal.


	* src/utils/command_line.c: test_fail_exit() substituted for
	  test_fail().	This became necessary because
	  PAPI_event_name_to_code now returns a PAPI_EATTR error if the
	  base name matches but attribute names don't. This utility was
	  producing an error message and then running the test. Perfctr
	  implementations will happily add a base name with no umasks and
	  then generate 0 counts. This fix prevents that behavior.

	* src/ctests/test_utils.c: Rewrite of test_fail_exit() to call
	  test_fail(). It should be noted that test_fail_exit() behaves the
	  way test_fail() used to behave, i.e. it exits after printing the
	  fail message. However, test_fail no longer exits as that was
	  causing problems with multi-threaded tests not freeing memory. In
	  those cases where an exit is desired, calls to test_fail_exit()
	  should be substituted for calls to test_fail().

	* src/: papi.h, papi_data.c, papi_pfm_events.c, perfmon.c: Added 3
	  new error codes: PAPI_EATTR, PAPI_ECOUNT, and PAPI_ECOMBO. These
	  map onto equivalent errors in libpfm and are provided to give
	  more detail on failures in libpfm calls. A new error mapping
	  function has been added to papi_pfm_events.c to map libpfm errors
	  to PAPI errors, and this function is employed in the
	  compute_kernel_args function in perfmon.c. It could also be
	  deployed elsewhere, but so far is not.


	* src/x86_cache_info.c: The cpuid change yesterday broke
	  compilation on a 32-bit Pentium 3.  Fix the inline assembly to
	  compile properly there too.


	* src/: configure, Fix configure script to properly
	  detect Pentium M machines.

	* src/x86_cache_info.c: Add cpuid leaf4 cache detection support.

	  This has been available on intel processors since Late model P4s
	  and all Core2 and newer.  It returns cache info in a different
	  way than the older leaf2 method.

	  Currently we only use leaf4 data if the leaf2 results tell us to
	  (apparently Westmere does that).  Otherwise we use the old

	  It might be interesting to use more of the leaf4 info.  It can
	  tell us things such as how many processors share a socket, how
	  many processors share a cache, and info on the inclusivity of a

	* src/: linux.c, perfctr-x86.c: Add perfctr Westmere support.

	* src/perfctr-2.6.x/: patches/aliases, usr.lib/Makefile: Fix
	  conflicts from perfctr merge.


	  with the proper dynamic kernel version number checking.  This
	  should be the last place in our perf_events code that was using a
	  hard-coded rather than dynamic check for a kernel-version related

	* src/perf_events.c: This patch allows PAPI to read multiple events
	  at a time out of the kernel when the kernel is new enough (2.6.34
	  or newer).  The previous code required setting a #define by hand
	  to get this behavior, this new code picks the proper way to do
	  things based on the kernel version number.

	  The patch was supplied by  Gary Mohr


	* src/: linux.c, perfctr-x86.c: Replace occurrances of
	  former has been documented as being deprecated as of perfctr


	* src/cycle.h: Change "unicos" to "CLE" since "unicos" no longer


	* src/examples/locks_pthreads.c: Add a call to PAPI_thread_init(),
	  Thanks to Martin Schindewolf for pointing this out.


	* src/: papi.c, components/lmsensors/linux-lmsensors.h: Fixup url's
	  that checkbot was finding in error.


	* src/ctests/: multiattach.c, zero_attach.c: The zero_attach and
	  multiattach were forking before off children	 before testing
	  that PAPI in fact is available.  Then when PAPI_init()   failed
	  the children weren't being cleaned up properly.  This was
	  confusing build bot.	This changeset moves the fork to after the
	  check plus do a fail_exit() on failure.

	* src/: configure, Solaris build will fail if
	  /usr/ccs/bin isn't in the path.  Have it check there for "ar" on
	  Solaris systems if it can't be found	 by normal methods.

	* src/: configure, Only run the EAR tests on itanium

	* src/: configure, Pentium4-perfctr was skipping most
	  of the CTESTS.  Make sure they are all run.