diff options
author | Stewart Smith <stewart@linux.ibm.com> | 2019-05-03 16:45:53 +1000 |
---|---|---|
committer | Stewart Smith <stewart@linux.ibm.com> | 2019-05-03 16:45:53 +1000 |
commit | 14f709b8eeda7e9ea7169b782e981c908de92e10 (patch) | |
tree | fd2325f738038ac80ca4f839ec35f33e1e58e44c /core | |
parent | 119108908e9b1de9a3f24f27a16f4efe4ca3a0b4 (diff) | |
download | skiboot-14f709b8eeda7e9ea7169b782e981c908de92e10.zip skiboot-14f709b8eeda7e9ea7169b782e981c908de92e10.tar.gz skiboot-14f709b8eeda7e9ea7169b782e981c908de92e10.tar.bz2 |
Disable fast-reset for POWER8
There is a bug with fast-reset when CPU cores are busy, which can be
reproduced by running `stress` and then trying `reboot -ff` (this is
what the op-test test cases FastRebootHostStress and
FastRebootHostStressTorture do). What happens is the cores lock up,
which isn't the best thing in the world when you want them to start
executing instructions again.
A workaround is to use instruction ramming, which while greatly
increasing the reliability of fast-reset on p8, doesn't make it perfect.
Instruction ramming is what pdbg was modified to do in order to have the
sreset functionality work reliably on p8.
pdbg patches: https://patchwork.ozlabs.org/project/pdbg/list/?series=96593&state=*
Fixes: https://github.com/open-power/skiboot/issues/185
Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
Diffstat (limited to 'core')
-rw-r--r-- | core/platform.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/core/platform.c b/core/platform.c index 570a430..62361f5 100644 --- a/core/platform.c +++ b/core/platform.c @@ -59,9 +59,16 @@ static int64_t opal_cec_reboot(void) opal_quiesce(QUIESCE_HOLD, -1); - /* Try fast-reset unless explicitly disabled */ - if (!nvram_query_eq("fast-reset","0")) + if (proc_gen == proc_gen_p8 && nvram_query_eq("fast-reset","1")) { + /* + * Bugs in P8 mean fast reboot isn't 100% reliable when cores + * are busy, so only attempt if explicitly *enabled*. + */ + fast_reboot(); + } else if (!nvram_query_eq("fast-reset","0")) { + /* Try fast-reset unless explicitly disabled */ fast_reboot(); + } console_complete_flush(); |