[Skiboot] [PATCH v3 11/29] fast-reboot: inline fast_reset_p8 into fast_reboot
Nicholas Piggin
npiggin at gmail.com
Wed Nov 29 16:36:49 AEDT 2017
This function has shrunk to the point it's not so helpful to keep it,
it's no longer power8 specific, and getting rid of it simplifies
error handling a little in future changes.
Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
---
core/fast-reboot.c | 54 ++++++++++++++++++++++++------------------------------
1 file changed, 24 insertions(+), 30 deletions(-)
diff --git a/core/fast-reboot.c b/core/fast-reboot.c
index 47b72d5f9..679e1ca3e 100644
--- a/core/fast-reboot.c
+++ b/core/fast-reboot.c
@@ -316,32 +316,6 @@ static int sreset_all_others(void)
return OPAL_UNSUPPORTED;
}
-static bool fast_reset_p8(void)
-{
- struct cpu_thread *cpu;
-
- if (sreset_all_prepare())
- return false;
-
- /* Put everybody in stop except myself */
- for_each_ungarded_cpu(cpu) {
- /* Also make sure that saved_r1 is 0 ! That's what will
- * make our reset vector jump to fast_reboot_entry
- */
- cpu->save_r1 = 0;
- }
-
- /* Restore skiboot vectors */
- copy_exception_vectors();
- setup_reset_vector();
-
- /* Send everyone else to 0x100 */
- if (sreset_all_others() == OPAL_SUCCESS)
- return true;
-
- return false;
-}
-
static bool cpu_state_wait_all_others(enum cpu_thread_state state,
unsigned long timeout_tb)
{
@@ -386,7 +360,7 @@ void disable_fast_reboot(const char *reason)
void fast_reboot(void)
{
- bool success;
+ struct cpu_thread *cpu;
static int fast_reboot_count = 0;
if (proc_gen != proc_gen_p8) {
@@ -428,12 +402,32 @@ void fast_reboot(void)
fast_boot_release = false;
sync();
- success = fast_reset_p8();
+ /* Put everybody in stop except myself */
+ if (sreset_all_prepare())
+ return;
- /* Unlock, at this point we go away */
+ /* Now everyone else is stopped */
unlock(&reset_lock);
- if (!success)
+ /*
+ * There is no point clearing special wakeup due to failure after this
+ * point, because we will be going to full IPL. Less cleanup work means
+ * less opportunity to fail.
+ */
+
+ for_each_ungarded_cpu(cpu) {
+ /* Also make sure that saved_r1 is 0 ! That's what will
+ * make our reset vector jump to fast_reboot_entry
+ */
+ cpu->save_r1 = 0;
+ }
+
+ /* Restore skiboot vectors */
+ copy_exception_vectors();
+ setup_reset_vector();
+
+ /* Send everyone else to 0x100 */
+ if (sreset_all_others() != OPAL_SUCCESS)
return;
/* Ensure all the sresets get through */
--
2.15.0
More information about the Skiboot
mailing list