Michal Suchanek a5e124
From 395b2c090907975c627902ba8fda0bdb04c7cad3 Mon Sep 17 00:00:00 2001
Michal Suchanek a5e124
From: Nathan Lynch <nathanl@linux.ibm.com>
Michal Suchanek a5e124
Date: Mon, 7 Dec 2020 15:51:53 -0600
Michal Suchanek a5e124
Subject: [PATCH] powerpc/rtas: remove rtas_suspend_cpu()
Michal Suchanek a5e124
Michal Suchanek a5e124
References: bsc#1181674 ltc#189159
Michal Suchanek a5e124
Patch-mainline: v5.11-rc1
Michal Suchanek a5e124
Git-commit: 395b2c090907975c627902ba8fda0bdb04c7cad3
Michal Suchanek a5e124
Michal Suchanek a5e124
rtas_suspend_cpu() no longer has users; remove it and
Michal Suchanek a5e124
__rtas_suspend_cpu() which now becomes unused as well.
Michal Suchanek a5e124
Michal Suchanek a5e124
Signed-off-by: Nathan Lynch <nathanl@linux.ibm.com>
Michal Suchanek a5e124
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Michal Suchanek a5e124
Link: https://lore.kernel.org/r/20201207215200.1785968-22-nathanl@linux.ibm.com
Michal Suchanek a5e124
Acked-by: Michal Suchanek <msuchanek@suse.de>
Michal Suchanek a5e124
---
Michal Suchanek a5e124
 arch/powerpc/include/asm/rtas.h |  1 -
Michal Suchanek a5e124
 arch/powerpc/kernel/rtas.c      | 52 ---------------------------------
Michal Suchanek a5e124
 2 files changed, 53 deletions(-)
Michal Suchanek a5e124
Michal Suchanek a5e124
diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h
Michal Suchanek a5e124
index 9a6107ffe378..97ccb40fb09f 100644
Michal Suchanek a5e124
--- a/arch/powerpc/include/asm/rtas.h
Michal Suchanek a5e124
+++ b/arch/powerpc/include/asm/rtas.h
Michal Suchanek a5e124
@@ -256,7 +256,6 @@ extern bool rtas_indicator_present(int token, int *maxindex);
Michal Suchanek a5e124
 extern int rtas_set_indicator(int indicator, int index, int new_value);
Michal Suchanek a5e124
 extern int rtas_set_indicator_fast(int indicator, int index, int new_value);
Michal Suchanek a5e124
 extern void rtas_progress(char *s, unsigned short hex);
Michal Suchanek a5e124
-extern int rtas_suspend_cpu(struct rtas_suspend_me_data *data);
Michal Suchanek a5e124
 extern int rtas_suspend_last_cpu(struct rtas_suspend_me_data *data);
Michal Suchanek a5e124
 int rtas_ibm_suspend_me(int *fw_status);
Michal Suchanek a5e124
 
Michal Suchanek a5e124
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
Michal Suchanek a5e124
--- a/arch/powerpc/kernel/rtas.c
Michal Suchanek a5e124
+++ b/arch/powerpc/kernel/rtas.c
Michal Suchanek a5e124
@@ -873,57 +873,6 @@ int rtas_suspend_last_cpu(struct rtas_suspend_me_data *data)
Michal Suchanek a5e124
 	return __rtas_suspend_last_cpu(data, 0);
Michal Suchanek a5e124
 }
Michal Suchanek a5e124
 
Michal Suchanek a5e124
-static int __rtas_suspend_cpu(struct rtas_suspend_me_data *data, int wake_when_done)
Michal Suchanek a5e124
-{
Michal Suchanek a5e124
-	long rc = H_SUCCESS;
Michal Suchanek a5e124
-	unsigned long msr_save;
Michal Suchanek a5e124
-	int cpu;
Michal Suchanek a5e124
-
Michal Suchanek a5e124
-	atomic_inc(&data->working);
Michal Suchanek a5e124
-
Michal Suchanek a5e124
-	/* really need to ensure MSR.EE is off for H_JOIN */
Michal Suchanek a5e124
-	msr_save = mfmsr();
Michal Suchanek a5e124
-	mtmsr(msr_save & ~(MSR_EE));
Michal Suchanek a5e124
-
Michal Suchanek a5e124
-	while (rc == H_SUCCESS && !atomic_read(&data->done) && !atomic_read(&data->error))
Michal Suchanek a5e124
-		rc = plpar_hcall_norets(H_JOIN);
Michal Suchanek a5e124
-
Michal Suchanek a5e124
-	mtmsr(msr_save);
Michal Suchanek a5e124
-
Michal Suchanek a5e124
-	if (rc == H_SUCCESS) {
Michal Suchanek a5e124
-		/* This cpu was prodded and the suspend is complete. */
Michal Suchanek a5e124
-		goto out;
Michal Suchanek a5e124
-	} else if (rc == H_CONTINUE) {
Michal Suchanek a5e124
-		/* All other cpus are in H_JOIN, this cpu does
Michal Suchanek a5e124
-		 * the suspend.
Michal Suchanek a5e124
-		 */
Michal Suchanek a5e124
-		return __rtas_suspend_last_cpu(data, wake_when_done);
Michal Suchanek a5e124
-	} else {
Michal Suchanek a5e124
-		printk(KERN_ERR "H_JOIN on cpu %i failed with rc = %ld\n",
Michal Suchanek a5e124
-		       smp_processor_id(), rc);
Michal Suchanek a5e124
-		atomic_set(&data->error, rc);
Michal Suchanek a5e124
-	}
Michal Suchanek a5e124
-
Michal Suchanek a5e124
-	if (wake_when_done) {
Michal Suchanek a5e124
-		atomic_set(&data->done, 1);
Michal Suchanek a5e124
-
Michal Suchanek a5e124
-		/* This cpu did the suspend or got an error; in either case,
Michal Suchanek a5e124
-		 * we need to prod all other other cpus out of join state.
Michal Suchanek a5e124
-		 * Extra prods are harmless.
Michal Suchanek a5e124
-		 */
Michal Suchanek a5e124
-		for_each_online_cpu(cpu)
Michal Suchanek a5e124
-			plpar_hcall_norets(H_PROD, get_hard_smp_processor_id(cpu));
Michal Suchanek a5e124
-	}
Michal Suchanek a5e124
-out:
Michal Suchanek a5e124
-	if (atomic_dec_return(&data->working) == 0)
Michal Suchanek a5e124
-		complete(data->complete);
Michal Suchanek a5e124
-	return rc;
Michal Suchanek a5e124
-}
Michal Suchanek a5e124
-
Michal Suchanek a5e124
-int rtas_suspend_cpu(struct rtas_suspend_me_data *data)
Michal Suchanek a5e124
-{
Michal Suchanek a5e124
-	return __rtas_suspend_cpu(data, 0);
Michal Suchanek a5e124
-}
Michal Suchanek a5e124
 #endif /* CONFIG_PPC_PSERIES */
Michal Suchanek a5e124
 
Michal Suchanek a5e124
 /**
Michal Suchanek a5e124
-- 
Michal Suchanek a5e124
2.26.2
Michal Suchanek a5e124