On Fri, 2013-08-09 at 01:09 +0000, Brandt, Todd E wrote:
> static struct ata_force_ent *ata_force_tbl;
> static int ata_force_tbl_size;
> +int ata_resume_status;
A single global variable for multiple ports?
> static char ata_force_param_buf[PAGE_SIZE] __initdata;
> /* param_buf is thrown away after initialization, disallow read */
> @@ -5415,6 +5416,22 @@ static int ata_port_resume(struct device *dev)
> return rc;
> }
>
> +static int ata_port_resume_async(struct device *dev)
> +{
> + struct ata_port *ap = to_ata_port(dev);
> +
> + ata_resume_status = 0;
> + ata_port_request_pm(ap, PMSG_RESUME, ATA_EH_RESET,
> + ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET, &ata_resume_status);
If this ever runs in paralell it is extremely racy.
> + if (!ata_resume_status) {
> + pm_runtime_disable(dev);
> + pm_runtime_set_active(dev);
> + pm_runtime_enable(dev);
> + }
> +
> + return ata_resume_status;
> +}
> +
> + req = blk_get_request(sdkp->device->request_queue, 0, __GFP_WAIT);
What happens if commands go to the device before this has finished?
Especially should it fail.
Regards
Oliver
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html