linux/arch/arm64
Suzuki K. Poulose dbb4e152b8 arm64: Delay cpu feature capability checks
At the moment we run through the arm64_features capability list for
each CPU and set the capability if one of the CPU supports it. This
could be problematic in a heterogeneous system with differing capabilities.
Delay the CPU feature checks until all the enabled CPUs are up(i.e,
smp_cpus_done(), so that we can make better decisions based on the
overall system capability. Once we decide and advertise the capabilities
the alternatives can be applied. From this state, we cannot roll back
a feature to disabled based on the values from a new hotplugged CPU,
due to the runtime patching and other reasons. So, for all new CPUs,
we need to make sure that they have the established system capabilities.
Failing which, we bring the CPU down, preventing it from turning online.
Once the capabilities are decided, any new CPU booting up goes through
verification to ensure that it has all the enabled capabilities and also
invokes the respective enable() method on the CPU.

The CPU errata checks are not delayed and is still executed per-CPU
to detect the respective capabilities. If we ever come across a non-errata
capability that needs to be checked on each-CPU, we could introduce them via
a new capability table(or introduce a flag), which can be processed per CPU.

The next patch will make the feature checks use the system wide
safe value of a feature register.

NOTE: The enable() methods associated with the capability is scheduled
on all the CPUs (which is the only use case at the moment). If we need
a different type of 'enable()' which only needs to be run once on any CPU,
we should be able to handle that when needed.

Signed-off-by: Suzuki K. Poulose <suzuki.poulose@arm.com>
Tested-by: Dave Martin <Dave.Martin@arm.com>
[catalin.marinas@arm.com: static variable and coding style fixes]
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2015-10-21 15:35:58 +01:00
..
boot arm64: dts: juno: describe PMUs separately 2015-10-07 14:25:41 +01:00
configs arm64: defconfig: Enable samsung serial and mmc 2015-10-07 11:34:24 +01:00
crypto crypto: aead - Remove CRYPTO_ALG_AEAD_NEW flag 2015-08-17 16:53:53 +08:00
include arm64: Delay cpu feature capability checks 2015-10-21 15:35:58 +01:00
kernel arm64: Delay cpu feature capability checks 2015-10-21 15:35:58 +01:00
kvm arm64: Add 16K page size support 2015-10-19 17:55:12 +01:00
lib arm64: add KASAN support 2015-10-12 17:46:36 +01:00
mm arm64: Delay cpu feature capability checks 2015-10-21 15:35:58 +01:00
net arm64: bpf: fix endianness conversion bugs 2015-06-26 14:15:39 +01:00
xen arm: xen: implement multicall hypercall support. 2014-04-24 13:09:46 +01:00
Kconfig arm64: Make 36-bit VA depend on EXPERT 2015-10-20 14:59:20 +01:00
Kconfig.debug arm64: Clean config usages for page size 2015-10-19 17:53:57 +01:00
Kconfig.platforms arm64: Enable Marvell Berlin SoC family in Kconfig 2015-08-06 10:15:01 +02:00
Makefile arm64: add KASAN support 2015-10-12 17:46:36 +01:00