panic with DEBUG_MEMGUARD on PowerPC
Justin Hibbits
chmeeedalf at gmail.com
Fri Jul 13 01:33:30 UTC 2012
On Jul 12, 2012, at 9:11 PM, mdf at freebsd.org wrote:
> On Thu, Jul 12, 2012 at 4:43 PM, Justin Hibbits
> <chmeeedalf at gmail.com> wrote:
>> When tracking down a panic exposed by INVARIANTS, I tried setting
>> DEBUG_MEMGUARD, so I could find the culprit that's trashing freed
>> memory.
>> However, this causes a panic at bootup. It shows up right after
>> the first
>> WARNING: WITNESS message, with the following:
>>
>> panic: kmem_suballoc: bad status return of 3
>> cpuid = 0
>> KDB: stack backtrace:
>> 0xd0004ad0: at kdb_backtrace+0x4c
>> 0xd0004b40: at panic+0x224
>> 0xd0004ba0: at kmem_suballoc+0x8c
>> 0xd0004bd0: at kmeminit+0x1ac
>> 0xd0004c20: at mi_startup+0x13c
>> 0xd0004c50: at btext+0xc0
>>
>> Tracing, and printf() debugging, I see arguments to
>> vm_map_findspace():
>> start: 0xD0000000, length: 4246446080, and map->max_offset =
>> 4026531839.
>>
>> Beyond that, I'm lost with tracking this down. Machine is a dual
>> processor
>> PowerPC G4, with 2GB RAM.
>
> The length is 0xFD1BA000 which is almost 4GB. Asking for 4GB of
> virtual space for 2GB of RAM sounds about right (it's been a while
> since I was in this code), unless this is a 32-bit kernel, in which
> case it'd be too much since there isn't that much virtual space
> available.
>
> So, is the kernel 32-bit? What are the values used and returned by
> memguard_fudge()? The intent of that routine is to get kmeminit() to
> allocate a larger map so memguard can use part of it for private
> virtual addresses. But it shouldn't be asking for "too much"; i.e.
> the intent was to check both physical and virtual space available and
> be greedy, but not too greedy.
>
> There were some issues with that code for some platforms that e.g.
> didn't define a VM_KMEM_SIZE_MAX, but alc@ fixed that in r216425.
>
> Thanks,
> matthew
It is a 32-bit kernel, on 32-bit hardware. The values for
memguard_fudge are (defaults):
tmp: 4246446080, vm_kmem_size: 117440512, vm_kmem_size_max: 0
When setting vm.kmem_size/vm.kmem_size_max to 2GB they are:
tmp: 2147483648, vm_kmem_size: 214793648, vm_kmem_sizee_max:
2147483648 (all 2GB).
But the start and map->max_offset remain the same on all runs I make.
- Justin
More information about the freebsd-current
mailing list