diff --git a/papi-divzero.patch b/papi-divzero.patch new file mode 100644 index 0000000..24b5205 --- /dev/null +++ b/papi-divzero.patch @@ -0,0 +1,43 @@ +commit 7a6ae407b62615d3ffa9b0d2ac17771b7fc63056 +Author: Vince Weaver +Date: Thu Sep 27 23:47:58 2018 -0400 + + perf_event: avoid floating point exception if running is 0 + + The perf_event interface isn't supposed to return 0 for running, but + it happens occasionally. So be sure not to divide by zero if this + happens. This makes the rdpmc code match the generic perf code in this + case. + + This is in response to bitbucket issue #52 + +diff --git a/src/components/perf_event/perf_event.c b/src/components/perf_event/perf_event.c +index 7fd753ed..82b7d398 100644 +--- a/src/components/perf_event/perf_event.c ++++ b/src/components/perf_event/perf_event.c +@@ -1099,14 +1099,23 @@ _pe_rdpmc_read( hwd_context_t *ctx, hwd_control_state_t *ctl, + count = mmap_read_self(pe_ctl->events[i].mmap_buf, + &enabled,&running); + +- /* TODO: error checking? */ ++ /* TODO: more error checking? */ + + /* Handle multiplexing case */ +- if (enabled!=running) { ++ if (enabled == running) { ++ /* no adjustment needed */ ++ } ++ else if (enabled && running) { + adjusted = (enabled * 128LL) / running; + adjusted = adjusted * count; + adjusted = adjusted / 128LL; + count = adjusted; ++ } else { ++ /* This should not happen, but we have had it reported */ ++ SUBDBG("perf_event kernel bug(?) count, enabled, " ++ "running: %lld, %lld, %lld\n", ++ papi_pe_buffer[0],enabled,running); ++ + } + + pe_ctl->counts[i] = count; diff --git a/papi.spec b/papi.spec index 805983c..666e49a 100644 --- a/papi.spec +++ b/papi.spec @@ -8,13 +8,14 @@ Summary: Performance Application Programming Interface Name: papi Version: 5.6.0 -Release: 7%{?dist} +Release: 8%{?dist} License: BSD Group: Development/System Requires: papi-libs = %{version}-%{release} URL: http://icl.cs.utk.edu/papi/ Source0: http://icl.cs.utk.edu/projects/papi/downloads/%{name}-%{version}.tar.gz Patch1: papi-ldflags.patch +Patch2: papi-divzero.patch BuildRequires: autoconf BuildRequires: doxygen BuildRequires: ncurses-devel @@ -77,6 +78,7 @@ the PAPI user-space libraries and interfaces. %prep %setup -q %patch1 -p1 -b .ldflags +%patch2 -p1 -b .divzero %build %if %{without bundled_libpfm} @@ -159,6 +161,9 @@ chrpath --delete $RPM_BUILD_ROOT%{_libdir}/*.so* %{_libdir}/*.a %changelog +* Fri Nov 2 2018 Fedora Release Engineering - 5.6.0-8 +- Pull in patch to avoid division-by-0. + * Fri Jul 13 2018 Fedora Release Engineering - 5.6.0-7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild