1
0
Fork 0
alistair23-linux/arch/arm/kernel
Daniel Thompson 2d9ed7406f ARM: 8255/1: perf: Prevent wraparound during overflow
If the overflow threshold for a counter is set above or near the
0xffffffff boundary then the kernel may lose track of the overflow
causing only events that occur *after* the overflow to be recorded.
Specifically the problem occurs when the value of the performance counter
overtakes its original programmed value due to wrap around.

Typical solutions to this problem are either to avoid programming in
values likely to be overtaken or to treat the overflow bit as the 33rd
bit of the counter.

Its somewhat fiddly to refactor the code to correctly handle the 33rd bit
during irqsave sections (context switches for example) so instead we take
the simpler approach of avoiding values likely to be overtaken.

We set the limit to half of max_period because this matches the limit
imposed in __hw_perf_event_init(). This causes a doubling of the interrupt
rate for large threshold values, however even with a very fast counter
ticking at 4GHz the interrupt rate would only be ~1Hz.

Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2015-01-12 19:28:46 +00:00
..
.gitignore
Makefile Char/Misc driver patches for 3.19-rc1 2014-12-14 16:43:47 -08:00
arch_timer.c arch_timer: Move to generic sched_clock framework 2013-10-09 16:54:10 -07:00
armksyms.c ARM: 8151/1: add missing exports for asm functions required by get_user macro 2014-09-16 16:09:30 +01:00
arthur.c
asm-offsets.c ARM: Blacklist GCC 4.8.0 to GCC 4.8.2 - PR58854 2014-10-19 09:20:52 +01:00
atags.h ARM: constify machine_desc structure uses 2013-07-26 14:55:59 +01:00
atags_compat.c ARM: convert printk(KERN_* to pr_* 2014-11-21 15:24:50 +00:00
atags_parse.c ARM: convert printk(KERN_* to pr_* 2014-11-21 15:24:50 +00:00
atags_proc.c ARM: convert printk(KERN_* to pr_* 2014-11-21 15:24:50 +00:00
bios32.c Merge branch 'for-linus' of git://ftp.arm.linux.org.uk/~rmk/linux-arm 2014-12-12 15:26:48 -08:00
calls.S ARM: wire up execveat syscall 2015-01-07 20:31:54 +00:00
cpuidle.c cpuidle: Add common time keeping and irq enabling 2012-03-21 01:59:40 -04:00
crash_dump.c ARM: 8012/1: kdump: Avoid overflow when converting pfn to physaddr 2014-04-07 12:10:00 +01:00
debug.S ARM: convert all "mov.* pc, reg" to "bx reg" for ARMv6+ 2014-07-18 12:29:04 +01:00
devtree.c arm: Add devicetree fixup machine function 2014-07-29 21:26:49 -06:00
dma-isa.c ARM: convert printk(KERN_* to pr_* 2014-11-21 15:24:50 +00:00
dma.c ARM: convert printk(KERN_* to pr_* 2014-11-21 15:24:50 +00:00
early_printk.c early_printk: consolidate random copies of identical code 2013-04-29 18:28:13 -07:00
elf.c Disintegrate asm/system.h for ARM 2012-03-28 18:30:01 +01:00
entry-armv.S Merge branches 'fiq' (early part), 'fixes', 'l2c' (early part) and 'misc' into for-next 2014-10-02 21:47:02 +01:00
entry-common.S ARM: move ftrace assembly code to separate file 2014-11-21 15:25:01 +00:00
entry-ftrace.S ARM: move ftrace assembly code to separate file 2014-11-21 15:25:01 +00:00
entry-header.S ARM: 8266/1: Remove early stack deallocation from restore_user_regs 2015-01-12 19:26:57 +00:00
entry-v7m.S ARM: 7890/1: v7-M: drop using mach/entry-macro.S 2013-12-29 12:32:32 +00:00
fiq.c ARM: convert printk(KERN_* to pr_* 2014-11-21 15:24:50 +00:00
fiqasm.S ARM: convert all "mov.* pc, reg" to "bx reg" for ARMv6+ 2014-07-18 12:29:04 +01:00
ftrace.c ARM: mm: allow text and rodata sections to be read-only 2014-10-16 14:38:54 -07:00
head-common.S ARM: convert all "mov.* pc, reg" to "bx reg" for ARMv6+ 2014-07-18 12:29:04 +01:00
head-nommu.S ARM: convert all "mov.* pc, reg" to "bx reg" for ARMv6+ 2014-07-18 12:29:04 +01:00
head.S ARM: convert all "mov.* pc, reg" to "bx reg" for ARMv6+ 2014-07-18 12:29:04 +01:00
hibernate.c nosave: consolidate __nosave_{begin,end} in <asm/sections.h> 2014-10-09 22:26:04 -04:00
hw_breakpoint.c ARM: removing support for etb/etm in "arch/arm/kernel/" 2014-11-07 15:19:33 -08:00
hyp-stub.S Here are the PPC and ARM changes for KVM, which I separated because 2014-08-07 11:35:30 -07:00
insn.c ARM: fix missing bug.h include in arch/arm/kernel/insn.c 2012-03-30 11:51:46 +01:00
insn.h ARM: 7334/1: add jump label support 2012-03-24 09:38:56 +00:00
io.c ARM: io.c: clean up EXPORT_SYMBOL()s 2014-11-21 15:25:02 +00:00
irq.c ARM: use pr_warn_ratelimited() when migrating IRQs 2014-11-21 15:24:51 +00:00
isa.c arm: convert use of typedef ctl_table to struct ctl_table 2014-06-06 16:08:15 -07:00
iwmmxt.S ARM: 8221/1: PJ4: allow building in Thumb-2 mode 2014-12-03 16:08:00 +00:00
jump_label.c arm: use fixmap for text patching when text is RO 2014-10-16 14:38:53 -07:00
kgdb.c arm: kgdb: Handle read-only text / modules 2014-10-16 14:38:53 -07:00
kprobes-arm.c ARM: Make arch_specific_insn a define for new arch_probes_insn structure 2014-03-18 16:39:40 -04:00
kprobes-common.c ARM: probes: fix instruction fetch order with <asm/opcodes.h> 2014-04-01 16:45:19 +03:00
kprobes-test-arm.c ARM: kprobes: Fix test code compilation errors for ARMv4 targets 2014-07-02 12:48:36 +01:00
kprobes-test-thumb.c ARM: kprobes-test: use <asm/opcodes.h> for Thumb instruction building 2014-04-01 16:48:26 +03:00
kprobes-test.c ARM: 8179/1: kprobes-test: Fix compile error "bad immediate value for offset" 2014-09-30 16:55:24 +01:00
kprobes-test.h ARM: 8179/1: kprobes-test: Fix compile error "bad immediate value for offset" 2014-09-30 16:55:24 +01:00
kprobes-thumb.c ARM: probes: fix instruction fetch order with <asm/opcodes.h> 2014-04-01 16:45:19 +03:00
kprobes.c ARM: probes: fix instruction fetch order with <asm/opcodes.h> 2014-04-01 16:45:19 +03:00
kprobes.h ARM: Make arch_specific_insn a define for new arch_probes_insn structure 2014-03-18 16:39:40 -04:00
machine_kexec.c Merge branch 'devel-stable' into for-next 2014-12-05 16:30:54 +00:00
module.c ARM: convert printk(KERN_* to pr_* 2014-11-21 15:24:50 +00:00
opcodes.c ARM: 7206/1: Add generic ARM instruction set condition code checks. 2011-12-13 08:52:02 +00:00
patch.c arm: use fixmap for text patching when text is RO 2014-10-16 14:38:53 -07:00
patch.h arm: use fixmap for text patching when text is RO 2014-10-16 14:38:53 -07:00
perf_callchain.c arm: perf: factor out callchain code 2014-10-30 12:16:58 +00:00
perf_event.c ARM: 8255/1: perf: Prevent wraparound during overflow 2015-01-12 19:28:46 +00:00
perf_event_cpu.c arm: perf: fold hotplug notifier into arm_pmu 2014-10-30 12:17:01 +00:00
perf_event_v6.c arm: perf: kill get_hw_events() 2014-10-30 12:17:00 +00:00
perf_event_v7.c arm: perf: kill get_hw_events() 2014-10-30 12:17:00 +00:00
perf_event_xscale.c arm: perf: kill get_hw_events() 2014-10-30 12:17:00 +00:00
perf_regs.c ARM: perf: add support for perf registers API 2013-09-30 16:41:50 +01:00
pj4-cp0.c ARM: 8040/1: pj4: properly detect existence of iWMMXt coprocessor 2014-04-25 12:07:34 +01:00
probes-arm.c ARM: kprobes: Disallow instructions with PC and register specified shift 2014-07-02 12:48:36 +01:00
probes-arm.h ARM: Make arch_specific_insn a define for new arch_probes_insn structure 2014-03-18 16:39:40 -04:00
probes-thumb.c ARM: Make arch_specific_insn a define for new arch_probes_insn structure 2014-03-18 16:39:40 -04:00
probes-thumb.h ARM: Make arch_specific_insn a define for new arch_probes_insn structure 2014-03-18 16:39:40 -04:00
probes.c ARM: probes: fix instruction fetch order with <asm/opcodes.h> 2014-04-01 16:45:19 +03:00
probes.h ARM: Make arch_specific_insn a define for new arch_probes_insn structure 2014-03-18 16:39:40 -04:00
process.c ARM: 8241/1: Update processor_modes for hyp and monitor mode 2014-12-03 16:00:07 +00:00
psci.c PSCI: Add initial support for PSCIv0.2 functions 2014-05-15 10:16:00 -04:00
psci_smp.c ARM: Check if a CPU has gone offline 2014-05-15 10:16:30 -04:00
ptrace.c Merge git://git.infradead.org/users/eparis/audit 2014-10-19 16:25:56 -07:00
relocate_kernel.S ARM: convert all "mov.* pc, reg" to "bx reg" for ARMv6+ 2014-07-18 12:29:04 +01:00
return_address.c ARM: 8171/1: Use current_stack_pointer for return_address 2014-11-13 23:58:01 +00:00
setup.c ARM: SoC/iommu configuration for 3.19 2014-12-16 14:53:01 -08:00
signal.c ARM: 8194/1: remove clear_thread_flag(TIF_UPROBE) 2014-11-17 20:53:55 +00:00
sigreturn_codes.S ARM: 7895/1: signal: fix armv7-m build issue in sigreturn_codes.S 2013-11-30 22:21:00 +00:00
sleep.S ARM: convert all "mov.* pc, reg" to "bx reg" for ARMv6+ 2014-07-18 12:29:04 +01:00
smp.c ARM: remove "SMP: Total of %d processors activated." message 2014-11-21 15:24:57 +00:00
smp_scu.c ARM: 8122/1: smp_scu: enable SCU standby support 2014-08-02 08:51:53 +01:00
smp_tlb.c ARM: 8111/1: Enable erratum 798181 for Broadcom Brahma-B15 2014-07-24 14:40:26 +01:00
smp_twd.c ARM: convert printk(KERN_* to pr_* 2014-11-21 15:24:50 +00:00
stacktrace.c ARM: 8172/1: Use current_stack_pointer in save_stack_trace_tsk 2014-11-13 23:58:03 +00:00
suspend.c ARM: suspend: use hash of cpu_logical_map value to index into save array 2013-07-30 09:00:43 -04:00
swp_emulate.c ARM: convert printk(KERN_* to pr_* 2014-11-21 15:24:50 +00:00
sys_arm.c arm: switch to generic fork/vfork/clone 2012-11-28 22:13:54 -05:00
sys_oabi-compat.c separate kernel- and userland-side msghdr 2014-11-19 16:22:59 -05:00
tcm.c ARM: add permission annotations to MT_MEMORY* mapping types 2013-12-11 09:53:14 +00:00
thumbee.c ARM: convert printk(KERN_* to pr_* 2014-11-21 15:24:50 +00:00
time.c ARM: 8072/1: time: Make use of arm_get_current_stackframe 2014-07-18 12:29:14 +01:00
topology.c ARM: convert printk(KERN_* to pr_* 2014-11-21 15:24:50 +00:00
traps.c Merge branches 'fixes', 'misc', 'pm' and 'sa1100' into for-next 2014-12-05 16:30:47 +00:00
unwind.c ARM: 8176/1: Use current_stack_pointer in unwind_backtrace 2014-11-13 23:58:09 +00:00
uprobes-arm.c ARM: add uprobes support 2014-03-18 16:39:40 -04:00
uprobes.c ARM: 8043/1: uprobes need icache flush after xol write 2014-05-25 23:48:45 +01:00
uprobes.h ARM: add uprobes support 2014-03-18 16:39:40 -04:00
v7m.c ARM: 7828/1: ARMv7-M: implement restart routine common to all v7-M machines 2013-09-02 13:49:29 +01:00
vmlinux.lds.S generic fixmaps 2014-11-03 10:12:13 +00:00
xscale-cp0.c ARM: convert printk(KERN_* to pr_* 2014-11-21 15:24:50 +00:00