Date: Tue, 16 Jul 2002 21:39:51 -0400 (EDT) From: John Baldwin <jhb@FreeBSD.org> To: Bruce Evans <bde@zeta.org.au> Cc: current@FreeBSD.ORG, Andrew Kolchoogin <andrew@snark.rinet.ru>, Andrew Gallatin <gallatin@cs.duke.edu> Subject: Re: VOP_GETATTR panic on Alpha Message-ID: <XFMail.20020716213951.jhb@FreeBSD.org> In-Reply-To: <20020717103919.D3087-100000@gamplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 17-Jul-2002 Bruce Evans wrote:
> This could also be just a driver problem. I know the old wddump routine
> worked right but am not sure about any of the current ones. Maybe dumps
> are broken on the alpha only due to driver problems. Note that the
> splhigh() didn't actually lock out interrupts in RELENG_4 for drivers
> broken enough to call tsleep(). The [un]safepri hack in tsleep() may
> permit broken dump routines that call tsleep() to "work". This hack
> has been lost in -current except for rotted comments which still say that
> it is done.
Agreed, if drivers depend on interrupts to work for dumps that is a Bug (tm).
>> On alpha, a random kernel thread is waking up, and is unable to go
>> back to sleep because of the panicstr hack msleep:
>>
>> mtx_lock_spin(&sched_lock);
>> if (cold || panicstr) {
>> /*
>> * After a panic, or during autoconfiguration,
>> * just give interrupts a chance, then just return;
> ^^^^^^^^^^^^^^^^^^^^^^^^
>
> This is the rotted comment. No chance is given here.
Well, when you unlock sched_lock you give ithreads a chance to run. (This
is only true in a fully preemptive kernel though.)
>> * don't run any other procs or panic below,
>> * in case this is the idle process and already asleep.
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> Looks like more bitrot. We've learned that the idle process can't call here.
Yes.
>> */
>> if (mtx != NULL && priority & PDROP)
>> mtx_unlock(mtx);
>> mtx_unlock_spin(&sched_lock);
>
> The safepri hack (splx(safepri); splx(origpri);) was here instead of these
> mtx operations.
Probably to truly emulate this we should always release the 'mtx' mutex and
then reacquire it if PDROP isn't specified.
>> return (0);
>> }
>>
>> We need to somehow let only interrupt threads and the panic'ed process
>> run after a panic. I have no idea how to do this in a clean,
>> low-impact way.
>
> I don't want to do this since I think there is no clean way to do it.
> But crash dumps must work without using interrupt threads, etc. I
> think the "right" way to do the sync is to always do a crash dump and
> have fsck_*fs recover buffers from it rather than let the panicing
> kernel possibly create further damage. But changing fsck_*fs to do
> this would be a lot of work.
I agree that this would be the best solution for the long term if we can
have it.
--
John Baldwin <jhb@FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!" - http://www.FreeBSD.org/
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.20020716213951.jhb>
