9.0-RELEASE, SPARC64, Ultra10, dummynet hard hang
David Cross
dcrosstech at gmail.com
Sat Mar 31 02:37:53 UTC 2012
Ok.. to follow up on my own question, I have tracked it down!
So, the problem is an unalligned memory access in the "burst" parameter of
dn_link. A printf of it on my system gives:
&(p->burst)=0x0xfffff80002c48f7c
burst is an uint64_t.. that isn't 64bit aligned.
This raises a few questions:
1) Why isn't it being autoaligned, doesn't gcc do this (I am almost
positive it does (or it should) (I have no /etc/make.conf, completely stock
options)
2) Why is this causing a _deadlock_? (note kernel debugger _does_ work..
which was a boon in getting to "close" to where the problem was in the
first place)
3) Since it does cause a deadlock, it means that a bus-fault handler is
being called that _doesn't_ panic.. and doesn't return correctly?
4) since its not tripping a RED error, its not looping the handler.
and
5) given all of the above.. what's the fix? I am modifying dn_link to be
64 bit aligned (manually).. but this feels like the wrong approach (though
it will hopefully get me what I want for 'now'.
--
David E. Cross
On Tue, Mar 20, 2012 at 10:38 AM, David Cross <dcrosstech at gmail.com> wrote:
> I will provide my kernel config in a second updated message, but I don't
> believe it will be needed; I am reasonably sure this affects all builds.
>
> In short I have a SPARC Ultra10 running 9.0-RELEASE (with the
> ofw_printf/ofw_panic patches obviously) running a custom kernel that has
> dummynet, ipfw, and ipsec compiled into it. It has been running month+
> with no issues. Last night I did:
>
> ipfw pipe 1 config bw 200KByte/sec
>
> and then it hard hung, no response to ping, no response to console, didn't
> even get it to bind to a ruleset.
>
> I reset it and did the same command again, same result.
>
> Any ideas on this?
>
> --
> David E. Cross
More information about the freebsd-sparc64
mailing list