Date: Fri, 10 Mar 1995 11:35:56 -0600 (CST) From: pritc003@maroon.tc.umn.edu To: bugs@FreeBSD.org Subject: Parity error on SCSI tape causes panic w/Adaptec 2842 controller Message-ID: <2f608dfe74be002@maroon.tc.umn.edu>
index | next in thread | raw e-mail
To: FreeBSD-gnats-submit@freebsd.org
Subject:
From: pritc003@maroon.tc.umn.edu
Reply-To: pritc003@maroon.tc.umn.edu
>Submitter-Id: current-users
>Originator: Mike Pritchard
>Organization: None
>Confidential: no
>Synopsis: Parity error from SCSI tape cause panic w/Adaptec 2842
>Severity: serious
>Priority: medium
>Category: kern
>Release: FreeBSD 2.0-950210-SNAP i386
>Class: sw-bug
>Environment:
Adaptec 2842VL SCSI controller
Archive 2150S tape drive
>Description:
If a tape parity error is detected by the Adaptec 2842 driver
software (sys/i386/scsi/aic7xxxx.c), the system will panic
with the following messages:
ahc1: parity error on channel A target 0, lun 0
ahc1: Unknown SCSIINT. Status = 0x17
panic: ahc1: brkaddrint, Illegal Host Access at seqaddr = 0x0
Examing the code shows that the parity error detection code
incorrectly falls into the unknown scsiinit code, which
eventually leads to the panic. A fix for this is attached, but
that fix uncovers another problem that causes repeated
scsi device timeouts on sd0.
>How-To-Repeat:
Find a QIC-150 tape with a parity error, and try reading the
tape. The system will panic when the parity error is detected.
>Fix:
Here is a partial fix to the problem to help someone get
started, but there is still some other underlying problem
that shows up with this fix installed. With this fix installed,
the parity error is detected, and the machine will not panic,
but then it starts complaining about scsi device timeouts on
sd0 and keeps doing that forever, so the machine hangs up
anyways. I've seen the scsi device timeout problem a few
other times before, so it probably does need to be addressed,
although in this case it may just be happening because the
parity error code is just plain broken in some fasion.
I'm also willing to help test out any fixes.
*** old/aic7xxx.c Fri Mar 10 10:53:44 1995
--- ./aic7xxx.c Fri Mar 10 10:56:42 1995
***************
*** 1141,1146 ****
--- 1141,1155 ----
}
xs = scb->xs;
+ if ((status & (SELTO | SCSIPERR | BUSFREE)) == 0) {
+ printf("ahc%d: Unknown SCSIINT. Status = 0x%x\n",
+ unit, status);
+ outb(CLRSINT1 + iobase, status);
+ UNPAUSE_SEQUENCER(ahc);
+ outb(CLRINT + iobase, CLRINTSTAT);
+ scb = NULL;
+ goto cmdcomplete;
+ }
if (status & SELTO) {
u_char active;
u_char flags;
***************
*** 1196,1209 ****
#endif
}
- else {
- printf("ahc%d: Unknown SCSIINT. Status = 0x%x\n",
- unit, status);
- outb(CLRSINT1 + iobase, status);
- UNPAUSE_SEQUENCER(ahc);
- outb(CLRINT + iobase, CLRINTSTAT);
- scb = NULL;
- }
if(scb != NULL) {
/* We want to process the command */
untimeout(ahc_timeout, (caddr_t)scb);
--- 1205,1210 ----
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2f608dfe74be002>
