All of lore.kernel.org
 help / color / mirror / Atom feed
From: Levente Kurusa <levex@linux.com>
To: jgarzik@pobox.com
Cc: linux-ide@vger.kernel.org, levex@linux.com
Subject: [PATCH] BIOS SATA legacy mode failure
Date: Sun, 08 Sep 2013 08:35:49 +0200	[thread overview]
Message-ID: <522C1AC5.4080105@linux.com> (raw)

Hi,

I have been testing the Linux Kernel on a two year Toshiba NB100
netbook of mine, however when I enabled SATA compatibility/legacy mode
instead of AHCI mode in the BIOS, the kernel got stuck. I have pasted
the relevant dmesg piece along with a patch that fixes it temporarily.
What I suspect to be the cause is that the BIOS sets the device into
IDE mode, but it will report it as a SATA device and hence libata tries
to send ATA commands to it, which obviously makes it go bad. The patch
fixes it, by adding a new field to ata_device called exce_cnt, which
counts how many exceptions have occured. After three exceptions, it
automatically disables the device. Also, please note this is my first
ever patch for the kernel :-)

The following dmesg is stuck in an infinite loop.
dmesg:
ata3: lost interrupt (Status 0x50)
ata3.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
ata3.00: failed command: READ DMA
ata3.00: cmd c8/00:08:00:00:00/00:00:00:00:00/e0 tag 0 dma 4096 in
               res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
ata3.00: status: { DRDY }
ata3: soft resetting link
ata3.00: configured for UDMA/33 (no error)
ata3.00: device reported invalid CHS sector 0
ata3: EH complete

Patch that fixes the infinite loop:
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index f9476fb..eeedf80 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -2437,6 +2437,14 @@ static void ata_eh_link_report(struct ata_link *link)
                             ehc->i.action, frozen, tries_buf);
                 if (desc)
                         ata_dev_err(ehc->i.dev, "%s\n", desc);
+               ehc->i.dev->exce_cnt ++;
+               ata_dev_warn(ehc->i.dev, "Number of exceptions: %d\n", 
ehc->i.dev->exce_cnt);
+               /**
+                  * The device is failing terribly,
+                 * disable it to prevent damage.
+                 */
+               if(ehc->i.dev->exce_cnt > 2)
+                       ata_dev_disable(ehc->i.dev);
         } else {
                 ata_link_err(link, "exception Emask 0x%x "
                              "SAct 0x%x SErr 0x%x action 0x%x%s%s\n",
diff --git a/include/linux/libata.h b/include/linux/libata.h
index eae7a05..fa52ee6 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -660,7 +660,8 @@ struct ata_device {
         u8                      devslp_timing[ATA_LOG_DEVSLP_SIZE];

         /* error history */
-       int                     spdn_cnt;
+       int                     spdn_cnt; /* Number of speed_downs */
+       int                     exce_cnt; /* Number of exceptions that 
happenned */
         /* ering is CLEAR_END, read comment above CLEAR_END */
         struct ata_ering        ering;
  };

Regards,
Levente Kurusa

             reply	other threads:[~2013-09-08  6:35 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-08  6:35 Levente Kurusa [this message]
2013-09-10  4:01 ` [PATCH] BIOS SATA legacy mode failure Robert Hancock
2013-09-14 15:09   ` Levente Kurusa
2013-09-16  4:37     ` Robert Hancock
2013-09-17 16:47       ` Levente Kurusa
2013-09-18  1:35         ` Robert Hancock
2013-09-21  7:35           ` Levente Kurusa
2013-09-21 17:04             ` Robert Hancock
2013-09-22  7:13               ` Levente Kurusa
2013-09-25  6:31                 ` Robert Hancock
2013-09-27 13:24                   ` Levente Kurusa
2013-09-28  4:55                     ` Robert Hancock
2013-09-28 17:46                       ` Levente Kurusa
2013-09-29  1:21                         ` Robert Hancock
2013-10-01  4:25                           ` Robert Hancock
2013-10-11 16:07                             ` Levente Kurusa
2013-10-12  2:06                               ` Robert Hancock
     [not found]                                 ` <52591 681.1020001@linux.com>
2013-10-12  9:29                                 ` Levente Kurusa
2013-10-13  5:57                                   ` Robert Hancock
2013-10-13 12:02                                     ` Levente Kurusa
2013-10-16  0:16                                       ` Robert Hancock
2013-10-16 14:42                                         ` Levente Kurusa
2013-10-22  1:34                                           ` Robert Hancock
2013-10-22  2:12                                             ` Aaron Lu
2013-10-22 14:32                                               ` Levente Kurusa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=522C1AC5.4080105@linux.com \
    --to=levex@linux.com \
    --cc=jgarzik@pobox.com \
    --cc=linux-ide@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.