I've managed to get network swapping going, but my netstation still kills
my bzflag application.
I think the relevant section of code is inside vmscan.c, following :
flush_cache_page(vma, address);
if (vma->vm_ops && vma->vm_ops->swapout) {
pid_t pid = tsk->pid;
pte_clear(page_table);
flush_tlb_page(vma, address);
vma->vm_mm->rss--;
if (vma->vm_ops->swapout(vma, page_map))
kill_proc(pid, SIGBUS, 1);
__free_page(page_map);
return 1;
}
This seems to be something related to handling really dirty pages,
writing it back to backing store.
To be fair, the bzflag uses about 10M of memory in starting up; there's
ample memory (about 12M) available in the netstation when bzflag starts
up, though a lot of it is network swap.
Kernel operation may, however, be dependent on having a lot of "real,
free" memory, a continuous block, too great a density of dirty pages,
or something.
What does :
if (vma->vm_ops->swapout(vma, page_map))
kill_proc(pid, SIGBUS, 1);
do, and why ?
Are there any ways around this functionality ?
Perhaps I should go to the kernel list if this one is a bit out there :)
Thanks,
--
John August
--
SLUG - Sydney Linux User Group Mailing List - http://slug.org.au/
More Info: http://slug.org.au/lists/listinfo/slug