I suspect there's an issue in amdgpu_vm_bo_split_mapping, e.g. this code looks suspicious: if (pages_addr) { uint64_t count; max_entries = min(max_entries, 16ull * 1024ull); for (count = 1; count < max_entries; ++count) { uint64_t idx = pfn + count; if (pages_addr[idx] != (pages_addr[idx - 1] + PAGE_SIZE)) break; } count is compared to max_entries, which is a number of GPU pages, but is also added to pfn, which is a number of CPU pages.