Skip to content

Commit b76c01f

Browse files
committed
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: Dave 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
2 parents e54478f + 31accc3 commit b76c01f

14 files changed

+43
-50
lines changed

drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1159,7 +1159,7 @@ static void reloc_cache_unmap(struct reloc_cache *cache)
11591159

11601160
vaddr = unmask_page(cache->vaddr);
11611161
if (cache->vaddr & KMAP)
1162-
kunmap_atomic(vaddr);
1162+
kunmap_local(vaddr);
11631163
else
11641164
io_mapping_unmap_atomic((void __iomem *)vaddr);
11651165
}
@@ -1175,7 +1175,7 @@ static void reloc_cache_remap(struct reloc_cache *cache,
11751175
if (cache->vaddr & KMAP) {
11761176
struct page *page = i915_gem_object_get_page(obj, cache->page);
11771177

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

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

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

1262-
vaddr = kmap_atomic(page);
1262+
vaddr = kmap_local_page(page);
12631263
cache->vaddr = unmask_flags(cache->vaddr) | (unsigned long)vaddr;
12641264
cache->page = pageno;
12651265

drivers/gpu/drm/i915/gem/i915_gem_object.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -500,17 +500,15 @@ static void
500500
i915_gem_object_read_from_page_kmap(struct drm_i915_gem_object *obj, u64 offset, void *dst, int size)
501501
{
502502
pgoff_t idx = offset >> PAGE_SHIFT;
503-
void *src_map;
504503
void *src_ptr;
505504

506-
src_map = kmap_atomic(i915_gem_object_get_page(obj, idx));
507-
508-
src_ptr = src_map + offset_in_page(offset);
505+
src_ptr = kmap_local_page(i915_gem_object_get_page(obj, idx))
506+
+ offset_in_page(offset);
509507
if (!(obj->cache_coherent & I915_BO_CACHE_COHERENT_FOR_READ))
510508
drm_clflush_virt_range(src_ptr, size);
511509
memcpy(dst, src_ptr, size);
512510

513-
kunmap_atomic(src_map);
511+
kunmap_local(src_ptr);
514512
}
515513

516514
static void

drivers/gpu/drm/i915/gem/i915_gem_phys.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,13 @@ static int i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
6565
dst = vaddr;
6666
for (i = 0; i < obj->base.size / PAGE_SIZE; i++) {
6767
struct page *page;
68-
void *src;
6968

7069
page = shmem_read_mapping_page(mapping, i);
7170
if (IS_ERR(page))
7271
goto err_st;
7372

74-
src = kmap_atomic(page);
75-
memcpy(dst, src, PAGE_SIZE);
73+
memcpy_from_page(dst, page, 0, PAGE_SIZE);
7674
drm_clflush_virt_range(dst, PAGE_SIZE);
77-
kunmap_atomic(src);
7875

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

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

118114
page = shmem_read_mapping_page(mapping, i);
119115
if (IS_ERR(page))
120116
continue;
121117

122-
dst = kmap_atomic(page);
123118
drm_clflush_virt_range(src, PAGE_SIZE);
124-
memcpy(dst, src, PAGE_SIZE);
125-
kunmap_atomic(dst);
119+
memcpy_to_page(page, 0, src, PAGE_SIZE);
126120

127121
set_page_dirty(page);
128122
if (obj->mm.madv == I915_MADV_WILLNEED)

drivers/gpu/drm/i915/gem/i915_gem_shmem.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -485,11 +485,13 @@ shmem_pwrite(struct drm_i915_gem_object *obj,
485485
if (err < 0)
486486
return err;
487487

488-
vaddr = kmap_atomic(page);
488+
vaddr = kmap_local_page(page);
489+
pagefault_disable();
489490
unwritten = __copy_from_user_inatomic(vaddr + pg,
490491
user_data,
491492
len);
492-
kunmap_atomic(vaddr);
493+
pagefault_enable();
494+
kunmap_local(vaddr);
493495

494496
err = aops->write_end(obj->base.filp, mapping, offset, len,
495497
len - unwritten, page, data);

drivers/gpu/drm/i915/gem/selftests/huge_pages.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1082,20 +1082,20 @@ __cpu_check_shmem(struct drm_i915_gem_object *obj, u32 dword, u32 val)
10821082
goto err_unlock;
10831083

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

10871087
if (needs_flush & CLFLUSH_BEFORE)
10881088
drm_clflush_virt_range(ptr, PAGE_SIZE);
10891089

10901090
if (ptr[dword] != val) {
10911091
pr_err("n=%lu ptr[%u]=%u, val=%u\n",
10921092
n, dword, ptr[dword], val);
1093-
kunmap_atomic(ptr);
1093+
kunmap_local(ptr);
10941094
err = -EINVAL;
10951095
break;
10961096
}
10971097

1098-
kunmap_atomic(ptr);
1098+
kunmap_local(ptr);
10991099
}
11001100

11011101
i915_gem_object_finish_access(obj);

drivers/gpu/drm/i915/gem/selftests/i915_gem_coherency.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ static int cpu_set(struct context *ctx, unsigned long offset, u32 v)
2424
{
2525
unsigned int needs_clflush;
2626
struct page *page;
27-
void *map;
2827
u32 *cpu;
2928
int err;
3029

@@ -34,8 +33,7 @@ static int cpu_set(struct context *ctx, unsigned long offset, u32 v)
3433
goto out;
3534

3635
page = i915_gem_object_get_page(ctx->obj, offset >> PAGE_SHIFT);
37-
map = kmap_atomic(page);
38-
cpu = map + offset_in_page(offset);
36+
cpu = kmap_local_page(page) + offset_in_page(offset);
3937

4038
if (needs_clflush & CLFLUSH_BEFORE)
4139
drm_clflush_virt_range(cpu, sizeof(*cpu));
@@ -45,7 +43,7 @@ static int cpu_set(struct context *ctx, unsigned long offset, u32 v)
4543
if (needs_clflush & CLFLUSH_AFTER)
4644
drm_clflush_virt_range(cpu, sizeof(*cpu));
4745

48-
kunmap_atomic(map);
46+
kunmap_local(cpu);
4947
i915_gem_object_finish_access(ctx->obj);
5048

5149
out:
@@ -57,7 +55,6 @@ static int cpu_get(struct context *ctx, unsigned long offset, u32 *v)
5755
{
5856
unsigned int needs_clflush;
5957
struct page *page;
60-
void *map;
6158
u32 *cpu;
6259
int err;
6360

@@ -67,15 +64,14 @@ static int cpu_get(struct context *ctx, unsigned long offset, u32 *v)
6764
goto out;
6865

6966
page = i915_gem_object_get_page(ctx->obj, offset >> PAGE_SHIFT);
70-
map = kmap_atomic(page);
71-
cpu = map + offset_in_page(offset);
67+
cpu = kmap_local_page(page) + offset_in_page(offset);
7268

7369
if (needs_clflush & CLFLUSH_BEFORE)
7470
drm_clflush_virt_range(cpu, sizeof(*cpu));
7571

7672
*v = *cpu;
7773

78-
kunmap_atomic(map);
74+
kunmap_local(cpu);
7975
i915_gem_object_finish_access(ctx->obj);
8076

8177
out:

drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -489,12 +489,12 @@ static int cpu_fill(struct drm_i915_gem_object *obj, u32 value)
489489
for (n = 0; n < real_page_count(obj); n++) {
490490
u32 *map;
491491

492-
map = kmap_atomic(i915_gem_object_get_page(obj, n));
492+
map = kmap_local_page(i915_gem_object_get_page(obj, n));
493493
for (m = 0; m < DW_PER_PAGE; m++)
494494
map[m] = value;
495495
if (!has_llc)
496496
drm_clflush_virt_range(map, PAGE_SIZE);
497-
kunmap_atomic(map);
497+
kunmap_local(map);
498498
}
499499

500500
i915_gem_object_finish_access(obj);
@@ -520,7 +520,7 @@ static noinline int cpu_check(struct drm_i915_gem_object *obj,
520520
for (n = 0; n < real_page_count(obj); n++) {
521521
u32 *map, m;
522522

523-
map = kmap_atomic(i915_gem_object_get_page(obj, n));
523+
map = kmap_local_page(i915_gem_object_get_page(obj, n));
524524
if (needs_flush & CLFLUSH_BEFORE)
525525
drm_clflush_virt_range(map, PAGE_SIZE);
526526

@@ -546,7 +546,7 @@ static noinline int cpu_check(struct drm_i915_gem_object *obj,
546546
}
547547

548548
out_unmap:
549-
kunmap_atomic(map);
549+
kunmap_local(map);
550550
if (err)
551551
break;
552552
}

drivers/gpu/drm/i915/gem/selftests/i915_gem_dmabuf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@ static int igt_dmabuf_export_vmap(void *arg)
504504
}
505505

506506
if (memchr_inv(ptr, 0, dmabuf->size)) {
507-
pr_err("Exported object not initialiased to zero!\n");
507+
pr_err("Exported object not initialised to zero!\n");
508508
err = -EINVAL;
509509
goto out;
510510
}

drivers/gpu/drm/i915/gt/intel_gt_regs.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,9 @@
469469
#define XEHP_PSS_MODE2 MCR_REG(0x703c)
470470
#define SCOREBOARD_STALL_FLUSH_CONTROL REG_BIT(5)
471471

472+
#define XEHP_PSS_CHICKEN MCR_REG(0x7044)
473+
#define FD_END_COLLECT REG_BIT(5)
474+
472475
#define GEN7_SC_INSTDONE _MMIO(0x7100)
473476
#define GEN12_SC_INSTDONE_EXTRA _MMIO(0x7104)
474477
#define GEN12_SC_INSTDONE_EXTRA2 _MMIO(0x7108)

drivers/gpu/drm/i915/gt/intel_workarounds.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -777,6 +777,9 @@ static void dg2_ctx_workarounds_init(struct intel_engine_cs *engine,
777777

778778
/* Wa_18019271663:dg2 */
779779
wa_masked_en(wal, CACHE_MODE_1, MSAA_OPTIMIZATION_REDUC_DISABLE);
780+
781+
/* Wa_14019877138:dg2 */
782+
wa_mcr_masked_en(wal, XEHP_PSS_CHICKEN, FD_END_COLLECT);
780783
}
781784

782785
static void xelpg_ctx_gt_tuning_init(struct intel_engine_cs *engine,

0 commit comments

Comments
 (0)