Message ID | 1357440509-28108-10-git-send-email-aaron.lu@intel.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Hello. On 06-01-2013 6:48, Aaron Lu wrote: > For ODDs, the upper layer will poll for media change every a few > seconds, which will make it enter and leave suspend state very > oftern. And as each suspend will also cause a hard/soft reset, s/oftern/often/ > the gain of runtime suspend is very little while the ODD may > mis-function after constantly being reset. So the idle callback > here will not proceed to suspend if a non-ZPODD capable ODD is > attached to the port. > Signed-off-by: Aaron Lu <aaron.lu@intel.com> > --- > drivers/ata/libata-core.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c > index 65a362e..f664a90 100644 > --- a/drivers/ata/libata-core.c > +++ b/drivers/ata/libata-core.c > @@ -5408,8 +5408,27 @@ static int ata_port_resume(struct device *dev) > return rc; > } > > +/* > + * For ODDs, the upper layer will poll for media change every a few seconds, > + * which will make it enter and leave suspend state every a few seconds. And Article is not needed before "few". (Same comment to the changelog.) > + * as each suspend will cause a hard/soft reset, the gain of runtime suspend > + * is very little and the ODD may mis-function after constantly being reset. s/mis-function/malfunction/ perhaps? (Same in the changelog.) MBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-pm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Sergei, Thanks for reviewing, will update in next revision. -Aaron On 01/06/2013 10:34 PM, Sergei Shtylyov wrote: > Hello. > > On 06-01-2013 6:48, Aaron Lu wrote: > >> For ODDs, the upper layer will poll for media change every a few >> seconds, which will make it enter and leave suspend state very >> oftern. And as each suspend will also cause a hard/soft reset, > > s/oftern/often/ > >> the gain of runtime suspend is very little while the ODD may >> mis-function after constantly being reset. So the idle callback >> here will not proceed to suspend if a non-ZPODD capable ODD is >> attached to the port. > >> Signed-off-by: Aaron Lu <aaron.lu@intel.com> >> --- >> drivers/ata/libata-core.c | 19 +++++++++++++++++++ >> 1 file changed, 19 insertions(+) > >> diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c >> index 65a362e..f664a90 100644 >> --- a/drivers/ata/libata-core.c >> +++ b/drivers/ata/libata-core.c >> @@ -5408,8 +5408,27 @@ static int ata_port_resume(struct device *dev) >> return rc; >> } >> >> +/* >> + * For ODDs, the upper layer will poll for media change every a few seconds, >> + * which will make it enter and leave suspend state every a few seconds. And > > Article is not needed before "few". (Same comment to the changelog.) > >> + * as each suspend will cause a hard/soft reset, the gain of runtime suspend >> + * is very little and the ODD may mis-function after constantly being reset. > > s/mis-function/malfunction/ perhaps? (Same in the changelog.) > > MBR, Sergei > -- To unsubscribe from this list: send the line "unsubscribe linux-pm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 65a362e..f664a90 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -5408,8 +5408,27 @@ static int ata_port_resume(struct device *dev) return rc; } +/* + * For ODDs, the upper layer will poll for media change every a few seconds, + * which will make it enter and leave suspend state every a few seconds. And + * as each suspend will cause a hard/soft reset, the gain of runtime suspend + * is very little and the ODD may mis-function after constantly being reset. + * So the idle callback here will not proceed to suspend if a non-ZPODD capable + * ODD is attached to the port. + */ static int ata_port_runtime_idle(struct device *dev) { + struct ata_port *ap = to_ata_port(dev); + struct ata_link *link; + struct ata_device *adev; + + ata_for_each_link(link, ap, HOST_FIRST) { + ata_for_each_dev(adev, link, ENABLED) + if (adev->class == ATA_DEV_ATAPI && + !zpodd_dev_enabled(adev)) + return -EBUSY; + } + return pm_runtime_suspend(dev); }
For ODDs, the upper layer will poll for media change every a few seconds, which will make it enter and leave suspend state very oftern. And as each suspend will also cause a hard/soft reset, the gain of runtime suspend is very little while the ODD may mis-function after constantly being reset. So the idle callback here will not proceed to suspend if a non-ZPODD capable ODD is attached to the port. Signed-off-by: Aaron Lu <aaron.lu@intel.com> --- drivers/ata/libata-core.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)