Subject: Re: 'wdc0 at isa0...' panics in -current
To: Jared D. McNeill <jmcneill@invisible.yi.org>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: port-i386
Date: 01/14/2002 22:11:53
On Mon, Jan 14, 2002 at 04:58:03PM -0400, Jared D. McNeill wrote:
> Manuel Bouyer wrote:
>
> >Can you try to compile with DDB and see where it fails ?
> >
> The panic is due to chp->wdc being dereferences in a certain place even
> if it is NULL. The appended patch worked for me, but it's not an ideal
> solution.
>
> Jared
>
>
> Index: wdc.c
> ===================================================================
> RCS file: /cvsroot/syssrc/sys/dev/ic/wdc.c,v
> retrieving revision 1.107
> diff -u -r1.107 wdc.c
> --- wdc.c 2002/01/07 22:11:17 1.107
> +++ wdc.c 2002/01/14 20:58:55
> @@ -242,7 +242,8 @@
> bus_space_write_1(chp->ctl_iot, chp->ctl_ioh, wd_aux_ctlr,
> WDCTL_4BIT);
> delay(10);
>
> - ret_value = __wdcwait_reset(chp, ret_value);
> + if (chp->wdc)
> + ret_value = __wdcwait_reset(chp, ret_value);
This is really strange, chp->wdc isn't used at all in __wdcwait_reset()
I'll compile a kernel on my box and see what happens.
> WDCDEBUG_PRINT(("%s:%d: after reset, ret_value=0x%d\n",
> chp->wdc ? chp->wdc->sc_dev.dv_xname : "wdcprobe", chp->channel,
> ret_value), DEBUG_PROBE);
> @@ -276,7 +277,7 @@
> chp->channel, drive), DEBUG_PROBE);
> break;
> }
> - if (chp->wdc->cap & WDC_CAPABILITY_SELECT)
> + if (chp->wdc && chp->wdc->cap & WDC_CAPABILITY_SELECT)
> chp->wdc->select(chp,drive);
This one is rigth.
--
Manuel Bouyer <bouyer@antioche.eu.org>
--