Revision f6ab91add6355e231e1c47897027b2a6ee4fa268 authored by Peter Zijlstra on 04 June 2010, 13:18:01 UTC, committed by Ingo Molnar on 08 June 2010, 16:43:00 UTC
Frederic reported that frequency driven swevents didn't work properly
and even caused a division-by-zero error.

It turns out there are two bugs, the division-by-zero comes from a
failure to deal with that in perf_calculate_period().

The other was more interesting and turned out to be a wrong comparison
in perf_adjust_period(). The comparison was between an s64 and u64 and
got implicitly converted to an unsigned comparison. The problem is
that period_left is typically < 0, so it ended up being always true.

Cure this by making the local period variables s64.

Reported-by: Frederic Weisbecker <fweisbec@gmail.com>
Tested-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: <stable@kernel.org>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
1 parent 58cc1a9
History
File Mode Size
Kconfig -rw-r--r-- 40.1 KB
Makefile -rw-r--r-- 1.0 KB
calibrate.c -rw-r--r-- 5.1 KB
do_mounts.c -rw-r--r-- 9.3 KB
do_mounts.h -rw-r--r-- 1.4 KB
do_mounts_initrd.c -rw-r--r-- 3.1 KB
do_mounts_md.c -rw-r--r-- 7.9 KB
do_mounts_rd.c -rw-r--r-- 8.0 KB
initramfs.c -rw-r--r-- 12.6 KB
main.c -rw-r--r-- 21.5 KB
noinitramfs.c -rw-r--r-- 1.4 KB
version.c -rw-r--r-- 1.1 KB

back to top