2011-01-17 * src/configure: Ran autoconf to generate updated configure file. 2011-01-16 * 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 _papi_freebsd_ntv_name_to_code. * src/: Makefile.in, Makefile.inc, configure.in, 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. 2011-01-14 * 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 * 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 * 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 * src/linux.h: [PATCH 15/18] papi: remove unused linux.h header file This file is included nowhere, removing it. Signed-off-by: Robert Richter * src/linux-ia64.c: [PATCH 14/18] papi: fix array out of bounds access Fixing the following warning: linux-ia64.c: In function ?_ia64_init_substrate?: linux-ia64.c:1123:22: warning: array subscript is above array bounds Signed-off-by: Robert Richter * src/: configure, configure.in: [PATCH 13/18] papi: remove unnecassary checks in configure.in The check is obsolete and covered by default. Signed-off-by: Robert Richter * src/: papi_pfm_events.c, perf_events.c, perfmon.c, perfmon.h: [PATCH 12/18] papi: include perfmon header files only where necessary 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 perf_events.c. Signed-off-by: Robert Richter * 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 static. Signed-off-by: Robert Richter * 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 * 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 * 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 * src/perfctr-ppc64.c: [PATCH 07/18] papi: fix spelling modifer -> modifier Fix spelling: modifer -> modifier Signed-off-by: Robert Richter * 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 * 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 * 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 * src/perfmon.c: [PATCH 03/18] papi: make some functions static in perfmon.c The functions are only used in perfmon.c, making it static. Signed-off-by: Robert Richter * src/: Rules.pfm, Rules.pfm_pe: [PATCH 02/18] papi: do not compile libpfm examples to support cross compilation Signed-off-by: Robert Richter * 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 ?asm? pfmlib_amd64.c:172:1: error: impossible register constraint in ?asm? make[2]: *** [pfmlib_amd64.o] Error 1 Signed-off-by: Robert Richter * 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 LLC_REFERENCES 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 configure.in * src/ctests/Makefile: Fix the if / fi syntax of the last change. 2011-01-13 * src/: Makefile.inc, configure.in, 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 configure.in. * papi.spec, doc/Doxyfile, doc/Doxyfile-everything, src/Makefile.in, src/configure.in, src/papi.h: Change version numbers to 4.1.2 in preparation for a release. 2011-01-12 * 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. 2011-01-06 * src/: papi.c, papi_internal.c: Fix a long-standing bug where we were walking off the end of the EventInfoArray in remap_event_position(). 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 less than it should be, as it is incremented after the remap_event_position() call (though the new events are added before the call). This is why <= is used. However the call in PAPI_start() happens with ESI->NumberOfEvents 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. 2010-12-20 * 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. 2010-12-15 * src/run_tests.sh: If we don't run any tests, get buildbot's attention. 2010-12-14 * 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. 2010-12-13 * 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) 2010-12-10 * src/run_tests.sh: 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, configure.in: Update configure file to be aware of the existence of AIX-Power7. PAPI still won't build, but it gets further than before. 2010-12-09 * src/run_tests.sh: 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/run_tests.sh: 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 executable. * src/Matlab/: PAPI_Matlab.c, PAPI_Matlab.readme: Change documentation for matlab integration to reflect the need to link to the libpapi.so library and not the static one. Also listed me and the ptools-perfapi list as points of contact for future questions *gulp* 2010-12-08 * src/: configure, configure.in, run_tests.sh: Clean up (purge) references to libpfm-2.x in configure and run_tests.sh * 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 nothing. * src/Matlab/PAPI_Matlab.c: mex does not like c++ style comments (double-backslash) 2010-12-06 * 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. 2010-11-24 * 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. 2010-11-23 * 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. 2010-11-22 * src/papi_events.csv: Update the preset events for Nehalem, as contributed by Michel Brown. 2010-11-19 * 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. 2010-11-17 * 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. 2010-11-09 * 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. 2010-11-08 * src/: configure, configure.in: 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 method. 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 cache. * 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. 2010-11-06 * src/perf_events.c: Replace KERNEL_CHECKS_SCHEDUABILITY_UPON_OPEN 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 bugfix. * 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 2010-11-04 * src/: linux.c, perfctr-x86.c: Replace occurrances of PERFCTR_X86_INTEL_COREI7 with PERFCTR_X86_INTEL_NHLM as the former has been documented as being deprecated as of perfctr 2.6.41. 2010-11-03 * src/cycle.h: Change "unicos" to "CLE" since "unicos" no longer exists. 2010-10-26 * src/examples/locks_pthreads.c: Add a call to PAPI_thread_init(), Thanks to Martin Schindewolf for pointing this out. 2010-10-21 * src/: papi.c, components/lmsensors/linux-lmsensors.h: Fixup url's that checkbot was finding in error. 2010-10-05 * 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, configure.in: 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, configure.in: Only run the EAR tests on itanium systems. * src/: configure, configure.in: Pentium4-perfctr was skipping most of the CTESTS. Make sure they are all run.