This commit is contained in:
Pavel 2025-03-23 15:39:26 +03:00
parent adcf07936c
commit 6da2d28ee6
5 changed files with 11 additions and 88 deletions

View File

@ -62,7 +62,7 @@ var
gc_knlock:mtx;
gc_knlist:t_knlist;
procedure unmap_dmem_gc(start,__end:DWORD); public;
procedure unmap_dmem_gc(start,__end:QWORD); public;
begin
if (MemManager<>nil) then
begin

View File

@ -1526,6 +1526,8 @@ begin
jit_cbs[OPPnone,OPxbegin,OPSnone]:=@op_invalid;
jit_cbs[OPPnone,OPxend ,OPSnone]:=@op_invalid;
jit_cbs[OPPnone,OPwbinvd,OPSnone]:=@op_invalid;
end;
function test_disassemble(addr:Pointer;vsize:Integer):Boolean;

View File

@ -1607,6 +1607,8 @@ begin
pmap_unlock(pmap,lock);
end;
procedure unmap_dmem_gc(start,__end:QWORD); external;
procedure pmap_remove(pmap :pmap_t;
obj :vm_object_t;
start:vm_offset_t;
@ -1697,6 +1699,9 @@ begin
end;
pmap_unlock(pmap,lock);
unmap_dmem_gc(start+VM_MIN_GPU_ADDRESS,
__end+VM_MIN_GPU_ADDRESS);
end;
procedure pmap_gpu_remove(pmap :pmap_t;

View File

@ -789,57 +789,6 @@ begin
end;
end;
procedure unmap_dmem_gc(start,__end:DWORD); external;
procedure rmem_map_unmap_check(map:p_rmem_map;
start,__end:DWORD);
var
entry:p_rmem_map_entry;
s,e:DWORD;
begin
RMEM_MAP_ASSERT_LOCKED(map);
if not rmem_map_lookup_entry(map,start,@entry) then
begin
Exit;
end;
repeat
if (entry^.start>start) then
begin
s:=start;
if (entry^.start>__end) then
begin
e:=__end;
end else
begin
e:=entry^.start;
end;
if (s<>e) then
begin
unmap_dmem_gc(IDX_TO_OFF(s),IDX_TO_OFF(e));
end;
start:=e;
end else
if (entry^.__end>start) then
begin
start:=entry^.__end;
end;
if (start>=__end) or (entry=@map^.header) or (entry^.start>=__end) then
begin
Break;
end;
entry:=entry^.next;
until false;
end;
function rmem_map_delete(map:p_rmem_map;
vaddr:QWORD;
start,__end:DWORD):Integer;
@ -893,18 +842,6 @@ begin
entry:=next;
end;
if (vaddr=0) then
begin
//all
unmap_dmem_gc(IDX_TO_OFF(start),IDX_TO_OFF(__end));
end else
begin
//one
rmem_map_unmap_check(map,start,__end);
end;
Result:=(KERN_SUCCESS);
end;

View File

@ -1837,8 +1837,6 @@ begin
end;
procedure TvMemManager.unmap_host(start,__end:QWORD);
label
_full;
var
node,next:TvHostMemory;
begin
@ -1855,28 +1853,9 @@ begin
if (__end>node.FStart) and (start<node.F__End) then
begin
if (start<=node.FStart) and (__end>=node.F__End) then
begin
//full in
_full:
Dec(FHosts_count);
TAILQ_REMOVE(@FHosts,node,@node.entry);
ReleaseAndNil(node); //list
end else
if rmem_map_test_lock(node.FStart,node.F__End) then
begin
goto _full;
end else
if (node.FHold=0) then //lock Hold?
begin
//partial
Dec(FHosts_count);
TAILQ_REMOVE(@FHosts,node,@node.entry);
node.ReleaseAllDependencies(node);
ReleaseAndNil(node); //list
end;
Dec(FHosts_count);
TAILQ_REMOVE(@FHosts,node,@node.entry);
ReleaseAndNil(node); //list
end;
node:=next;