Commit 38cb89a6 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-intel-gt-next-2026-03-12' of...

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: default avatarDave Airlie <airlied@redhat.com>
From: Tvrtko Ursulin <tursulin@igalia.com>
Link: https://patch.msgid.link/abKBHNFsBQCv2h3e@linux
parents d9a4a202 06249b4e
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -372,12 +372,12 @@ void __i915_gem_object_pages_fini(struct drm_i915_gem_object *obj)
	 * and ttm_bo_cleanup_memtype_use() shouldn't be invoked for
	 * dma-buf, so it's safe to take the lock.
	 */
	if (obj->base.import_attach)
	if (drm_gem_is_imported(&obj->base))
		i915_gem_object_lock(obj, NULL);

	__i915_gem_object_put_pages(obj);

	if (obj->base.import_attach)
	if (drm_gem_is_imported(&obj->base))
		i915_gem_object_unlock(obj);

	GEM_BUG_ON(i915_gem_object_has_pages(obj));
@@ -391,7 +391,7 @@ void __i915_gem_free_object(struct drm_i915_gem_object *obj)

	bitmap_free(obj->bit_17);

	if (obj->base.import_attach)
	if (drm_gem_is_imported(&obj->base))
		drm_prime_gem_destroy(&obj->base, NULL);

	drm_gem_free_mmap_offset(&obj->base);
+9 −3
Original line number Diff line number Diff line
@@ -153,8 +153,12 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
			}
		} while (1);

		nr_pages = min_t(unsigned long,
				folio_nr_pages(folio), page_count - i);
		nr_pages = min_array(((unsigned long[]) {
					folio_nr_pages(folio),
					page_count - i,
					max_segment / PAGE_SIZE,
				      }), 3);

		if (!i ||
		    sg->length >= max_segment ||
		    folio_pfn(folio) != next_pfn) {
@@ -164,7 +168,9 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
			st->nents++;
			sg_set_folio(sg, folio, nr_pages * PAGE_SIZE, 0);
		} else {
			/* XXX: could overflow? */
			nr_pages = min_t(unsigned long, nr_pages,
					 (max_segment - sg->length) / PAGE_SIZE);

			sg->length += nr_pages * PAGE_SIZE;
		}
		next_pfn = folio_pfn(folio) + nr_pages;
+20 −7
Original line number Diff line number Diff line
@@ -1159,6 +1159,7 @@ static int __igt_mmap_migrate(struct intel_memory_region **placements,
	struct drm_i915_gem_object *obj;
	struct i915_request *rq = NULL;
	struct vm_area_struct *area;
	struct file *mock_file;
	unsigned long addr;
	LIST_HEAD(objects);
	u64 offset;
@@ -1178,16 +1179,25 @@ static int __igt_mmap_migrate(struct intel_memory_region **placements,
		goto out_put;

	/*
	 * This will eventually create a GEM context, due to opening dummy drm
	 * file, which needs a tiny amount of mappable device memory for the top
	 * level paging structures(and perhaps scratch), so make sure we
	 * allocate early, to avoid tears.
	 * Pretend to open("/dev/dri/card0"), which will eventually create a GEM
	 * context along with multiple GEM objects (for paging structures and
	 * scratch) that are placed in mappable portion of GPU memory.
	 * Calling fput() on the file places objects' cleanup routines in delayed
	 * worqueues, which execute after unspecified amount of time.
	 * Keep the file open until migration and page fault checks are done to
	 * make sure object cleanup is not executed after igt_fill_mappable()
	 * finishes and before migration is attempted - that would leave a gap
	 * large enough for the migration to succeed, when we'd expect it to fail.
	 */
	addr = igt_mmap_offset(i915, offset, obj->base.size,
			       PROT_WRITE, MAP_SHARED);
	mock_file = mock_drm_getfile(i915->drm.primary, O_RDWR);
	if (IS_ERR(mock_file))
		return PTR_ERR(mock_file);

	addr = igt_mmap_offset_with_file(i915, offset, obj->base.size,
					 PROT_WRITE, MAP_SHARED, mock_file);
	if (IS_ERR_VALUE(addr)) {
		err = addr;
		goto out_put;
		goto out_fput;
	}

	mmap_read_lock(current->mm);
@@ -1294,6 +1304,9 @@ static int __igt_mmap_migrate(struct intel_memory_region **placements,
out_addr:
	vm_munmap(addr, obj->base.size);

out_fput:
	fput(mock_file);

out_put:
	i915_gem_object_put(obj);
	igt_close_objects(i915, &objects);
+1 −1
Original line number Diff line number Diff line
// SPDX-License-Identifier: MIT
/*
 * Copyright �� 2021 Intel Corporation
 * Copyright © 2021 Intel Corporation
 */

#include "gt/intel_gt_print.h"
+1 −1
Original line number Diff line number Diff line
// SPDX-License-Identifier: MIT
/*
 * Copyright �� 2019 Intel Corporation
 * Copyright © 2019 Intel Corporation
 */

#include "gt/intel_gt_print.h"
Loading