Re: [PATCH 2/2] scsi: pm80xx: Remove busy wait from mpi_uninit_check()

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

 



On Mon, Mar 29, 2021 at 8:37 PM Igor Pylypiv <ipylypiv@xxxxxxxxxx> wrote:
>
> mpi_uninit_check() is not being called in an ATOMIC context.
> The only caller of mpi_uninit_check() is pm80xx_chip_soft_rst().
>
> Callers of pm80xx_chip_soft_rst():
>  - pm8001_ioctl_soft_reset()
>  - pm8001_pci_probe()
>  - pm8001_pci_remove()
>  - pm8001_pci_suspend()
>  - pm8001_pci_resume()
>
> There was a similar fix for mpi_init_check() in commit d71023af4bec0
> ("scsi: pm80xx: Do not busy wait in MPI init check").
>
> Reviewed-by: Vishakha Channapattan <vishakhavc@xxxxxxxxxx>
> Signed-off-by: Igor Pylypiv <ipylypiv@xxxxxxxxxx>
Acked-by: Jack Wang <jinpu.wang@xxxxxxxxx>
> ---
>  drivers/scsi/pm8001/pm80xx_hwi.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
> index a6f65666c98e..9fade2ed9396 100644
> --- a/drivers/scsi/pm8001/pm80xx_hwi.c
> +++ b/drivers/scsi/pm8001/pm80xx_hwi.c
> @@ -1502,12 +1502,12 @@ static int mpi_uninit_check(struct pm8001_hba_info *pm8001_ha)
>
>         /* wait until Inbound DoorBell Clear Register toggled */
>         if (IS_SPCV_12G(pm8001_ha->pdev)) {
> -               max_wait_count = (30 * 1000 * 1000) /* 30 sec */
> +               max_wait_count = SPCV_DOORBELL_CLEAR_TIMEOUT;
>         } else {
> -               max_wait_count = (15 * 1000 * 1000) /* 15 sec */
> +               max_wait_count = SPC_DOORBELL_CLEAR_TIMEOUT;
>         }
>         do {
> -               udelay(1);
> +               msleep(FW_READY_INTERVAL);
>                 value = pm8001_cr32(pm8001_ha, 0, MSGU_IBDB_SET);
>                 value &= SPCv_MSGU_CFG_TABLE_RESET;
>         } while ((value != 0) && (--max_wait_count));
> @@ -1519,9 +1519,9 @@ static int mpi_uninit_check(struct pm8001_hba_info *pm8001_ha)
>
>         /* check the MPI-State for termination in progress */
>         /* wait until Inbound DoorBell Clear Register toggled */
> -       max_wait_count = 2 * 1000 * 1000;       /* 2 sec for spcv/ve */
> +       max_wait_count = 100; /* 2 sec for spcv/ve */
>         do {
> -               udelay(1);
> +               msleep(FW_READY_INTERVAL);
>                 gst_len_mpistate =
>                         pm8001_mr32(pm8001_ha->general_stat_tbl_addr,
>                         GST_GSTLEN_MPIS_OFFSET);
> --
> 2.31.0.291.g576ba9dcdaf-goog
>



[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