[PATCHv2 0/5] Legacy instruction emulation for arm64
Punit Agrawal
punit.agrawal at arm.com
Wed Oct 1 05:07:54 PDT 2014
Hi,
This is the second posting of the legacy instruction support for
arm64. The previous posting can be found at [1].
The patchset ports the infrastructure to register hooks for undefined
instruction abort and uses this to adds support for the emulation of
SWP{B} and CP15 Barrier instructions from ARMv7 to the v8 port of
Linux.
Via sysctl, it is possible to control the runtime state of emulation
* Off
sysctl value: 0
Generates undefined instruction abort. Default for instructions that
have been obsoleted in the architecture, e.g., SWP
* Emulate
sysctl value: 1
Uses software emulation. To aid migration of software, in this mode
usage of emulated instruction is traced as well as rate limited
warnings are issued. This is the default for deprecated
instructions, .e.g., CP15 barriers
* Enable
sysctl value: 2
Although marked as deprecated, some implementations may support the
enabling/disabling of hardware support for the execution of these
instructions. Using hardware execution generally provides better
performance, but at the loss of ability to gather runtime statistics
about the use of the deprecated instructions.
Patches 1-2/5 add infrastructure code to add support for undefined
instruction hooks and decoding condition checks.
Patch 3-4/6 adds support for SWP and CP15 barriers respectively. They
also provide the ability to control the emulation by writing one of
the above three values to /proc/sys/abi file nodes.
Patch 6/6 introduces a trace point to log instruction emulation and then
uses this to trace the usage of the above instructions when using
emulation.
Although not in a merge window, the intention of the posting is to
allow early access to the code to reduce divergenece in product
kernels where additional features are being worked on.
Cheers,
Punit
Changes since [1]:
* Added support for Thumb instructions when registering undefined
hooks as well
* Emulation support is now added to armv8_deprecated.c (was previously
v7_obsolete.c)
* Instruction support level - Off, Emulate or Enable (when supported
in hardware) - is now controlled through sysctl
* Using trace points instead of debugfs for stats reporting
[1] http://thread.gmane.org/gmane.linux.ports.arm.kernel/351054
Punit Agrawal (5):
arm64: Add support for hooks to handle undefined instructions
arm64: Add AArch32 instruction set condition code checks
arm64: Port SWP/SWPB emulation support from arm
arm64: Emulate CP15 Barrier instructions
arm64: Trace emulation of AArch32 legacy instructions
arch/arm64/Kconfig | 54 ++++
arch/arm64/include/asm/insn.h | 10 +
arch/arm64/include/asm/opcodes.h | 1 +
arch/arm64/include/asm/traps.h | 16 ++
arch/arm64/kernel/Makefile | 5 +-
arch/arm64/kernel/armv8_deprecated.c | 489 ++++++++++++++++++++++++++++++++++
arch/arm64/kernel/insn.c | 26 ++
arch/arm64/kernel/traps.c | 68 +++++
include/trace/events/emulation.h | 35 +++
9 files changed, 703 insertions(+), 1 deletion(-)
create mode 100644 arch/arm64/include/asm/opcodes.h
create mode 100644 arch/arm64/kernel/armv8_deprecated.c
create mode 100644 include/trace/events/emulation.h
--
1.7.10.4
More information about the linux-arm-kernel
mailing list