Commit fb0d9199 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull ata fix from Damien Le Moal:

 - Prevent the scsi disk driver from issuing a START STOP UNIT command
   for ATA devices during system resume as this causes various issues
   reported by multiple users.

* tag 'ata-6.5-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/libata:
  ata,scsi: do not issue START STOP UNIT on resume
parents f6a69168 0a858905
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1100,7 +1100,14 @@ int ata_scsi_dev_config(struct scsi_device *sdev, struct ata_device *dev)
		}
	} else {
		sdev->sector_size = ata_id_logical_sector_size(dev->id);
		/*
		 * Stop the drive on suspend but do not issue START STOP UNIT
		 * on resume as this is not necessary and may fail: the device
		 * will be woken up by ata_port_pm_resume() with a port reset
		 * and device revalidation.
		 */
		sdev->manage_start_stop = 1;
		sdev->no_start_on_resume = 1;
	}

	/*
+6 −3
Original line number Diff line number Diff line
@@ -3876,7 +3876,7 @@ static int sd_suspend_runtime(struct device *dev)
static int sd_resume(struct device *dev)
{
	struct scsi_disk *sdkp = dev_get_drvdata(dev);
	int ret;
	int ret = 0;

	if (!sdkp)	/* E.g.: runtime resume at the start of sd_probe() */
		return 0;
@@ -3884,8 +3884,11 @@ static int sd_resume(struct device *dev)
	if (!sdkp->device->manage_start_stop)
		return 0;

	if (!sdkp->device->no_start_on_resume) {
		sd_printk(KERN_NOTICE, sdkp, "Starting disk\n");
		ret = sd_start_stop_device(sdkp, 1);
	}

	if (!ret)
		opal_unlock_from_suspend(sdkp->opal_dev);
	return ret;
+1 −0
Original line number Diff line number Diff line
@@ -194,6 +194,7 @@ struct scsi_device {
	unsigned no_start_on_add:1;	/* do not issue start on add */
	unsigned allow_restart:1; /* issue START_UNIT in error handler */
	unsigned manage_start_stop:1;	/* Let HLD (sd) manage start/stop */
	unsigned no_start_on_resume:1; /* Do not issue START_STOP_UNIT on resume */
	unsigned start_stop_pwr_cond:1;	/* Set power cond. in START_STOP_UNIT */
	unsigned no_uld_attach:1; /* disable connecting to upper level drivers */
	unsigned select_no_atn:1;