Date: Wed, 28 May 1997 00:29:03 +0200 (MET DST) From: Wolfgang Helbig <helbig@MX.BA-Stuttgart.De> To: freebsd-bugs@hub.freebsd.org Subject: Re: kern/3696: kernel panic during wd hard disk probe if CMD640 is enabled Message-ID: <199705272229.AAA20430@helbig.informatik.ba-stuttgart.de> In-Reply-To: <199705271210.FAA10522@hub.freebsd.org> from Stefan Esser at "May 27, 97 05:10:01 am"
index | next in thread | previous in thread | raw e-mail
> The following reply was made to PR kern/3696; it has been noted by GNATS.
>
> From: Stefan Esser <se@FreeBSD.ORG>
> To: Joel.Faedi@esial.u-nancy.fr
> Cc: freebsd-gnats-submit@freebsd.org
> Subject: Re: kern/3696: kernel panic during wd hard disk probe if CMD640 is enabled
> Date: Tue, 27 May 1997 14:05:46 +0200
>
> On May 27, Joel.Faedi@esial.u-nancy.fr wrote:
> > >Description:
> > kernel panics while testing wd hard drive if "options CMD640" is activated and if you don't have wd1 connected (even if the controleris a CMD640 or not).
> > >How-To-Repeat:
> > compile a kernel with "options CMD640", put a single hard disk onyour first IDE controler, system panic while testing hard disks.
>
> > >Fix:
> > in file /usr/src/sys/i386/isa/wd.c, in function "wdattach", change the lines:-------------------------------------------------
> > #ifdef CMD640
> > wdtab[du->dk_ctrlr_cmd640].b_active = 2;
> > #else
> > wdtab[dvp->id_unit].b_active = 2;
> > #endif-------------------------------------------------
>
> > by the lines:-------------------------------------------------
> > #ifdef CMD640
> > if (eide_quirks & Q_CMD640B) {
> > wdtab[PRIMARY].b_active = 2;
> > } else {
> > wdtab[dvp->id_unit].b_active = 2;
> > }
> > #else
> > wdtab[dvp->id_unit].b_active = 2;
> > #endif
>
> Sorry, but I don't see what this patch changes.
>
> du->dk_ctrlr_cmd640 is set to either PRIMARY or du->dk_ctrlr
> (which is identical to dvp->id_unit) early in wdattach, and
> the value choosen is made dependent on the same condition as
> you suggest above.
>
> Are you sure the patch makes a difference ?
> I can't see how it could ...
>
> Regards, STefan
The patch does make a difference if du == NULL. This might happen
if a nonexisting drive is configured, e. g. in the GENERIC
configuration file. Then the loop iterating all configured wd-drives
in isa_biotab_wdc might be left with a freed du. This did not occur
on my system with a GENERIC kernel, options "CMD640" enabled and
one drive attached to the second channel -- and this is what I do
not understand!
Anyway, depending on du pointing to a valid disk structure outside
the loop is *very* bad style and I apologize for this oversight.
I am very glad, the options "CMD640" were not enabled by default
though.
Thanks to Joel for the patch and to Stefan for committing it!
Wolfgang
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199705272229.AAA20430>
