Commit b76c01f1 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-intel-gt-next-2023-12-15' of...

Merge tag 'drm-intel-gt-next-2023-12-15' of git://anongit.freedesktop.org/drm/drm-intel

 into drm-next

Driver Changes:

- Eliminate use of kmap_atomic() in i915 (Zhao)
- Add Wa_14019877138 for DG2 (Haridhar)
- Static checker and spelling fixes (Colin, Karthik, Randy)

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/ZXxCibZZQqlqhDN3@jlahtine-mobl.ger.corp.intel.com
parents e54478fb 31accc37
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -1159,7 +1159,7 @@ static void reloc_cache_unmap(struct reloc_cache *cache)

	vaddr = unmask_page(cache->vaddr);
	if (cache->vaddr & KMAP)
		kunmap_atomic(vaddr);
		kunmap_local(vaddr);
	else
		io_mapping_unmap_atomic((void __iomem *)vaddr);
}
@@ -1175,7 +1175,7 @@ static void reloc_cache_remap(struct reloc_cache *cache,
	if (cache->vaddr & KMAP) {
		struct page *page = i915_gem_object_get_page(obj, cache->page);

		vaddr = kmap_atomic(page);
		vaddr = kmap_local_page(page);
		cache->vaddr = unmask_flags(cache->vaddr) |
			(unsigned long)vaddr;
	} else {
@@ -1205,7 +1205,7 @@ static void reloc_cache_reset(struct reloc_cache *cache, struct i915_execbuffer
		if (cache->vaddr & CLFLUSH_AFTER)
			mb();

		kunmap_atomic(vaddr);
		kunmap_local(vaddr);
		i915_gem_object_finish_access(obj);
	} else {
		struct i915_ggtt *ggtt = cache_to_ggtt(cache);
@@ -1237,7 +1237,7 @@ static void *reloc_kmap(struct drm_i915_gem_object *obj,
	struct page *page;

	if (cache->vaddr) {
		kunmap_atomic(unmask_page(cache->vaddr));
		kunmap_local(unmask_page(cache->vaddr));
	} else {
		unsigned int flushes;
		int err;
@@ -1259,7 +1259,7 @@ static void *reloc_kmap(struct drm_i915_gem_object *obj,
	if (!obj->mm.dirty)
		set_page_dirty(page);

	vaddr = kmap_atomic(page);
	vaddr = kmap_local_page(page);
	cache->vaddr = unmask_flags(cache->vaddr) | (unsigned long)vaddr;
	cache->page = pageno;

+3 −5
Original line number Diff line number Diff line
@@ -500,17 +500,15 @@ static void
i915_gem_object_read_from_page_kmap(struct drm_i915_gem_object *obj, u64 offset, void *dst, int size)
{
	pgoff_t idx = offset >> PAGE_SHIFT;
	void *src_map;
	void *src_ptr;

	src_map = kmap_atomic(i915_gem_object_get_page(obj, idx));

	src_ptr = src_map + offset_in_page(offset);
	src_ptr = kmap_local_page(i915_gem_object_get_page(obj, idx))
	          + offset_in_page(offset);
	if (!(obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_READ))
		drm_clflush_virt_range(src_ptr, size);
	memcpy(dst, src_ptr, size);

	kunmap_atomic(src_map);
	kunmap_local(src_ptr);
}

static void
+2 −8
Original line number Diff line number Diff line
@@ -65,16 +65,13 @@ static int i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
	dst = vaddr;
	for (i = 0; i < obj->base.size / PAGE_SIZE; i++) {
		struct page *page;
		void *src;

		page = shmem_read_mapping_page(mapping, i);
		if (IS_ERR(page))
			goto err_st;

		src = kmap_atomic(page);
		memcpy(dst, src, PAGE_SIZE);
		memcpy_from_page(dst, page, 0, PAGE_SIZE);
		drm_clflush_virt_range(dst, PAGE_SIZE);
		kunmap_atomic(src);

		put_page(page);
		dst += PAGE_SIZE;
@@ -113,16 +110,13 @@ i915_gem_object_put_pages_phys(struct drm_i915_gem_object *obj,

		for (i = 0; i < obj->base.size / PAGE_SIZE; i++) {
			struct page *page;
			char *dst;

			page = shmem_read_mapping_page(mapping, i);
			if (IS_ERR(page))
				continue;

			dst = kmap_atomic(page);
			drm_clflush_virt_range(src, PAGE_SIZE);
			memcpy(dst, src, PAGE_SIZE);
			kunmap_atomic(dst);
			memcpy_to_page(page, 0, src, PAGE_SIZE);

			set_page_dirty(page);
			if (obj->mm.madv == I915_MADV_WILLNEED)
+4 −2
Original line number Diff line number Diff line
@@ -485,11 +485,13 @@ shmem_pwrite(struct drm_i915_gem_object *obj,
		if (err < 0)
			return err;

		vaddr = kmap_atomic(page);
		vaddr = kmap_local_page(page);
		pagefault_disable();
		unwritten = __copy_from_user_inatomic(vaddr + pg,
						      user_data,
						      len);
		kunmap_atomic(vaddr);
		pagefault_enable();
		kunmap_local(vaddr);

		err = aops->write_end(obj->base.filp, mapping, offset, len,
				      len - unwritten, page, data);
+3 −3
Original line number Diff line number Diff line
@@ -1082,7 +1082,7 @@ __cpu_check_shmem(struct drm_i915_gem_object *obj, u32 dword, u32 val)
		goto err_unlock;

	for (n = 0; n < obj->base.size >> PAGE_SHIFT; ++n) {
		u32 *ptr = kmap_atomic(i915_gem_object_get_page(obj, n));
		u32 *ptr = kmap_local_page(i915_gem_object_get_page(obj, n));

		if (needs_flush & CLFLUSH_BEFORE)
			drm_clflush_virt_range(ptr, PAGE_SIZE);
@@ -1090,12 +1090,12 @@ __cpu_check_shmem(struct drm_i915_gem_object *obj, u32 dword, u32 val)
		if (ptr[dword] != val) {
			pr_err("n=%lu ptr[%u]=%u, val=%u\n",
			       n, dword, ptr[dword], val);
			kunmap_atomic(ptr);
			kunmap_local(ptr);
			err = -EINVAL;
			break;
		}

		kunmap_atomic(ptr);
		kunmap_local(ptr);
	}

	i915_gem_object_finish_access(obj);
Loading