跳转至

2. kfd read

kfd 在kfd_chardev.c被初始化为一个字符设备。

static const struct file_operations kfd_fops = {
    .owner = THIS_MODULE,
    .unlocked_ioctl = kfd_ioctl,
    .compat_ioctl = compat_ptr_ioctl,
    .open = kfd_open,
    .release = kfd_release,
    .mmap = kfd_mmap,
};
kfd_mmap通过vma传入的虚拟地址偏移mmap_offset来解析映射。其中高位为映射显存类型。

KFD IOCTL

kfd_ioctl_alloc_memory_of_gpu mem ← amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu() amdgpu_gem_object_create drm_vma_node_allow drm_gem_handle_create

kfd_ioctl_map_memory_to_gpu mem → amdgpu_amdkfd_gpuvm_map_memory_to_gpu() kfd_mem_attach kfd_mem_attach_dmabuf kfd_mem_export_dmabuf amdgpu_gem_prime_import amdgpu_dma_buf_create_obj dma_buf_dynamic_attach

    reserve_bo_and_vm
    map_bo_to_gpuvm
    unreserve_bo_and_vms