All of lore.kernel.org
 help / color / mirror / Atom feed
From: <Ajish.Koshy@microchip.com>
To: <jinpu.wang@ionos.com>
Cc: <linux-scsi@vger.kernel.org>,
	<Vasanthalakshmi.Tharmarajan@microchip.com>,
	<Viswas.G@microchip.com>
Subject: RE: [PATCH] scsi: pm80xx: port reset timeout error handling correction.
Date: Thu, 6 Jan 2022 13:12:11 +0000	[thread overview]
Message-ID: <PH0PR11MB511212DDDA9FE8F980888AFBEC4C9@PH0PR11MB5112.namprd11.prod.outlook.com> (raw)
In-Reply-To: <CAMGffEnufGurL0FYetFKGe+ZpuEuwf69z1Hccn9Ppb+tQyT7Zg@mail.gmail.com>

Hi Jinpu,

> Hi Ajish,
> 
> 
> On Tue, Dec 28, 2021 at 12:15 PM Ajish Koshy <Ajish.Koshy@microchip.com>
> wrote:
> >
> > Error handling steps were not in sequence as per the programmers
> > manual. Expected sequence:
> >  -PHY_DOWN (PORT_IN_RESET)
> >  -PORT_RESET_TIMER_TMO
> >  -Host aborts pending I/Os
> >  -Host deregister the device
> >  -Host sends HW_EVENT_PHY_DOWN ack
> 
> Just to make sure, does the same sequence work for old pm8001 chip?

Currently this code is modified and executed based on 8006 controller.
I need to check with team members about the this sequence on old
controller pm8001 chip.

> >
> > Earlier, we were sending HW_EVENT_PHY_DOWN ack first and then
> > deregister the device.
> >
> > Signed-off-by: Ajish Koshy <Ajish.Koshy@microchip.com>
> > Signed-off-by: Viswas G <Viswas.G@microchip.com>
> > ---
> >  drivers/scsi/pm8001/pm8001_sas.c | 7 ++++++-
> > drivers/scsi/pm8001/pm8001_sas.h | 3 +++
> > drivers/scsi/pm8001/pm80xx_hwi.c | 7 +++++--
> >  3 files changed, 14 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/scsi/pm8001/pm8001_sas.c
> > b/drivers/scsi/pm8001/pm8001_sas.c
> > index c9a16eef38c1..160ee8b228c9 100644
> > --- a/drivers/scsi/pm8001/pm8001_sas.c
> > +++ b/drivers/scsi/pm8001/pm8001_sas.c
> > @@ -1199,7 +1199,7 @@ int pm8001_abort_task(struct sas_task *task)
> >         struct pm8001_device *pm8001_dev;
> >         struct pm8001_tmf_task tmf_task;
> >         int rc = TMF_RESP_FUNC_FAILED, ret;
> > -       u32 phy_id;
> > +       u32 phy_id, port_id;
> >         struct sas_task_slow slow_task;
> >
> >         if (unlikely(!task || !task->lldd_task || !task->dev)) @@
> > -1246,6 +1246,7 @@ int pm8001_abort_task(struct sas_task *task)
> >                         DECLARE_COMPLETION_ONSTACK(completion_reset);
> >                         DECLARE_COMPLETION_ONSTACK(completion);
> >                         struct pm8001_phy *phy = pm8001_ha->phy +
> > phy_id;
> > +                       port_id = phy->port->port_id;
> >
> >                         /* 1. Set Device state as Recovery */
> >                         pm8001_dev->setds_completion = &completion; @@
> > -1297,6 +1298,10 @@ int pm8001_abort_task(struct sas_task *task)
> >                                                 PORT_RESET_TMO);
> >                                 if (phy->port_reset_status == PORT_RESET_TMO) {
> >                                         pm8001_dev_gone_notify(dev);
> > +                                       PM8001_CHIP_DISP->hw_event_ack_req(
> > +                                               pm8001_ha, 0,
> > +                                               0x07, /*HW_EVENT_PHY_DOWN ack*/
> > +                                               port_id, phy_id, 0,
> > + 0);
> >                                         goto out;
> >                                 }
> >                         }
> > diff --git a/drivers/scsi/pm8001/pm8001_sas.h
> > b/drivers/scsi/pm8001/pm8001_sas.h
> > index 83eec16d021d..a17da1cebce1 100644
> > --- a/drivers/scsi/pm8001/pm8001_sas.h
> > +++ b/drivers/scsi/pm8001/pm8001_sas.h
> > @@ -216,6 +216,9 @@ struct pm8001_dispatch {
> >                 u32 state);
> >         int (*sas_re_init_req)(struct pm8001_hba_info *pm8001_ha);
> >         int (*fatal_errors)(struct pm8001_hba_info *pm8001_ha);
> > +       void (*hw_event_ack_req)(struct pm8001_hba_info *pm8001_ha,
> > +               u32 Qnum, u32 SEA, u32 port_id, u32 phyId, u32 param0,
> > +               u32 param1);
> >  };
> >
> >  struct pm8001_chip_info {
> > diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c
> > b/drivers/scsi/pm8001/pm80xx_hwi.c
> > index 0849ecc913c7..97750d0ebee9 100644
> > --- a/drivers/scsi/pm8001/pm80xx_hwi.c
> > +++ b/drivers/scsi/pm8001/pm80xx_hwi.c
> > @@ -3709,8 +3709,10 @@ static int mpi_hw_event(struct
> pm8001_hba_info *pm8001_ha, void *piomb)
> >                 break;
> >         case HW_EVENT_PORT_RESET_TIMER_TMO:
> >                 pm8001_dbg(pm8001_ha, MSG,
> "HW_EVENT_PORT_RESET_TIMER_TMO\n");
> > -               pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_PHY_DOWN,
> > -                       port_id, phy_id, 0, 0);
> > +               if (!pm8001_ha->phy[phy_id].reset_completion) {
> > +                       pm80xx_hw_event_ack_req(pm8001_ha, 0,
> HW_EVENT_PHY_DOWN,
> > +                               port_id, phy_id, 0, 0);
> > +               }
> >                 sas_phy_disconnected(sas_phy);
> >                 phy->phy_attached = 0;
> >                 sas_notify_port_event(sas_phy, PORTE_LINK_RESET_ERR,
> > @@ -5051,4 +5053,5 @@ const struct pm8001_dispatch
> pm8001_80xx_dispatch = {
> >         .fw_flash_update_req    = pm8001_chip_fw_flash_update_req,
> >         .set_dev_state_req      = pm8001_chip_set_dev_state_req,
> >         .fatal_errors           = pm80xx_fatal_errors,
> > +       .hw_event_ack_req       = pm80xx_hw_event_ack_req,
> >  };
> > --
> > 2.27.0
> >

Thanks,
Ajish

  reply	other threads:[~2022-01-06 13:12 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-28 11:17 [PATCH] scsi: pm80xx: port reset timeout error handling correction Ajish Koshy
2022-01-05  5:53 ` Martin K. Petersen
2022-01-05  6:19 ` Jinpu Wang
2022-01-06 13:12   ` Ajish.Koshy [this message]
2022-01-06 14:11     ` Jinpu Wang
2022-01-10 22:04 ` Martin K. Petersen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=PH0PR11MB511212DDDA9FE8F980888AFBEC4C9@PH0PR11MB5112.namprd11.prod.outlook.com \
    --to=ajish.koshy@microchip.com \
    --cc=Vasanthalakshmi.Tharmarajan@microchip.com \
    --cc=Viswas.G@microchip.com \
    --cc=jinpu.wang@ionos.com \
    --cc=linux-scsi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.