Re: panic with DEBUG_MEMGUARD on PowerPC

From: Justin Hibbits <chmeeedalf_at_gmail.com>
Date: Thu, 12 Jul 2012 21:33:26 -0400
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_at_ 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
Received on Thu Jul 12 2012 - 23:33:30 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:28 UTC