mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-24 09:13:20 -05:00
SCSI fixes on 20231130
3 small fixes, one in drivers. The core changes are to the internal representation of flags in scsi_devices which removes space wasting bools in favour of single bit flags and to add a flag to force a runtime resume which is used by ATA devices. Signed-off-by: James E.J. Bottomley <jejb@linux.ibm.com> -----BEGIN PGP SIGNATURE----- iJwEABMIAEQWIQTnYEDbdso9F2cI+arnQslM7pishQUCZWjFkSYcamFtZXMuYm90 dG9tbGV5QGhhbnNlbnBhcnRuZXJzaGlwLmNvbQAKCRDnQslM7pisheG9AP9CIjOP 8g3+RCnysbYlctJBsacaLyq9kROyaOY7dnKudQEArMGZ609afSXYrHGzBCtQ8F6T Cvge1QVk00Bu4tKvA6Y= =2Q9R -----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 fixes, one in drivers. The core changes are to the internal representation of flags in scsi_devices which removes space wasting bools in favour of single bit flags and to add a flag to force a runtime resume which is used by ATA devices" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: scsi: sd: Fix system start for ATA devices scsi: Change SCSI device boolean fields to single bit flags scsi: ufs: core: Clear cmd if abort succeeds in MCQ mode
This commit is contained in:
commit
ff4a9f4905
5 changed files with 40 additions and 9 deletions
|
@ -1055,9 +1055,14 @@ int ata_scsi_dev_config(struct scsi_device *sdev, struct ata_device *dev)
|
|||
* Ask the sd driver to issue START STOP UNIT on runtime suspend
|
||||
* and resume and shutdown only. For system level suspend/resume,
|
||||
* devices power state is handled directly by libata EH.
|
||||
* Given that disks are always spun up on system resume, also
|
||||
* make sure that the sd driver forces runtime suspended disks
|
||||
* to be resumed to correctly reflect the power state of the
|
||||
* device.
|
||||
*/
|
||||
sdev->manage_runtime_start_stop = true;
|
||||
sdev->manage_shutdown = true;
|
||||
sdev->manage_runtime_start_stop = 1;
|
||||
sdev->manage_shutdown = 1;
|
||||
sdev->force_runtime_start_on_system_start = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -1519,9 +1519,9 @@ static int sbp2_scsi_slave_configure(struct scsi_device *sdev)
|
|||
sdev->use_10_for_rw = 1;
|
||||
|
||||
if (sbp2_param_exclusive_login) {
|
||||
sdev->manage_system_start_stop = true;
|
||||
sdev->manage_runtime_start_stop = true;
|
||||
sdev->manage_shutdown = true;
|
||||
sdev->manage_system_start_stop = 1;
|
||||
sdev->manage_runtime_start_stop = 1;
|
||||
sdev->manage_shutdown = 1;
|
||||
}
|
||||
|
||||
if (sdev->type == TYPE_ROM)
|
||||
|
|
|
@ -3949,8 +3949,15 @@ static int sd_resume(struct device *dev, bool runtime)
|
|||
|
||||
static int sd_resume_system(struct device *dev)
|
||||
{
|
||||
if (pm_runtime_suspended(dev))
|
||||
if (pm_runtime_suspended(dev)) {
|
||||
struct scsi_disk *sdkp = dev_get_drvdata(dev);
|
||||
struct scsi_device *sdp = sdkp ? sdkp->device : NULL;
|
||||
|
||||
if (sdp && sdp->force_runtime_start_on_system_start)
|
||||
pm_request_resume(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return sd_resume(dev, false);
|
||||
}
|
||||
|
|
|
@ -6444,11 +6444,24 @@ static bool ufshcd_abort_one(struct request *rq, void *priv)
|
|||
struct scsi_device *sdev = cmd->device;
|
||||
struct Scsi_Host *shost = sdev->host;
|
||||
struct ufs_hba *hba = shost_priv(shost);
|
||||
struct ufshcd_lrb *lrbp = &hba->lrb[tag];
|
||||
struct ufs_hw_queue *hwq;
|
||||
unsigned long flags;
|
||||
|
||||
*ret = ufshcd_try_to_abort_task(hba, tag);
|
||||
dev_err(hba->dev, "Aborting tag %d / CDB %#02x %s\n", tag,
|
||||
hba->lrb[tag].cmd ? hba->lrb[tag].cmd->cmnd[0] : -1,
|
||||
*ret ? "failed" : "succeeded");
|
||||
|
||||
/* Release cmd in MCQ mode if abort succeeds */
|
||||
if (is_mcq_enabled(hba) && (*ret == 0)) {
|
||||
hwq = ufshcd_mcq_req_to_hwq(hba, scsi_cmd_to_rq(lrbp->cmd));
|
||||
spin_lock_irqsave(&hwq->cq_lock, flags);
|
||||
if (ufshcd_cmd_inflight(lrbp->cmd))
|
||||
ufshcd_release_scsi_cmd(hba, lrbp);
|
||||
spin_unlock_irqrestore(&hwq->cq_lock, flags);
|
||||
}
|
||||
|
||||
return *ret == 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -167,19 +167,25 @@ struct scsi_device {
|
|||
* power state for system suspend/resume (suspend to RAM and
|
||||
* hibernation) operations.
|
||||
*/
|
||||
bool manage_system_start_stop;
|
||||
unsigned manage_system_start_stop:1;
|
||||
|
||||
/*
|
||||
* If true, let the high-level device driver (sd) manage the device
|
||||
* power state for runtime device suspand and resume operations.
|
||||
*/
|
||||
bool manage_runtime_start_stop;
|
||||
unsigned manage_runtime_start_stop:1;
|
||||
|
||||
/*
|
||||
* If true, let the high-level device driver (sd) manage the device
|
||||
* power state for system shutdown (power off) operations.
|
||||
*/
|
||||
bool manage_shutdown;
|
||||
unsigned manage_shutdown:1;
|
||||
|
||||
/*
|
||||
* If set and if the device is runtime suspended, ask the high-level
|
||||
* device driver (sd) to force a runtime resume of the device.
|
||||
*/
|
||||
unsigned force_runtime_start_on_system_start:1;
|
||||
|
||||
unsigned removable:1;
|
||||
unsigned changed:1; /* Data invalid due to media change */
|
||||
|
|
Loading…
Add table
Reference in a new issue