mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 00:04:15 +08:00
SCSI fixes on 20240209
4 small fixes, 3 in drivers with the remaining core fix being a fixup to the one in the last pull request which didn't entirely move checking of scsi_host_busy() out from under the host lock. Signed-off-by: James E.J. Bottomley <jejb@linux.ibm.com> -----BEGIN PGP SIGNATURE----- iJwEABMIAEQWIQTnYEDbdso9F2cI+arnQslM7pishQUCZcakBiYcamFtZXMuYm90 dG9tbGV5QGhhbnNlbnBhcnRuZXJzaGlwLmNvbQAKCRDnQslM7pishU5GAP9J3BgQ evE/NZl5bOFobFRUWOaUwPCU+KzLR8odFBleHAD/SlAapQGDHLm7smUECbiHDVI+ j5T4CLY57a+UQzC8lUc= =poH3 -----END PGP SIGNATURE----- Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi Pull SCSI fixes from James Bottomley: "Three small driver fixes and one core fix. The core fix being a fixup to the one in the last pull request which didn't entirely move checking of scsi_host_busy() out from under the host lock" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: scsi: ufs: core: Remove the ufshcd_release() in ufshcd_err_handling_prepare() scsi: ufs: core: Fix shift issue in ufshcd_clear_cmd() scsi: lpfc: Use unsigned type for num_sge scsi: core: Move scsi_host_busy() out of host lock if it is for per-command
This commit is contained in:
commit
4a7bbe7519
@ -1918,7 +1918,7 @@ out:
|
||||
*
|
||||
* Returns the number of SGEs added to the SGL.
|
||||
**/
|
||||
static int
|
||||
static uint32_t
|
||||
lpfc_bg_setup_sgl(struct lpfc_hba *phba, struct scsi_cmnd *sc,
|
||||
struct sli4_sge *sgl, int datasegcnt,
|
||||
struct lpfc_io_buf *lpfc_cmd)
|
||||
@ -1926,8 +1926,8 @@ lpfc_bg_setup_sgl(struct lpfc_hba *phba, struct scsi_cmnd *sc,
|
||||
struct scatterlist *sgde = NULL; /* s/g data entry */
|
||||
struct sli4_sge_diseed *diseed = NULL;
|
||||
dma_addr_t physaddr;
|
||||
int i = 0, num_sge = 0, status;
|
||||
uint32_t reftag;
|
||||
int i = 0, status;
|
||||
uint32_t reftag, num_sge = 0;
|
||||
uint8_t txop, rxop;
|
||||
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
|
||||
uint32_t rc;
|
||||
@ -2099,7 +2099,7 @@ out:
|
||||
*
|
||||
* Returns the number of SGEs added to the SGL.
|
||||
**/
|
||||
static int
|
||||
static uint32_t
|
||||
lpfc_bg_setup_sgl_prot(struct lpfc_hba *phba, struct scsi_cmnd *sc,
|
||||
struct sli4_sge *sgl, int datacnt, int protcnt,
|
||||
struct lpfc_io_buf *lpfc_cmd)
|
||||
@ -2123,8 +2123,8 @@ lpfc_bg_setup_sgl_prot(struct lpfc_hba *phba, struct scsi_cmnd *sc,
|
||||
uint32_t rc;
|
||||
#endif
|
||||
uint32_t checking = 1;
|
||||
uint32_t dma_offset = 0;
|
||||
int num_sge = 0, j = 2;
|
||||
uint32_t dma_offset = 0, num_sge = 0;
|
||||
int j = 2;
|
||||
struct sli4_hybrid_sgl *sgl_xtra = NULL;
|
||||
|
||||
sgpe = scsi_prot_sglist(sc);
|
||||
|
@ -282,11 +282,12 @@ static void scsi_eh_inc_host_failed(struct rcu_head *head)
|
||||
{
|
||||
struct scsi_cmnd *scmd = container_of(head, typeof(*scmd), rcu);
|
||||
struct Scsi_Host *shost = scmd->device->host;
|
||||
unsigned int busy = scsi_host_busy(shost);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(shost->host_lock, flags);
|
||||
shost->host_failed++;
|
||||
scsi_eh_wakeup(shost, scsi_host_busy(shost));
|
||||
scsi_eh_wakeup(shost, busy);
|
||||
spin_unlock_irqrestore(shost->host_lock, flags);
|
||||
}
|
||||
|
||||
|
@ -278,9 +278,11 @@ static void scsi_dec_host_busy(struct Scsi_Host *shost, struct scsi_cmnd *cmd)
|
||||
rcu_read_lock();
|
||||
__clear_bit(SCMD_STATE_INFLIGHT, &cmd->state);
|
||||
if (unlikely(scsi_host_in_recovery(shost))) {
|
||||
unsigned int busy = scsi_host_busy(shost);
|
||||
|
||||
spin_lock_irqsave(shost->host_lock, flags);
|
||||
if (shost->host_failed || shost->host_eh_scheduled)
|
||||
scsi_eh_wakeup(shost, scsi_host_busy(shost));
|
||||
scsi_eh_wakeup(shost, busy);
|
||||
spin_unlock_irqrestore(shost->host_lock, flags);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
@ -3057,7 +3057,7 @@ bool ufshcd_cmd_inflight(struct scsi_cmnd *cmd)
|
||||
*/
|
||||
static int ufshcd_clear_cmd(struct ufs_hba *hba, u32 task_tag)
|
||||
{
|
||||
u32 mask = 1U << task_tag;
|
||||
u32 mask;
|
||||
unsigned long flags;
|
||||
int err;
|
||||
|
||||
@ -3075,6 +3075,8 @@ static int ufshcd_clear_cmd(struct ufs_hba *hba, u32 task_tag)
|
||||
return 0;
|
||||
}
|
||||
|
||||
mask = 1U << task_tag;
|
||||
|
||||
/* clear outstanding transaction before retry */
|
||||
spin_lock_irqsave(hba->host->host_lock, flags);
|
||||
ufshcd_utrl_clear(hba, mask);
|
||||
@ -6352,7 +6354,6 @@ static void ufshcd_err_handling_prepare(struct ufs_hba *hba)
|
||||
ufshcd_hold(hba);
|
||||
if (!ufshcd_is_clkgating_allowed(hba))
|
||||
ufshcd_setup_clocks(hba, true);
|
||||
ufshcd_release(hba);
|
||||
pm_op = hba->is_sys_suspended ? UFS_SYSTEM_PM : UFS_RUNTIME_PM;
|
||||
ufshcd_vops_resume(hba, pm_op);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user