linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] 3w-xxxx: additional ata->sense codes, avoid driver lockup
@ 2002-11-13 21:00 Luben Tuikov
  0 siblings, 0 replies; 3+ messages in thread
From: Luben Tuikov @ 2002-11-13 21:00 UTC (permalink / raw)
  To: linux-scsi, linux-kernel

A few of our IDE hds were generating those errors.

The first one locks up the 3w-xxxx driver (into an inf. loop)
when the error register = 0x11; this also resulted sometimes
in kernel lockup, also when doing raidstop...

The second one (0x51 move) is for completely broken
sectors/medium -- this makes SCSI core figure this one out
quickly and do the appropriate action, rather than retry
the command several times + timeout, of course without
success.

For the status byte, we're more generous (actually only interested
in the error bit); if found, good, else the effect is the same.

-- 
Luben

--- linux-2.5.47/drivers/scsi/3w-xxxx.h Sun Nov 10 22:28:06 2002
+++ linux/drivers/scsi/3w-xxxx.h        Wed Nov 13 15:07:28 2002
@@ -108,7 +108,9 @@
   {0x01, 0x03, 0x13, 0x00}, // Address mark not found       Address mark not found for data field
   {0x04, 0x0b, 0x00, 0x00}, // Aborted command              Aborted command
   {0x10, 0x0b, 0x14, 0x00}, // ID not found                 Recorded entity not found
+  {0x11, 0x0b, 0x12, 0x00}, // Address Mark Not Found       Address Mark Not Found For ID Field
   {0x40, 0x03, 0x11, 0x00}, // Uncorrectable ECC error      Unrecovered read error
+  {0x51, 0x03, 0x31, 0x00}, // Uncorrectable Data Error     Medium Format Corrupted  
   {0x61, 0x04, 0x00, 0x00}, // Device fault                 Hardware error
   {0x84, 0x0b, 0x47, 0x00}, // Data CRC error               SCSI parity error
   {0xd0, 0x0b, 0x00, 0x00}, // Device busy                  Aborted command
@@ -118,7 +120,6 @@
                             // 3ware Error                  SCSI Error
   {0x09, 0x0b, 0x00, 0x00}, // Unrecovered disk error       Aborted command
   {0x37, 0x0b, 0x04, 0x00}, // Unit offline                 Logical unit not ready
-  {0x51, 0x0b, 0x00, 0x00}  // Unspecified                  Aborted command
 };
 
 /* Control register bit definitions */
--- linux-2.5.47/drivers/scsi/3w-xxxx.c Sun Nov 10 22:28:30 2002
+++ linux/drivers/scsi/3w-xxxx.c        Wed Nov 13 15:07:28 2002
@@ -716,7 +716,7 @@
 
        /* Attempt to return intelligent sense information */
        if (fill_sense) {
-               if ((command->status == 0xc7) || (command->status == 0xcb)) {
+               if (command->status & 0xC1) {
                        for (i=0;i<(sizeof(tw_sense_table)/sizeof(tw_sense_table[0]));i++) {
                                if (command->flags == tw_sense_table[i][0]) {

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] 3w-xxxx: additional ata->sense codes, avoid driver lockup
  2002-11-13 22:32 [PATCH] 3w-xxxx: additional ata->sense codes, avoid driver lo ckup Adam Radford
@ 2002-11-13 23:53 ` Luben Tuikov
  0 siblings, 0 replies; 3+ messages in thread
From: Luben Tuikov @ 2002-11-13 23:53 UTC (permalink / raw)
  To: Adam Radford; +Cc: linux-scsi, linux-kernel

Adam Radford wrote:
> 
> While there may need to be a fix so you don't loop on status=c1,flags=0x11,
> you should know that:
>
> command_packet->status is not a scsi or ATA register value at all.
> 
> (0xC1 == BSY|DRDY|ERR).
> ^^^^^^^^^^^^^^^^^^^^^^^^ this is not true.

Really? Last time I checked the ATA spec, C1h comes
out to BSY=80h | DRDY=40h | ERR=1h.

I was *merely* trying to fix the loop on status=C1h, flags=11h.

By the use of flags (error register) and status's bits, I concluded
that while status is not *the* ATA status register, it's bits
are pretty close. For this reason I used the C1h *mask* to make
everyone happy.

Yes, I did assume that it is massaged by the controller,
but with a closed hardware spec and a bug, I had to start
somewhere.

-- 
Luben

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] 3w-xxxx: additional ata->sense codes, avoid driver lockup
  2002-11-13 21:57 [PATCH] 3w-xxxx: additional ata->sense codes, avoid driver lo ckup Adam Radford
@ 2002-11-13 22:24 ` Luben Tuikov
  0 siblings, 0 replies; 3+ messages in thread
From: Luben Tuikov @ 2002-11-13 22:24 UTC (permalink / raw)
  To: Adam Radford; +Cc: linux-scsi, linux-kernel

Adam Radford wrote:
> 
> Luben,
> 
> Thanks for submitting the patch, however, it appears part of it is wrong:
> 
> -               if ((command->status == 0xc7) || (command->status == 0xcb))
> {
> +               if (command->status & 0xC1) {
> 
> What makes you think you should not check for c7 or cb, and only check c1?

Hi Adam,

I don't really ``only'' check for 0xc1, it just shows which bits I'm
interested in (0xc1 is a mask anded with the status).

In fact, I'm only interested in the error bit (ERR), but saw what you did
and decided to stay as close to 0xc7 and 0xcb, both of whom are in the 
subset of status & 0xC1, (0xC1 == BSY|DRDY|ERR). So in effect 0xC7 and 0xCB
still match.

Anyway, if you are throwing away

	if (command->status & 0xC1)

then you might as well throw away flags 0x11 from tw_sense_table[]
and then we're back at ``square 1'' -- this is exactly when the
driver gets into an inf. loop and eventually locks up the machine
and the serial console prints ... 
3w-xxxx: scsiX: Command failed:	status = 0xc1, flags = 0x11, unit #Y.
... ad infinitum.

I was just trying to avoid this deadlock.

-- 
Luben

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2002-11-13 23:46 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-11-13 21:00 [PATCH] 3w-xxxx: additional ata->sense codes, avoid driver lockup Luben Tuikov
2002-11-13 21:57 [PATCH] 3w-xxxx: additional ata->sense codes, avoid driver lo ckup Adam Radford
2002-11-13 22:24 ` [PATCH] 3w-xxxx: additional ata->sense codes, avoid driver lockup Luben Tuikov
2002-11-13 22:32 [PATCH] 3w-xxxx: additional ata->sense codes, avoid driver lo ckup Adam Radford
2002-11-13 23:53 ` [PATCH] 3w-xxxx: additional ata->sense codes, avoid driver lockup Luben Tuikov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).