drm/xe/vm: don't ignore error when in_kthread
authorMatthew Auld <matthew.auld@intel.com>
Fri, 2 Feb 2024 17:14:36 +0000 (17:14 +0000)
committerThomas Hellström <thomas.hellstrom@linux.intel.com>
Thu, 8 Feb 2024 08:51:04 +0000 (09:51 +0100)
If GUP fails and we are in_kthread, we can have pinned = 0 and ret = 0.
If that happens we call sg_alloc_append_table_from_pages() with n_pages
= 0, which is not well behaved and can trigger:

kernel BUG at include/linux/scatterlist.h:115!

depending on if the pages array happens to be zeroed or not. Even if we
don't hit that it crashes later when trying to dma_map the returned
table.

Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240202171435.427630-2-matthew.auld@intel.com
(cherry picked from commit 8087199cd5951c1eba26003b3e4296dbb2110adf)
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
drivers/gpu/drm/xe/xe_vm.c

index 99f151d73154a1e055f9a5a3ba5d1f996d1c0cf8..a9df8941315591c17f16392b420290b99a755358 100644 (file)
@@ -114,11 +114,8 @@ retry:
                                          num_pages - pinned,
                                          read_only ? 0 : FOLL_WRITE,
                                          &pages[pinned]);
-               if (ret < 0) {
-                       if (in_kthread)
-                               ret = 0;
+               if (ret < 0)
                        break;
-               }
 
                pinned += ret;
                ret = 0;