RE: [PATCH 01/47] aacraid: split off functions to generate reset FIB

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: linux-scsi-owner@xxxxxxxxxxxxxxx [mailto:linux-scsi-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Hannes Reinecke
> Sent: Wednesday, June 28, 2017 1:32 AM
> To: Christoph Hellwig <hch@xxxxxx>
> Cc: Martin K. Petersen <martin.petersen@xxxxxxxxxx>; James Bottomley
> <james.bottomley@xxxxxxxxxxxxxxxxxxxxx>; linux-scsi@xxxxxxxxxxxxxxx;
> Hannes Reinecke <hare@xxxxxxx>; Hannes Reinecke <hare@xxxxxxxx>
> Subject: [PATCH 01/47] aacraid: split off functions to generate reset FIB
> 
> EXTERNAL EMAIL
> 
> 
> Split off reset FIB generation into separate functions.
> 
> Signed-off-by: Hannes Reinecke <hare@xxxxxxxx>
> ---
>  drivers/scsi/aacraid/linit.c | 83 ++++++++++++++++++++++++++--------------
> ----
>  1 file changed, 50 insertions(+), 33 deletions(-)
> 
> diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
> index 0f277df..9a8a27f 100644
> --- a/drivers/scsi/aacraid/linit.c
> +++ b/drivers/scsi/aacraid/linit.c
> @@ -814,6 +814,52 @@ static int aac_eh_abort(struct scsi_cmnd* cmd)
>         return ret;
>  }
> 
> +static u8 aac_eh_tmf_lun_reset_fib(struct aac_dev *aac, struct fib *fib,
> +                                  int bus, int cid, u64 tmf_lun)
> +{
> +       struct aac_hba_tm_req *tmf;
> +       u64 address;
> +
> +       /* start a HBA_TMF_LUN_RESET TMF request */
> +       tmf = (struct aac_hba_tm_req *)fib->hw_fib_va;
> +       memset(tmf, 0, sizeof(*tmf));
> +       tmf->tmf = HBA_TMF_LUN_RESET;
> +       tmf->it_nexus = aac->hba_map[bus][cid].rmw_nexus;
> +       int_to_scsilun(tmf_lun, (struct scsi_lun *)tmf->lun);
> +
> +       address = (u64)fib->hw_error_pa;
> +       tmf->error_ptr_hi = cpu_to_le32
> +               ((u32)(address >> 32));
> +       tmf->error_ptr_lo = cpu_to_le32
> +               ((u32)(address & 0xffffffff));
> +       tmf->error_length = cpu_to_le32(FW_ERROR_BUFFER_SIZE);
> +       fib->hbacmd_size = sizeof(*tmf);
> +
> +       return HBA_IU_TYPE_SCSI_TM_REQ;
> +}
> +
> +static u8 aac_eh_tmf_hard_reset_fib(struct aac_dev *aac, struct fib *fib,
> +                                   int bus, int cid)
> +{
> +       struct aac_hba_reset_req *rst;
> +       u64 address;
> +
> +       /* already tried, start a hard reset now */
> +       rst = (struct aac_hba_reset_req *)fib->hw_fib_va;
> +       memset(rst, 0, sizeof(*rst));
> +       /* reset_type is already zero... */
> +       rst->it_nexus = aac->hba_map[bus][cid].rmw_nexus;
> +
> +       address = (u64)fib->hw_error_pa;
> +       rst->error_ptr_hi = cpu_to_le32((u32)(address >> 32));
> +       rst->error_ptr_lo = cpu_to_le32
> +               ((u32)(address & 0xffffffff));
> +       rst->error_length = cpu_to_le32(FW_ERROR_BUFFER_SIZE);
> +       fib->hbacmd_size = sizeof(*rst);
> +
> +       return HBA_IU_TYPE_SATA_REQ;
> +}
> +
>  /*
>   *     aac_eh_reset    - Reset command handling
>   *     @scsi_cmd:      SCSI command block causing the reset
> @@ -840,7 +886,6 @@ static int aac_eh_reset(struct scsi_cmnd* cmd)
>                 aac->hba_map[bus][cid].devtype == AAC_DEVTYPE_NATIVE_RAW) {
>                 struct fib *fib;
>                 int status;
> -               u64 address;
>                 u8 command;
> 
>                 pr_err("%s: Host adapter reset request. SCSI hang ?\n",
> @@ -852,42 +897,14 @@ static int aac_eh_reset(struct scsi_cmnd* cmd)
> 
> 
>                 if (aac->hba_map[bus][cid].reset_state == 0) {
> -                       struct aac_hba_tm_req *tmf;
> -
>                         /* start a HBA_TMF_LUN_RESET TMF request */
> -                       tmf = (struct aac_hba_tm_req *)fib->hw_fib_va;
> -                       memset(tmf, 0, sizeof(*tmf));
> -                       tmf->tmf = HBA_TMF_LUN_RESET;
> -                       tmf->it_nexus = aac->hba_map[bus][cid].rmw_nexus;
> -                       tmf->lun[1] = cmd->device->lun;
> -
> -                       address = (u64)fib->hw_error_pa;
> -                       tmf->error_ptr_hi = cpu_to_le32
> -                                       ((u32)(address >> 32));
> -                       tmf->error_ptr_lo = cpu_to_le32
> -                                       ((u32)(address & 0xffffffff));
> -                       tmf->error_length = cpu_to_le32(FW_ERROR_BUFFER_SIZE);
> -                       fib->hbacmd_size = sizeof(*tmf);
> -
> -                       command = HBA_IU_TYPE_SCSI_TM_REQ;
> +                       command = aac_eh_tmf_lun_reset_fib(aac, fib,
> +                                                          bus, cid,
> +                                                          cmd->device->lun);
>                         aac->hba_map[bus][cid].reset_state++;
>                 } else if (aac->hba_map[bus][cid].reset_state >= 1) {
> -                       struct aac_hba_reset_req *rst;
> -
>                         /* already tried, start a hard reset now */
> -                       rst = (struct aac_hba_reset_req *)fib->hw_fib_va;
> -                       memset(rst, 0, sizeof(*rst));
> -                       /* reset_type is already zero... */
> -                       rst->it_nexus = aac->hba_map[bus][cid].rmw_nexus;
> -
> -                       address = (u64)fib->hw_error_pa;
> -                       rst->error_ptr_hi = cpu_to_le32((u32)(address >> 32));
> -                       rst->error_ptr_lo = cpu_to_le32
> -                               ((u32)(address & 0xffffffff));
> -                       rst->error_length = cpu_to_le32(FW_ERROR_BUFFER_SIZE);
> -                       fib->hbacmd_size = sizeof(*rst);
> -
> -                       command = HBA_IU_TYPE_SATA_REQ;
> +                       command = aac_eh_tmf_hard_reset_fib(aac, fib, bus, cid);
>                         aac->hba_map[bus][cid].reset_state = 0;
>                 }
>                 cmd->SCp.sent_command = 0;

Reviewed-by: Raghava Aditya Renukunta  <RaghavaAditya.Renukunta@xxxxxxxxxxxxx>





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux