diff --git a/sys/dev/dev_gc.pas b/sys/dev/dev_gc.pas index c4e41c87..d968ef75 100644 --- a/sys/dev/dev_gc.pas +++ b/sys/dev/dev_gc.pas @@ -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 diff --git a/sys/jit/kern_jit.pas b/sys/jit/kern_jit.pas index d2074323..e038c499 100644 --- a/sys/jit/kern_jit.pas +++ b/sys/jit/kern_jit.pas @@ -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; diff --git a/sys/md/vm_pmap.pas b/sys/md/vm_pmap.pas index 815f9d3c..cdc1a155 100644 --- a/sys/md/vm_pmap.pas +++ b/sys/md/vm_pmap.pas @@ -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; diff --git a/sys/vm/rmem_map.pas b/sys/vm/rmem_map.pas index ce7dc02a..7a1031ad 100644 --- a/sys/vm/rmem_map.pas +++ b/sys/vm/rmem_map.pas @@ -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; diff --git a/vulkan/vMemory.pas b/vulkan/vMemory.pas index d98e26c5..96bec214 100644 --- a/vulkan/vMemory.pas +++ b/vulkan/vMemory.pas @@ -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 - //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;