lkml.org 
[lkml]   [2009]   [Nov]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[05/99] sata_nv: make sure link is brough up online when skipping hardreset
    2.6.31-stable review patch.  If anyone has any objections, please let us know.

    ------------------
    From: Tejun Heo <tj@kernel.org>

    commit 6489e3262e6b188a1a009b65e8a94b7aa17645b7 upstream.

    prereset doesn't bring link online if hardreset is about to happen and
    nv_hardreset() may skip if conditions are not right so softreset may
    be entered with non-working link status if the system firmware didn't
    bring it up before entering OS code which can happen during resume.
    This patch makes nv_hardreset() to bring up the link if it's skipping
    reset.

    This bug was reported by frodone@gmail.com in the following bug entry.

    http://bugzilla.kernel.org/show_bug.cgi?id=14329

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Reported-by: frodone@gmail.com
    Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/ata/sata_nv.c | 18 +++++++++++++++---
    1 file changed, 15 insertions(+), 3 deletions(-)

    --- a/drivers/ata/sata_nv.c
    +++ b/drivers/ata/sata_nv.c
    @@ -1594,9 +1594,21 @@ static int nv_hardreset(struct ata_link
    !ata_dev_enabled(link->device))
    sata_link_hardreset(link, sata_deb_timing_hotplug, deadline,
    NULL, NULL);
    - else if (!(ehc->i.flags & ATA_EHI_QUIET))
    - ata_link_printk(link, KERN_INFO,
    - "nv: skipping hardreset on occupied port\n");
    + else {
    + const unsigned long *timing = sata_ehc_deb_timing(ehc);
    + int rc;
    +
    + if (!(ehc->i.flags & ATA_EHI_QUIET))
    + ata_link_printk(link, KERN_INFO, "nv: skipping "
    + "hardreset on occupied port\n");
    +
    + /* make sure the link is online */
    + rc = sata_link_resume(link, timing, deadline);
    + /* whine about phy resume failure but proceed */
    + if (rc && rc != -EOPNOTSUPP)
    + ata_link_printk(link, KERN_WARNING, "failed to resume "
    + "link (errno=%d)\n", rc);
    + }

    /* device signature acquisition is unreliable */
    return -EAGAIN;



    \
     
     \ /
      Last update: 2009-11-06 23:25    [W:4.622 / U:0.256 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site