lkml.org 
[lkml]   [2011]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v5 6/6] ata: add ata port runtime PM callbacks
    From
    On Mon, Dec 5, 2011 at 9:20 AM, Lin Ming <ming.m.lin@intel.com> wrote:
    > Add ata port runtime suspend/resume/idle callbacks.
    > Set ->eh_noresume to skip the runtime PM calls on scsi host
    > in the error handler to avoid dead lock.

    Hi Tejun & Alan,

    How about this patch?

    Lin Ming

    >
    > Signed-off-by: Lin Ming <ming.m.lin@intel.com>
    > ---
    >  drivers/ata/libata-core.c      |   10 ++++++++++
    >  drivers/ata/libata-scsi.c      |    1 +
    >  drivers/ata/libata-transport.c |    4 ++++
    >  3 files changed, 15 insertions(+), 0 deletions(-)
    >
    > diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
    > index 04c208e..15a3d4d 100644
    > --- a/drivers/ata/libata-core.c
    > +++ b/drivers/ata/libata-core.c
    > @@ -66,6 +66,7 @@
    >  #include <asm/byteorder.h>
    >  #include <linux/cdrom.h>
    >  #include <linux/ratelimit.h>
    > +#include <linux/pm_runtime.h>
    >
    >  #include "libata.h"
    >  #include "libata-transport.h"
    > @@ -5307,9 +5308,18 @@ static int ata_port_resume(struct device *dev)
    >        return rc;
    >  }
    >
    > +static int ata_port_runtime_idle(struct device *dev)
    > +{
    > +       return pm_runtime_suspend(dev);
    > +}
    > +
    >  static const struct dev_pm_ops ata_port_pm_ops = {
    >        .suspend = ata_port_suspend,
    >        .resume = ata_port_resume,
    > +
    > +       .runtime_suspend = ata_port_suspend_common,
    > +       .runtime_resume = ata_port_resume,
    > +       .runtime_idle = ata_port_runtime_idle,
    >  };
    >
    >  /**
    > diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
    > index 7ae1e77..508a60b 100644
    > --- a/drivers/ata/libata-scsi.c
    > +++ b/drivers/ata/libata-scsi.c
    > @@ -3381,6 +3381,7 @@ int ata_scsi_add_hosts(struct ata_host *host, struct scsi_host_template *sht)
    >                if (!shost)
    >                        goto err_alloc;
    >
    > +               shost->eh_noresume = 1;
    >                *(struct ata_port **)&shost->hostdata[0] = ap;
    >                ap->scsi_host = shost;
    >
    > diff --git a/drivers/ata/libata-transport.c b/drivers/ata/libata-transport.c
    > index 3ceb3d9..9a7f0ea 100644
    > --- a/drivers/ata/libata-transport.c
    > +++ b/drivers/ata/libata-transport.c
    > @@ -32,6 +32,7 @@
    >  #include <linux/libata.h>
    >  #include <linux/hdreg.h>
    >  #include <linux/uaccess.h>
    > +#include <linux/pm_runtime.h>
    >
    >  #include "libata.h"
    >  #include "libata-transport.h"
    > @@ -290,6 +291,9 @@ int ata_tport_add(struct device *parent,
    >                goto tport_err;
    >        }
    >
    > +       pm_runtime_set_active(dev);
    > +       pm_runtime_enable(dev);
    > +
    >        transport_add_device(dev);
    >        transport_configure_device(dev);
    >
    > --
    > 1.7.2.5
    >
    > --
    > To unsubscribe from this list: send the line "unsubscribe linux-ide" in
    > the body of a message to majordomo@vger.kernel.org
    > More majordomo info at  http://vger.kernel.org/majordomo-info.html
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2011-12-07 09:45    [W:0.049 / U:1.400 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site