diff options
author | Ard Biesheuvel <ardb@kernel.org> | 2023-03-18 17:24:27 +0100 |
---|---|---|
committer | Ard Biesheuvel <ardb@kernel.org> | 2023-05-16 20:24:08 +0200 |
commit | 8769177658d3559c4323200a719dd456d2f2675a (patch) | |
tree | 0720bd3cf595858aed661c4f9ddb51e5a3131954 /arch/arm/vfp | |
parent | f1fcbaa18b28dec10281551dfe6ed3a3ed80e3d6 (diff) |
ARM: vfp: Record VFP bounces as perf emulation faults
VFP 'bouncing' occurs when the VFP unit cannot complete the execution of
a VFP instruction, either because it is not implemented at all, or
because the values of the arguments are out of range for the hardware
implementation, and the software needs to step in to complete the
operation.
To give some insight in how much certain programs rely on this bouncing,
record the emulation of a VFP instruction in perf's emulation-faults
counter.
This can be used like so
perf stat -e emulation-faults ./testfloat -all2
and the output will be something like
Performance counter stats for './testfloat -all2':
259,277 emulation-faults:u
6.846432176 seconds time elapsed
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Diffstat (limited to 'arch/arm/vfp')
-rw-r--r-- | arch/arm/vfp/vfpmodule.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c index 349dcb944a93..08d5dfcf7079 100644 --- a/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c @@ -18,6 +18,7 @@ #include <linux/uaccess.h> #include <linux/user.h> #include <linux/export.h> +#include <linux/perf_event.h> #include <asm/cp15.h> #include <asm/cputype.h> @@ -313,6 +314,7 @@ static u32 vfp_emulate_instruction(u32 inst, u32 fpscr, struct pt_regs *regs) * emulate it. */ } + perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, regs, regs->ARM_pc); return exceptions & ~VFP_NAN_FLAG; } |