kernel stacks [eas: Re: G5 Bridge-mode MMU]

Marcel Moolenaar xcllnt at mac.com
Wed Apr 16 21:27:41 UTC 2008


Follow-up...

On Apr 15, 2008, at 10:54 PM, Marcel Moolenaar wrote:
>
> On Apr 15, 2008, at 5:52 PM, Peter Grehan wrote:
>> Hi Marcel,
>>
>>>> Are you sure it isn't a genuine stack overflow ?
>>> Positive. The panic happens after 4KB of stack has been used.
>>>> You may be able to tell by bumping the size of tmpstk on a non- 
>>>> kstack0 boot and see how far up it's been used.
>>> The backtrace also shows that. From inner-most to out-most  
>>> function in
>>> the backtrace the stack pointers are roughly 4KB apart.
>>
>> Can you send the code snippet that you're using to set up the  
>> stack ? I can desk-check that, and then use it for my testing so we  
>> have the exact same setup.

*snip*

>> usb0: USB revision 1.0
> [thread pid 0 tid 100000 ]
> Stopped at      0x3e9cc0:       stwux   r0, r1, r9,
> db> bt
> Tracing pid 0 tid 100000 td 0x4cb340
> 0xd00040f0: at usbd_transfer+0xb0

*snip*

Found the problem: moea_rkva_alloc().

The first 4 pages of KVA are reserved for page zeroing and other
special purpose uses. This was not accounted for in the original
moea_bootstrap() code when the kernel stack was allocated, so the
kernel stack overlapped with the pages returned by moea_rkva_alloc().

This is easily fixed...

-- 
Marcel Moolenaar
xcllnt at mac.com




More information about the freebsd-ppc mailing list