Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'drm-intel-gt-next-2026-03-12' of https://gitlab.freedesktop.org/drm/i915/kernel into drm-next

Driver Changes:

Fixes/improvements/new stuff:

- Fix potential overflow of shmem scatterlist length (Janusz Krzysztofik)

Miscellaneous:

- Keep mock file open during unfaultable migrate with fill [selftests] (Krzysztof Karas)
- Test for imported buffers with drm_gem_is_imported() (Thomas Zimmermann)
- Fix corrupted copyright symbols in selftest files [guc] (Konstantin Khorenko)

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Tvrtko Ursulin <tursulin@igalia.com>
Link: https://patch.msgid.link/abKBHNFsBQCv2h3e@linux

+69 -29
+3 -3
drivers/gpu/drm/i915/gem/i915_gem_object.c
··· 372 372 * and ttm_bo_cleanup_memtype_use() shouldn't be invoked for 373 373 * dma-buf, so it's safe to take the lock. 374 374 */ 375 - if (obj->base.import_attach) 375 + if (drm_gem_is_imported(&obj->base)) 376 376 i915_gem_object_lock(obj, NULL); 377 377 378 378 __i915_gem_object_put_pages(obj); 379 379 380 - if (obj->base.import_attach) 380 + if (drm_gem_is_imported(&obj->base)) 381 381 i915_gem_object_unlock(obj); 382 382 383 383 GEM_BUG_ON(i915_gem_object_has_pages(obj)); ··· 391 391 392 392 bitmap_free(obj->bit_17); 393 393 394 - if (obj->base.import_attach) 394 + if (drm_gem_is_imported(&obj->base)) 395 395 drm_prime_gem_destroy(&obj->base, NULL); 396 396 397 397 drm_gem_free_mmap_offset(&obj->base);
+9 -3
drivers/gpu/drm/i915/gem/i915_gem_shmem.c
··· 153 153 } 154 154 } while (1); 155 155 156 - nr_pages = min_t(unsigned long, 157 - folio_nr_pages(folio), page_count - i); 156 + nr_pages = min_array(((unsigned long[]) { 157 + folio_nr_pages(folio), 158 + page_count - i, 159 + max_segment / PAGE_SIZE, 160 + }), 3); 161 + 158 162 if (!i || 159 163 sg->length >= max_segment || 160 164 folio_pfn(folio) != next_pfn) { ··· 168 164 st->nents++; 169 165 sg_set_folio(sg, folio, nr_pages * PAGE_SIZE, 0); 170 166 } else { 171 - /* XXX: could overflow? */ 167 + nr_pages = min_t(unsigned long, nr_pages, 168 + (max_segment - sg->length) / PAGE_SIZE); 169 + 172 170 sg->length += nr_pages * PAGE_SIZE; 173 171 } 174 172 next_pfn = folio_pfn(folio) + nr_pages;
+20 -7
drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c
··· 1159 1159 struct drm_i915_gem_object *obj; 1160 1160 struct i915_request *rq = NULL; 1161 1161 struct vm_area_struct *area; 1162 + struct file *mock_file; 1162 1163 unsigned long addr; 1163 1164 LIST_HEAD(objects); 1164 1165 u64 offset; ··· 1179 1178 goto out_put; 1180 1179 1181 1180 /* 1182 - * This will eventually create a GEM context, due to opening dummy drm 1183 - * file, which needs a tiny amount of mappable device memory for the top 1184 - * level paging structures(and perhaps scratch), so make sure we 1185 - * allocate early, to avoid tears. 1181 + * Pretend to open("/dev/dri/card0"), which will eventually create a GEM 1182 + * context along with multiple GEM objects (for paging structures and 1183 + * scratch) that are placed in mappable portion of GPU memory. 1184 + * Calling fput() on the file places objects' cleanup routines in delayed 1185 + * worqueues, which execute after unspecified amount of time. 1186 + * Keep the file open until migration and page fault checks are done to 1187 + * make sure object cleanup is not executed after igt_fill_mappable() 1188 + * finishes and before migration is attempted - that would leave a gap 1189 + * large enough for the migration to succeed, when we'd expect it to fail. 1186 1190 */ 1187 - addr = igt_mmap_offset(i915, offset, obj->base.size, 1188 - PROT_WRITE, MAP_SHARED); 1191 + mock_file = mock_drm_getfile(i915->drm.primary, O_RDWR); 1192 + if (IS_ERR(mock_file)) 1193 + return PTR_ERR(mock_file); 1194 + 1195 + addr = igt_mmap_offset_with_file(i915, offset, obj->base.size, 1196 + PROT_WRITE, MAP_SHARED, mock_file); 1189 1197 if (IS_ERR_VALUE(addr)) { 1190 1198 err = addr; 1191 - goto out_put; 1199 + goto out_fput; 1192 1200 } 1193 1201 1194 1202 mmap_read_lock(current->mm); ··· 1303 1293 1304 1294 out_addr: 1305 1295 vm_munmap(addr, obj->base.size); 1296 + 1297 + out_fput: 1298 + fput(mock_file); 1306 1299 1307 1300 out_put: 1308 1301 i915_gem_object_put(obj);
+1 -1
drivers/gpu/drm/i915/gt/uc/selftest_guc.c
··· 1 1 // SPDX-License-Identifier: MIT 2 2 /* 3 - * Copyright �� 2021 Intel Corporation 3 + * Copyright © 2021 Intel Corporation 4 4 */ 5 5 6 6 #include "gt/intel_gt_print.h"
+1 -1
drivers/gpu/drm/i915/gt/uc/selftest_guc_multi_lrc.c
··· 1 1 // SPDX-License-Identifier: MIT 2 2 /* 3 - * Copyright �� 2019 Intel Corporation 3 + * Copyright © 2019 Intel Corporation 4 4 */ 5 5 6 6 #include "gt/intel_gt_print.h"
+27 -14
drivers/gpu/drm/i915/selftests/igt_mmap.c
··· 9 9 #include "i915_drv.h" 10 10 #include "igt_mmap.h" 11 11 12 - unsigned long igt_mmap_offset(struct drm_i915_private *i915, 13 - u64 offset, 14 - unsigned long size, 15 - unsigned long prot, 16 - unsigned long flags) 12 + unsigned long igt_mmap_offset_with_file(struct drm_i915_private *i915, 13 + u64 offset, 14 + unsigned long size, 15 + unsigned long prot, 16 + unsigned long flags, 17 + struct file *file) 17 18 { 18 19 struct drm_vma_offset_node *node; 19 - struct file *file; 20 20 unsigned long addr; 21 21 int err; 22 22 ··· 31 31 return -ENOENT; 32 32 } 33 33 34 - /* Pretend to open("/dev/dri/card0") */ 35 - file = mock_drm_getfile(i915->drm.primary, O_RDWR); 36 - if (IS_ERR(file)) 37 - return PTR_ERR(file); 38 - 39 34 err = drm_vma_node_allow(node, file->private_data); 40 35 if (err) { 41 - addr = err; 42 - goto out_file; 36 + return err; 43 37 } 44 38 45 39 addr = vm_mmap(file, 0, drm_vma_node_size(node) << PAGE_SHIFT, 46 40 prot, flags, drm_vma_node_offset_addr(node)); 47 41 48 42 drm_vma_node_revoke(node, file->private_data); 49 - out_file: 43 + 44 + return addr; 45 + } 46 + 47 + unsigned long igt_mmap_offset(struct drm_i915_private *i915, 48 + u64 offset, 49 + unsigned long size, 50 + unsigned long prot, 51 + unsigned long flags) 52 + { 53 + struct file *file; 54 + unsigned long addr; 55 + 56 + /* Pretend to open("/dev/dri/card0") */ 57 + file = mock_drm_getfile(i915->drm.primary, O_RDWR); 58 + if (IS_ERR(file)) 59 + return PTR_ERR(file); 60 + 61 + addr = igt_mmap_offset_with_file(i915, offset, size, prot, flags, file); 50 62 fput(file); 63 + 51 64 return addr; 52 65 }
+8
drivers/gpu/drm/i915/selftests/igt_mmap.h
··· 11 11 12 12 struct drm_i915_private; 13 13 struct drm_vma_offset_node; 14 + struct file; 14 15 15 16 unsigned long igt_mmap_offset(struct drm_i915_private *i915, 16 17 u64 offset, 17 18 unsigned long size, 18 19 unsigned long prot, 19 20 unsigned long flags); 21 + 22 + unsigned long igt_mmap_offset_with_file(struct drm_i915_private *i915, 23 + u64 offset, 24 + unsigned long size, 25 + unsigned long prot, 26 + unsigned long flags, 27 + struct file *file); 20 28 21 29 #endif /* IGT_MMAP_H */