mirror of
https://github.com/opnsense/src.git
synced 2026-06-11 01:30:30 -04:00
When one tries to allocate memory with the M_WAITOK flag and we are short in
address space in kmem map call vm_lowmem event in a loop and wait a bit for subsystems to reclaim some memory which in turn will reclaim address space as well. Note, this is a work-around. Reviewed by: alc Approved by: alc MFC after: 3 days
This commit is contained in:
parent
10b16b260c
commit
79c2840d1d
1 changed files with 13 additions and 6 deletions
|
|
@ -296,14 +296,21 @@ kmem_malloc(map, size, flags)
|
|||
vm_map_lock(map);
|
||||
if (vm_map_findspace(map, vm_map_min(map), size, &addr)) {
|
||||
vm_map_unlock(map);
|
||||
if ((flags & M_NOWAIT) == 0) {
|
||||
EVENTHANDLER_INVOKE(vm_lowmem, 0);
|
||||
uma_reclaim();
|
||||
vm_map_lock(map);
|
||||
if (vm_map_findspace(map, vm_map_min(map), size, &addr)) {
|
||||
if ((flags & M_NOWAIT) == 0) {
|
||||
for (i = 0; i < 8; i++) {
|
||||
EVENTHANDLER_INVOKE(vm_lowmem, 0);
|
||||
uma_reclaim();
|
||||
vm_map_lock(map);
|
||||
if (vm_map_findspace(map, vm_map_min(map),
|
||||
size, &addr) == 0) {
|
||||
break;
|
||||
}
|
||||
vm_map_unlock(map);
|
||||
tsleep(&i, 0, "nokva", (hz / 4) * (i + 1));
|
||||
}
|
||||
if (i == 8) {
|
||||
panic("kmem_malloc(%ld): kmem_map too small: %ld total allocated",
|
||||
(long)size, (long)map->size);
|
||||
(long)size, (long)map->size);
|
||||
}
|
||||
} else {
|
||||
return (0);
|
||||
|
|
|
|||
Loading…
Reference in a new issue