Hi!
I am trying to run 'testman' to get SawMan up and running but I get a segfault
from testman. Using GDB I found out that a SIGBUS error is generated in the mm
parts of the kernel. Enabling all debug flags, I get this for the mmap parts (I
have added trace for the call to mmap):
(-) [Main Thread 0.011] ( 1382) Fusion/SHMPool: init_pool(
0x41410c, 0x414118, 0x2000006c, 'Fusion Main Pool', 1048576, non-debug )
(-) [Main Thread 0.023] ( 1382) Fusion/SHMHeap:
__shmalloc_init_heap( 0x41410c, '/dev/shm/fusion.0.0', 0x20010000, 0x7bd5abd0 )
(-) [Main Thread 0.023] ( 1382) Fusion/SHMHeap: ->
opening shared memory file '/dev/shm/fusion.0.0'...
(-) [Main Thread 0.025] ( 1382) Fusion/SHMHeap: ->
mmaping shared memory file... (8192 bytes)
-> about to mmap: addr_base=0x20010000, size=8192, space=1048576, fd=4
-> mmap done!
.
.
.
(-) [Main Thread 0.073] ( 1382) Fusion/SHMPool: init_pool(
0x41410c, 0x414134, 0x200000b0, 'DirectFB Main Pool', 4194304, non-debug )
(-) [Main Thread 0.085] ( 1382) Fusion/SHMHeap:
__shmalloc_init_heap( 0x41410c, '/dev/shm/fusion.0.1', 0x20113000, 0x7bd5abe0 )
(-) [Main Thread 0.085] ( 1382) Fusion/SHMHeap: ->
opening shared memory file '/dev/shm/fusion.0.1'...
(-) [Main Thread 0.087] ( 1382) Fusion/SHMHeap: ->
mmaping shared memory file... (16384 bytes)
-> about to mmap: addr_base=0x20113000, size=16384, space=4194304, fd=5
-> mmap done!
.
.
.
(-) [Main Thread 0.110] ( 1382) Fusion/SHMPool: init_pool(
0x41410c, 0x414150, 0x200000f4, 'DirectFB Surface Pool', 134217728, non-debug )
(-) [Main Thread 0.121] ( 1382) Fusion/SHMHeap:
__shmalloc_init_heap( 0x41410c, '/dev/shm/fusion.0.2', 0x20518000, 0x7bd5abc0 )
(-) [Main Thread 0.122] ( 1382) Fusion/SHMHeap: ->
opening shared memory file '/dev/shm/fusion.0.2'...
(-) [Main Thread 0.123] ( 1382) Fusion/SHMHeap: ->
mmaping shared memory file... (397312 bytes)
-> about to mmap: addr_base=0x20518000, size=397312, space=134217728, fd=6
-> mmap done!
.
.
.
(-) [Main Thread 0.651] ( 1382) Fusion/SHMPool:
init_pool( 0x41410c, 0x41416c, 0x20000138, 'SaWMan Pool', 16777216, debug )
(-) [Main Thread 0.662] ( 1382) Fusion/SHMHeap:
__shmalloc_init_heap( 0x41410c, '/dev/shm/fusion.0.3', 0x2857a000, 0x7bd5aa78 )
(-) [Main Thread 0.663] ( 1382) Fusion/SHMHeap:
-> opening shared memory file '/dev/shm/fusion.0.3'...
(-) [Main Thread 0.664] ( 1382) Fusion/SHMHeap:
-> mmaping shared memory file... (53248 bytes)
-> about to mmap: addr_base=0x2857a000, size=53248, space=16777216, fd=10
Segmentation fault
The mmap call in /directfb/lib/fusion/shm/heap.c looks like this:
heap = mmap( addr_base, size + space, PROT_READ | PROT_WRITE, MAP_SHARED |
MAP_FIXED, fd, 0 );
So these are the memory pools that are mmap'ed:
Fusion Main Pool ~ 1 MB
DirectFB Main Pool ~ 4 MB
DirectFB Surface Pool ~ 132 MB
SaWMan Pool ~ 16 MB
Why is the DirectFB Surface Pool so big?
My target does not have this amount of free memory. I don't really know why it
is crashing, could it be the page tables that overflow or something? Tracing
the mm functions in the kernel can see that shmem_nopage() and do_no_page() are
failing:
NOPAGE_SIGBUS in shmem_nopage!!!
VM_FAULT_SIGBUS in do_no_page!!!
NOPAGE_SIGBUS in shmem_nopage!!!
VM_FAULT_SIGBUS in do_no_page!!!
NOPAGE_SIGBUS in shmem_nopage!!!
VM_FAULT_SIGBUS in do_no_page!!!
NOPAGE_SIGBUS in shmem_nopage!!!
VM_FAULT_SIGBUS in do_no_page!!!
... etc thousands of lines until it finally stop
Race condition?
I tried to lower the 'space' variable for DirectFB Surface Pool to 32 MB and
then I don't get any segfault. Will this destroy anything else?
_______________________________________________
directfb-users mailing list
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-users