Re: [PATCH v7 4/7] drm/tyr: add GPU virtual memory (VM) support

Daniel Almeida <[email protected]>
Newsgroups org.kernel.vger.rust-for-linux,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
>> +/// Maps a physical address range into the page table at the specified virtual address.
>> +///
>> +/// This function maps `len` bytes of physical memory starting at `paddr` to the
>> +/// virtual address `iova`, using the protection flags specified in `prot`. It
>> +/// automatically selects optimal page sizes to minimize page table overhead.
>> +///
>> +/// If the mapping fails partway through, all successfully mapped pages are
>> +/// unmapped before returning an error.
>> +///
>> +/// Returns the number of bytes successfully mapped.
>> +fn pt_map(
>> +    pt: &IoPageTable<'_, ARM64LPAES1>,
>> +    iova: u64,
>> +    paddr: u64,
>> +    len: u64,
>> +    prot: u32,
>> +) -> Result<u64> {
>> +    let mut segment_mapped = 0u64;
>> +    while segment_mapped < len {
>> +        let remaining = len - segment_mapped;
>> +        let curr_iova = iova + segment_mapped;
>> +        let curr_paddr = paddr + segment_mapped;
>> +
>> +        let (pgsize, pgcount) = get_pgsize(curr_iova | curr_paddr, remaining);
>> +
>> +        // SAFETY:
>> +        // No other io-pgtable operation can currently access this range because Tyr holds
>> +        // the gpuvm_unique mutex for the entire sm_map() operation.
>> +        // The addresses being mapped won't overlap any existing mappings in this
>> +        // page table because drm_gpuvm_sm_map() checks each requested mapping and either unmaps
>> +        // or remaps any overlap before creating the new mapping.
>> +        let (mapped, result) = unsafe {
>> +            pt.map_pages(
>> +                curr_iova as usize,
>> +                (curr_paddr as usize).try_into().unwrap(),

Let’s please not have unwraps() anywhere. We really don’t want to panic.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.