From a1fc249bafc3a9c5b1ebc3d1ad9b4a6c72dd5e73 Mon Sep 17 00:00:00 2001 From: Pavel <68122101+red-prig@users.noreply.github.com> Date: Tue, 14 Feb 2023 19:04:26 +0300 Subject: [PATCH] Fix sceKernelAvailableDirectMemorySize also corrected names --- kernel/mm_adr_direct.pas | 47 ++++++++++++++++++++++++++++------------ kernel/ps4_map_mm.pas | 8 +++---- 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/kernel/mm_adr_direct.pas b/kernel/mm_adr_direct.pas index 393e621b..89b35a5d 100644 --- a/kernel/mm_adr_direct.pas +++ b/kernel/mm_adr_direct.pas @@ -93,10 +93,10 @@ type Function Alloc(Size,Align:QWORD;mtype:Byte;var AdrOut:QWORD):Integer; Function Query(Offset:QWORD;next:Boolean;var ROut:TDirectAdrNode):Integer; Function QueryMType(Offset:QWORD;var ROut:TDirectAdrNode):Integer; - Function CheckedAvailable(ss,se,Align:QWORD;var AdrOut,SizeOut:QWORD):Integer; - Function CheckedAlloc(Offset,Size:QWORD):Integer; - Function CheckedMMap(Offset,Size:QWORD):Integer; - Function CheckedRelease(Offset,Size:QWORD):Integer; + Function QueryAvailable(ss,se,Align:QWORD;var AdrOut,SizeOut:QWORD):Integer; + Function CheckAlloc(Offset,Size:QWORD):Integer; + Function CheckMMap(Offset,Size:QWORD):Integer; + Function CheckRelease(Offset,Size:QWORD):Integer; Function Release(Offset,Size:QWORD):Integer; Function mmap_addr(Offset,Size:QWORD;addr:Pointer;mtype:Integer=-1):Integer; Function mmap_type(Offset,Size:QWORD;mtype:Integer):Integer; @@ -525,17 +525,26 @@ begin ROut:=key; end; -Function TDirectManager.CheckedAvailable(ss,se,Align:QWORD;var AdrOut,SizeOut:QWORD):Integer; +Function TDirectManager.QueryAvailable(ss,se,Align:QWORD;var AdrOut,SizeOut:QWORD):Integer; var It:TFreePoolNodeSet.Iterator; key:TDirectAdrNode; Offset:QWORD; - Size:QWORD; + Size :QWORD; + + r:record + Offset:QWORD; + Size :QWORD; + end; begin Result:=ENOMEM; + if (ssFhi) then Exit(EINVAL); if (se=Offset) then begin Size:=key.Size-(Offset-key.Offset); - AdrOut :=Offset; - SizeOut:=Size; - Exit(0); + + if (Size>r.Size) then + begin + r.Size :=Size; + r.Offset:=Offset; + end; + + Result:=0; //mark end; end; - It.Next + It.Next; + end; + + if (Result=0) then //found + begin + AdrOut :=r.Offset; + SizeOut:=r.Size; end; end; -Function TDirectManager.CheckedAlloc(Offset,Size:QWORD):Integer; +Function TDirectManager.CheckAlloc(Offset,Size:QWORD):Integer; var It:TAllcPoolNodeSet.Iterator; key:TDirectAdrNode; @@ -595,7 +614,7 @@ begin end; end; -Function TDirectManager.CheckedMMap(Offset,Size:QWORD):Integer; +Function TDirectManager.CheckMMap(Offset,Size:QWORD):Integer; var It:TAllcPoolNodeSet.Iterator; key:TDirectAdrNode; @@ -633,7 +652,7 @@ begin end; end; -Function TDirectManager.CheckedRelease(Offset,Size:QWORD):Integer; +Function TDirectManager.CheckRelease(Offset,Size:QWORD):Integer; var It:TAllcPoolNodeSet.Iterator; key:TDirectAdrNode; diff --git a/kernel/ps4_map_mm.pas b/kernel/ps4_map_mm.pas index 3e24998e..589d7f84 100644 --- a/kernel/ps4_map_mm.pas +++ b/kernel/ps4_map_mm.pas @@ -580,7 +580,7 @@ begin _sig_lock; MLOCK; - Result:=DirectManager.CheckedAvailable(searchStart,searchEnd,alignment,FAdrOut,FSizeOut); + Result:=DirectManager.QueryAvailable(searchStart,searchEnd,alignment,FAdrOut,FSizeOut); MUNLOCK; _sig_unlock; @@ -676,7 +676,7 @@ begin _sig_lock; MLOCK; - Result:=DirectManager.CheckedRelease(start,len); + Result:=DirectManager.CheckRelease(start,len); if (Result=0) then begin Result:=DirectManager.Release(start,len); @@ -874,7 +874,7 @@ begin begin if (fd=0) then //direct (psevdo dmem fd=0) begin - Result:=DirectManager.CheckedMMap(offset,len); + Result:=DirectManager.CheckMMap(offset,len); if (Result=0) then begin @@ -932,7 +932,7 @@ begin _sig_lock; MLOCK; - Result:=DirectManager.CheckedMMap(physicalAddr,length); + Result:=DirectManager.CheckMMap(physicalAddr,length); if (Result=0) then begin