Skip to content

Commit e885c48

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 <lina@asahilina.net>
1 parent 00b9d49 commit e885c48

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)