MCPcopy
hub / github.com/tinygrad/tinygrad / map_range

Method map_range

tinygrad/runtime/support/memory.py:199–216  ·  view source on GitHub ↗
(self, vaddr:int, size:int, paddrs:list[tuple[int, int]], aspace:AddrSpace, uncached=False, snooped=False, boot=False)

Source from the content-addressed store, hash-verified

197 for _ in ctx.next(size, paddr=0): return [pt for pt, _, _ in ctx.pt_stack]
198
199 def map_range(self, vaddr:int, size:int, paddrs:list[tuple[int, int]], aspace:AddrSpace, uncached=False, snooped=False, boot=False) -> VirtMapping:
200 if getenv("MM_DEBUG", 0): print(f"mm {self.dev.devfmt}: mapping {vaddr=:#x} ({size=:#x})")
201
202 assert size == sum(p[1] for p in paddrs), f"Size mismatch {size=} {sum(p[1] for p in paddrs)=}"
203
204 ctx = PageTableTraverseContext(self.dev, self.root_page_table, vaddr, boot=boot, inspect=True)
205 for _, pt, pte_idx, pte_cnt, _ in ctx.next(size):
206 for pte_off in range(pte_cnt): assert not pt.valid(pte_idx + pte_off), f"PTE already mapped: {pt.entry(pte_idx + pte_off):#x}"
207
208 ctx = PageTableTraverseContext(self.dev, self.root_page_table, vaddr, create_pts=True, boot=boot)
209 for paddr, psize in paddrs:
210 for off, pt, pte_idx, pte_cnt, pte_covers in ctx.next(psize, paddr=paddr):
211 for pte_off in range(pte_cnt):
212 pt.set_entry(pte_idx + pte_off, paddr + off + pte_off * pte_covers, uncached=uncached, aspace=aspace, snooped=snooped,
213 frag=self._frag_size(ctx.vaddr+off, pte_cnt * pte_covers), valid=True)
214
215 self.on_range_mapped()
216 return VirtMapping(vaddr, size, paddrs, aspace=aspace, uncached=uncached, snooped=snooped)
217
218 def unmap_range(self, vaddr:int, size:int):
219 if getenv("MM_DEBUG", 0): print(f"mm {self.dev.devfmt}: unmapping {vaddr=:#x} ({size=:#x})")

Callers 6

identity_vaMethod · 0.95
vallocMethod · 0.95
_dma_regionMethod · 0.45
allocMethod · 0.45
mapMethod · 0.45
init_swMethod · 0.45

Calls 9

nextMethod · 0.95
_frag_sizeMethod · 0.95
on_range_mappedMethod · 0.95
getenvFunction · 0.90
VirtMappingClass · 0.85
validMethod · 0.45
entryMethod · 0.45
set_entryMethod · 0.45

Tested by

no test coverage detected