[Skiboot] [PATCH] FSP: Handle DPO initiated CEC shutdown with FSP in RR
Ananth N Mavinakayanahalli
ananth at in.ibm.com
Fri Nov 6 21:41:53 AEDT 2015
On Fri, Nov 06, 2015 at 04:05:16PM +0530, Neelesh Gupta wrote:
> Hi Ananth,
>
> On 11/06/2015 03:10 PM, Ananth N Mavinakayanahalli wrote:
> >In a scenario where the DPO has been initiated, but the FSP then went into
> >reset before the CEC power down came in, OPAL may not give up the link since
> >it may never see the PSI interrupt. So, if we are in dpo_pending and an FSP
> >reset is detected via the DISR, give up the PSI link voluntarily.
> >
> >Tested-by: Vipin K Parashar <vipin at linux.vnet.ibm.com>
> >Signed-off-by: Ananth N Mavinakayanahalli <ananth at in.ibm.com>
> >---
> > hw/fsp/fsp-dpo.c | 2 +-
> > hw/fsp/fsp.c | 20 +++++++++++++++++---
> > include/fsp.h | 1 +
> > 3 files changed, 19 insertions(+), 4 deletions(-)
> >
> >diff --git a/hw/fsp/fsp-dpo.c b/hw/fsp/fsp-dpo.c
> >index 8c7c296..f6fadc5 100644
> >--- a/hw/fsp/fsp-dpo.c
> >+++ b/hw/fsp/fsp-dpo.c
> >@@ -29,7 +29,7 @@
> > #define DPO_CMD_SGN_BYTE1 0x20 /* Byte[1] signature */
> > #define DPO_TIMEOUT 2700 /* 45 minutes in seconds */
> >-static bool fsp_dpo_pending;
> >+bool fsp_dpo_pending;
> > static unsigned long fsp_dpo_init_tb;
> > /*
> >diff --git a/hw/fsp/fsp.c b/hw/fsp/fsp.c
> >index ab625a5..b53c3f0 100644
> >--- a/hw/fsp/fsp.c
> >+++ b/hw/fsp/fsp.c
> >@@ -666,9 +666,23 @@ static void fsp_handle_errors(struct fsp *fsp)
> > if (fsp->state == fsp_mbx_rr)
> > return;
> >- prlog(PR_NOTICE, "FSP #%d: FSP in Reset."
> >- " Waiting for PSI interrupt\n",
> >- fsp->index);
> >+ if (fsp_dpo_pending) {
> >+ /*
> >+ * If we are about to process a reset when DPO
> >+ * is pending, its possible that the host has
> >+ * gone down, and OPAL is on its way down and
> >+ * hence will not see the subsequent PSI interrupt.
> >+ * So, just give up the link here.
> >+ */
> >+ prlog(PR_NOTICE, "FSP #%d: FSP reset with DPO pending."
> >+ " Giving up PSI link\n",
> >+ fsp->index);
> >+ psi_disable_link(psi);
> >+ } else {
> >+ prlog(PR_NOTICE, "FSP #%d: FSP in Reset."
> >+ " Waiting for PSI interrupt\n",
> >+ fsp->index);
> >+ }
>
> Instead of exporting the dpo variable.. can we register a dpo client
> for RR_EVENT
> with moving this logic there and the function just below
> 'fsp_start_rr()' will do the
> rest ...
I thought of that possibility, but its already too late -- fsp->iopath
is set to -1, and from struct fsp, there will be no way to get to struct
psi. Hence this special case.
Ananth
More information about the Skiboot
mailing list