Skip to content

Commit c264fec

Browse files
committed
drm/asahi: Don't lock up when unmapping PTEs fails
If a bug causes PTEs to be unmapped twice, the unmap loop gets stuck spamming WARNs forever. Just skip a page and try again so we can make forward progress. Signed-off-by: Asahi Lina <[email protected]>
1 parent 4364162 commit c264fec

1 file changed

Lines changed: 10 additions & 1 deletion

File tree

drivers/gpu/drm/asahi/mmu.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,16 @@ impl VmInner {
255255
let mut left = pgcount;
256256
while left > 0 {
257257
let mapped_iova = self.map_iova(iova, pgsize * left)?;
258-
let unmapped = self.page_table.unmap_pages(mapped_iova, pgsize, left);
258+
let mut unmapped = self.page_table.unmap_pages(mapped_iova, pgsize, left);
259+
if unmapped == 0 {
260+
dev_err!(
261+
self.dev,
262+
"unmap_pages {:#x}:{:#x} returned 0\n",
263+
mapped_iova,
264+
left
265+
);
266+
unmapped = pgsize; // Pretend we unmapped one page and try again...
267+
}
259268
assert!(unmapped <= left * pgsize);
260269

261270
left -= unmapped / pgsize;

0 commit comments

Comments
 (0)