Thread (44 messages) 44 messages, 3 authors, 2018-07-23

[PATCH v4 04/26] arm64: alternative: Apply alternatives early in boot process

From: Suzuki.Poulose@arm.com (Suzuki K Poulose)
Date: 2018-05-25 10:01:03
Also in: lkml

On 25/05/18 10:49, Julien Thierry wrote:
From: Daniel Thompson <redacted>

Currently alternatives are applied very late in the boot process (and
a long time after we enable scheduling). Some alternative sequences,
such as those that alter the way CPU context is stored, must be applied
much earlier in the boot sequence.

Introduce apply_boot_alternatives() to allow some alternatives to be
applied immediately after we detect the CPU features of the boot CPU.

Signed-off-by: Daniel Thompson <redacted>
[julien.thierry at arm.com: rename to fit new cpufeature framework better,
			 apply BOOT_SCOPE feature early in boot]
Signed-off-by: Julien Thierry <redacted>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <redacted>
Cc: Christoffer Dall <redacted>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
---
  arch/arm64/include/asm/alternative.h |  3 +--
  arch/arm64/include/asm/cpufeature.h  |  2 ++
  arch/arm64/kernel/alternative.c      | 30 +++++++++++++++++++++++++++---
  arch/arm64/kernel/cpufeature.c       |  5 +++++
  arch/arm64/kernel/smp.c              |  7 +++++++
  5 files changed, 42 insertions(+), 5 deletions(-)
...
quoted hunk ↗ jump to hunk
  
+unsigned long boot_capabilities;
+
  /*
   * Flag to indicate if we have computed the system wide
   * capabilities based on the boot time active CPUs. This
@@ -1370,6 +1372,9 @@ static void __update_cpu_capabilities(const struct arm64_cpu_capabilities *caps,
  		if (!cpus_have_cap(caps->capability) && caps->desc)
  			pr_info("%s %s\n", info, caps->desc);
  		cpus_set_cap(caps->capability);
+
+		if (scope_mask & SCOPE_BOOT_CPU)
+			__set_bit(caps->capability, &boot_capabilities);
Julien

I think this check is problematic. The scope_mask passed on by the boot CPU
is (SCOPE_BOOT_CPU | SCOPE_LOCAL_CPU) to cover both BOOT CPU capabilities *and*
CPU local capabilites on the boot CPU. So, you might apply the alternatives for
a "local" CPU erratum, which is not intended. You may change the above check to :

	if (caps->type & SCOPE_BOOT_CPU)

to make sure you check the "capability" has the SCOPE_BOOT_CPU set.

Suzuki
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help