From 2bc8f0feb72cc99a3c297ada93129b23c20d1eac Mon Sep 17 00:00:00 2001 From: "Evgeny Grechnikov (Diamond)" Date: Fri, 7 May 2010 17:47:52 +0000 Subject: [PATCH] changes in free memory checks from Maxis (bug #9) git-svn-id: svn://kolibrios.org@1461 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/core/memory.inc | 43 ++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/kernel/trunk/core/memory.inc b/kernel/trunk/core/memory.inc index 611fd87ecc..37cd8190d2 100644 --- a/kernel/trunk/core/memory.inc +++ b/kernel/trunk/core/memory.inc @@ -14,6 +14,11 @@ proc alloc_page pushfd cli push ebx +;//- + cmp [pg_data.pages_free], 1 + jle .out_of_memory +;//- + mov ebx, [page_start] mov ecx, [page_end] .l1: @@ -27,15 +32,27 @@ proc alloc_page xor eax,eax ret .found: +;//- + dec [pg_data.pages_free] + jz .out_of_memory +;//- btr [ebx], eax mov [page_start],ebx sub ebx, sys_pgmap lea eax, [eax+ebx*8] shl eax, 12 - dec [pg_data.pages_free] +;//- dec [pg_data.pages_free] pop ebx popfd ret +;//- +.out_of_memory: + mov [pg_data.pages_free], 1 + xor eax, eax + pop ebx + popfd + ret +;//- endp align 4 @@ -48,9 +65,14 @@ proc alloc_pages stdcall, count:dword add eax, 7 shr eax, 3 mov [count], eax - cmp eax, [pg_data.pages_free] - ja .fail - +;//- + mov ebx, [pg_data.pages_free] + sub ebx, 9 + js .out_of_memory + shr ebx, 3 + cmp eax, ebx + jg .out_of_memory +;//- mov ecx, [page_start] mov ebx, [page_end] .find: @@ -64,6 +86,7 @@ proc alloc_pages stdcall, count:dword inc ecx cmp ecx,ebx jb .match +.out_of_memory: .fail: xor eax, eax pop edi @@ -479,6 +502,15 @@ proc new_mem_resize stdcall, new_size:dword cmp edi, esi jb @B .grow: +;//- + pop edi + push edi + mov esi, [pg_data.pages_free] + sub esi, 1 + shr edi, 12 + cmp esi, edi + jle .out_of_memory +;//- pop edi pop esi @@: @@ -500,7 +532,10 @@ proc new_mem_resize stdcall, new_size:dword jb @B jmp .update_size +;//- .exit_pop: +.out_of_memory: +;//- pop edi pop esi .exit: