[coreboot-gerrit] New patch to review for coreboot: 1eba370 arm64: provide run on all cpu but self semantics

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Fri Mar 27 09:59:19 CET 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/9082

-gerrit

commit 1eba3703f36e032a8453a95fa73a3eef8831f800
Author: Aaron Durbin <adurbin at chromium.org>
Date:   Wed Sep 17 12:00:57 2014 -0500

    arm64: provide run on all cpu but self semantics
    
    In order to provide richer semantics for running code
    on all CPUs add an all-but-self construct.
    
    BUG=chrome-os-partner:32082
    BRANCH=None
    TEST=Built and booted to kernel.
    
    Change-Id: If8dd28ff7f34d93592ab2025a65a2fd665e4e608
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: 9a4622f63a065f620f0c92ef92eeb2aa5c2b441d
    Original-Change-Id: Id18dc0423bcb0016ed36ace659b3f858e824c46c
    Original-Signed-off-by: Aaron Durbin <adurbin at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/218652
    Original-Reviewed-by: Furquan Shaikh <furquan at chromium.org>
---
 src/arch/arm64/cpu.c                    | 25 +++++++++++++++++++++++++
 src/arch/arm64/include/armv8/arch/cpu.h |  2 ++
 2 files changed, 27 insertions(+)

diff --git a/src/arch/arm64/cpu.c b/src/arch/arm64/cpu.c
index 396c5b7..c0dc3c3 100644
--- a/src/arch/arm64/cpu.c
+++ b/src/arch/arm64/cpu.c
@@ -297,6 +297,21 @@ static int __arch_run_on_all_cpus(struct cpu_action *action, int sync)
 	return 0;
 }
 
+static int __arch_run_on_all_cpus_but_self(struct cpu_action *action, int sync)
+{
+	int i;
+	struct cpu_info *me = cpu_info();
+
+	for (i = 0; i < CONFIG_MAX_CPUS; i++) {
+		struct cpu_info *ci = cpu_info_for_cpu(i);
+		if (ci == me)
+			continue;
+		action_run_on_cpu(ci, action, sync);
+	}
+
+	return 0;
+}
+
 int arch_run_on_all_cpus(struct cpu_action *action)
 {
 	return __arch_run_on_all_cpus(action, 1);
@@ -307,6 +322,16 @@ int arch_run_on_all_cpus_async(struct cpu_action *action)
 	return __arch_run_on_all_cpus(action, 0);
 }
 
+int arch_run_on_all_cpus_but_self(struct cpu_action *action)
+{
+	return __arch_run_on_all_cpus_but_self(action, 1);
+}
+
+int arch_run_on_all_cpus_but_self_async(struct cpu_action *action)
+{
+	return __arch_run_on_all_cpus_but_self(action, 0);
+}
+
 void arch_secondary_cpu_init(void)
 {
 	struct cpu_info *ci = cpu_info();
diff --git a/src/arch/arm64/include/armv8/arch/cpu.h b/src/arch/arm64/include/armv8/arch/cpu.h
index a5d20c4..d262385 100644
--- a/src/arch/arm64/include/armv8/arch/cpu.h
+++ b/src/arch/arm64/include/armv8/arch/cpu.h
@@ -94,8 +94,10 @@ void arch_initialize_cpus(device_t cluster, struct cpu_control_ops *cntrl_ops);
  */
 int arch_run_on_cpu(unsigned int cpu, struct cpu_action *action);
 int arch_run_on_all_cpus(struct cpu_action *action);
+int arch_run_on_all_cpus_but_self(struct cpu_action *action);
 int arch_run_on_cpu_async(unsigned int cpu, struct cpu_action *action);
 int arch_run_on_all_cpus_async(struct cpu_action *action);
+int arch_run_on_all_cpus_but_self_async(struct cpu_action *action);
 
 #endif /* !__PRE_RAM__ */
 



More information about the coreboot-gerrit mailing list