Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 May 2002 00:04:45 -0400 (EDT)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Kris Kennaway <kris@obsecurity.org>
Cc:        alpha@FreeBSD.org, Andrew Gallatin <gallatin@cs.duke.edu>
Subject:   Re: memory management fault during netbooting on 4.6-PRERELEASE
Message-ID:  <XFMail.20020516000445.jhb@FreeBSD.org>
In-Reply-To: <20020515210001.A742@xor.obsecurity.org>

next in thread | previous in thread | raw e-mail | index | archive | help

On 16-May-2002 Kris Kennaway wrote:
> On Wed, May 15, 2002 at 11:55:35PM -0400, John Baldwin wrote:
>> 
>> On 16-May-2002 Kris Kennaway wrote:
>> > On Wed, May 15, 2002 at 11:40:48PM -0400, John Baldwin wrote:
>> > 
>> >> > (gdb) l *0xfffffc000056bcc0
>> >> > No source file for address 0xfffffc000056bcc0.
>> >> 
>> >> Ok, can you do a nm kernel.debug | sort | less and find the two
>> >> symbols that that address falls between?
>> > 
>> > fffffc000056bca0 t swi_net
>> > fffffc000056bd20 T do_sir
>> 
>> Ok, swi_net() looks like so (alpha/alpha/iplfuncs.c)
>> 
>> static void
>> swi_net()
>> {
>>     u_int32_t bits = atomic_readandclear(&netisr);
>>     int i;
>> 
>>     for (i = 0; i < 32; i++) {
>>         if (bits & 1)
>>             netisrs[i]();
>>         bits >>= 1;
>>     }
>> }
>> 
>> My guess then is that we tried to execute a netisr() that was
>> NULL.  Is this reproducible?
> 
> Yes, it seems to be.
> 
>> If so, you could try adding a
>> a hack to not execute the isr if it's null, i.e.:
>> 
>>         if ((bits & 1) != 0 && netisrs[i] != NULL)
>>             netisrs[i]();
> 
> Will try once the current alpha package build is finished.  Are there
> any other diagnostics I can add while I'm in there?

Well, ideally we would like to know which ISR is (mis)firing.  Maybe a printf
that squawks when this happens.  I think we already do this for current
and get the swi_net: 18 unregistered isr stuff as a result (relating to ARP
requests when you dhcp).  Also, it might be nice to somehow track when ISR
handlers are registered and deregistered using a backport of KTR or something
similar so you can try to figure out what that ISR is supposed to be and see
if that helps figure out the bug.  However, that is a pretty good chunk of work,
and just printing out the ISR if it's NULL might be a simpler first step.

> Kris

-- 

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-alpha" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.20020516000445.jhb>