mirror of
https://github.com/torvalds/linux.git
synced 2026-09-25 12:54:50 -04:00
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:
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user