[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Z754phgANbgwSptb@lstrano-desk.jf.intel.com>
Date: Tue, 25 Feb 2025 18:12:54 -0800
From: Matthew Brost <matthew.brost@...el.com>
To: <jeffbai@...c.io>
CC: Lucas De Marchi <lucas.demarchi@...el.com>, Thomas
Hellström <thomas.hellstrom@...ux.intel.com>, Rodrigo Vivi
<rodrigo.vivi@...el.com>, Maarten Lankhorst
<maarten.lankhorst@...ux.intel.com>, Maxime Ripard <mripard@...nel.org>,
Thomas Zimmermann <tzimmermann@...e.de>, David Airlie <airlied@...il.com>,
Simona Vetter <simona@...ll.ch>, José Roberto de Souza
<jose.souza@...el.com>, Francois Dugast <francois.dugast@...el.com>, "Alan
Previn" <alan.previn.teres.alexis@...el.com>, Zhanjun Dong
<zhanjun.dong@...el.com>, Matt Roper <matthew.d.roper@...el.com>, "Mateusz
Naklicki" <mateusz.naklicki@...el.com>, Mauro Carvalho Chehab
<mauro.chehab@...ux.intel.com>, Zbigniew Kempczyński
<zbigniew.kempczynski@...el.com>, <intel-xe@...ts.freedesktop.org>,
<dri-devel@...ts.freedesktop.org>, <linux-kernel@...r.kernel.org>, "Kexy
Biscuit" <kexybiscuit@...c.io>, Shang Yatsen <429839446@...com>,
<stable@...r.kernel.org>, Haien Liang <27873200@...com>, Shirong Liu
<lsr1024@...com>, Haofeng Wu <s2600cw2@....com>
Subject: Re: [PATCH 4/5] drm/xe: use 4K alignment for cursor jumps
On Wed, Feb 26, 2025 at 10:00:21AM +0800, Mingcong Bai via B4 Relay wrote:
> From: Mingcong Bai <jeffbai@...c.io>
>
> It appears that the xe_res_cursor also assumes 4K alignment.
>
> Current code uses `PAGE_SIZE' as an assumed alignment reference but 4K
> kernel page sizes is by no means a guarantee. On 16K-paged kernels, this
> causes driver failures during boot up:
>
> [ 23.242757] ------------[ cut here ]------------
> [ 23.247363] WARNING: CPU: 0 PID: 2036 at drivers/gpu/drm/xe/xe_res_cursor.h:182 emit_pte+0x394/0x3b0 [xe]
> [ 23.256962] Modules linked in: nf_conntrack_netbios_ns(E) nf_conntrack_broadcast(E) nft_fib_inet(E) nft_fib_ipv4(E) nft_fib_ipv6(E) nft_fib(E) nft_reject_inet(E) nf_reject_ipv4(E) nf_reject_ipv6(E) nft_reject(E) nft_ct(E) rfkill(E) nft_chain_nat(E) ip6table_nat(E) ip6table_mangle(E) ip6table_raw(E) ip6table_security(E) iptable_nat(E) nf_nat(E) nf_conntrack(E) nf_defrag_ipv6(E) nf_defrag_ipv4(E) iptable_mangle(E) iptable_raw(E) iptable_security(E) ip_set(E) nf_tables(E) ip6table_filter(E) ip6_tables(E) iptable_filter(E) snd_hda_codec_conexant(E) snd_hda_codec_generic(E) snd_hda_codec_hdmi(E) snd_hda_intel(E) snd_intel_dspcfg(E) snd_hda_codec(E) nls_iso8859_1(E) qrtr(E) nls_cp437(E) snd_hda_core(E) loongson3_cpufreq(E) rtc_efi(E) snd_hwdep(E) snd_pcm(E) spi_loongson_pci(E) snd_timer(E) snd(E) spi_loongson_core(E) soundcore(E) gpio_loongson_64bit(E) rtc_loongson(E) i2c_ls2x(E) mousedev(E) input_leds(E) sch_fq_codel(E) fuse(E) nfnetlink(E) dmi_sysfs(E) ip_tables(E) x_tables(E) xe(E) d
> rm_gpuvm(E) drm_buddy(E) gpu_sched(E)
> [ 23.257034] drm_exec(E) drm_suballoc_helper(E) drm_display_helper(E) cec(E) rc_core(E) hid_generic(E) tpm_tis_spi(E) r8169(E) loongson(E) i2c_algo_bit(E) realtek(E) drm_ttm_helper(E) led_class(E) ttm(E) drm_client_lib(E) drm_kms_helper(E) sunrpc(E) i2c_dev(E)
> [ 23.369697] CPU: 0 UID: 1000 PID: 2036 Comm: QSGRenderThread Tainted: G E 6.14.0-rc4-aosc-main-g7cc07e6e50b0-dirty #8
> [ 23.381640] Tainted: [E]=UNSIGNED_MODULE
> [ 23.385534] Hardware name: Loongson Loongson-3A6000-HV-7A2000-1w-V0.1-EVB/Loongson-3A6000-HV-7A2000-1w-EVB-V1.21, BIOS Loongson-UDK2018-V4.0.05756-prestab
> [ 23.399319] pc ffff80000251efc0 ra ffff80000251eddc tp 900000011fe3c000 sp 900000011fe3f7e0
> [ 23.407632] a0 0000000000000001 a1 0000000000000000 a2 0000000000000000 a3 0000000000000000
> [ 23.415938] a4 0000000000000000 a5 0000000000000000 a6 0000000000060000 a7 900000010c947b00
> [ 23.424240] t0 0000000000000000 t1 0000000000000000 t2 0000000000000000 t3 900000012e456230
> [ 23.432543] t4 0000000000000035 t5 0000000000004000 t6 00000001fbc40403 t7 0000000000004000
> [ 23.440845] t8 9000000100e688a8 u0 5cc06cee8ef0edee s9 9000000100024420 s0 0000000000000047
> [ 23.449147] s1 0000000000004000 s2 0000000000000001 s3 900000012adba000 s4 ffffffffffffc000
> [ 23.457450] s5 9000000108939428 s6 0000000000000000 s7 0000000000000000 s8 900000011fe3f8e0
> [ 23.465851] ra: ffff80000251eddc emit_pte+0x1b0/0x3b0 [xe]
> [ 23.471761] ERA: ffff80000251efc0 emit_pte+0x394/0x3b0 [xe]
> [ 23.477557] CRMD: 000000b0 (PLV0 -IE -DA +PG DACF=CC DACM=CC -WE)
> [ 23.483732] PRMD: 00000004 (PPLV0 +PIE -PWE)
> [ 23.488068] EUEN: 00000003 (+FPE +SXE -ASXE -BTE)
> [ 23.492832] ECFG: 00071c1d (LIE=0,2-4,10-12 VS=7)
> [ 23.497594] ESTAT: 000c0000 [BRK] (IS= ECode=12 EsubCode=0)
> [ 23.503133] PRID: 0014d000 (Loongson-64bit, Loongson-3A6000-HV)
> [ 23.509164] CPU: 0 UID: 1000 PID: 2036 Comm: QSGRenderThread Tainted: G E 6.14.0-rc4-aosc-main-g7cc07e6e50b0-dirty #8
> [ 23.509168] Tainted: [E]=UNSIGNED_MODULE
> [ 23.509168] Hardware name: Loongson Loongson-3A6000-HV-7A2000-1w-V0.1-EVB/Loongson-3A6000-HV-7A2000-1w-EVB-V1.21, BIOS Loongson-UDK2018-V4.0.05756-prestab
> [ 23.509170] Stack : ffffffffffffffff ffffffffffffffff 900000000023eb34 900000011fe3c000
> [ 23.509176] 900000011fe3f440 0000000000000000 900000011fe3f448 9000000001c31c70
> [ 23.509181] 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> [ 23.509185] 0000000000000000 5cc06cee8ef0edee 0000000000000000 0000000000000000
> [ 23.509190] 0000000000000000 0000000000000000 0000000000000000 0000000000000000
> [ 23.509193] 0000000000000000 0000000000000000 00000000066b4000 9000000100024420
> [ 23.509197] 9000000001eb8000 0000000000000000 9000000001c31c70 0000000000000004
> [ 23.509202] 0000000000000004 0000000000000000 0000000000000000 0000000000000000
> [ 23.509206] 900000011fe3f8e0 9000000001c31c70 9000000000244174 00007fffac097534
> [ 23.509211] 00000000000000b0 0000000000000004 0000000000000003 0000000000071c1d
> [ 23.509216] ...
> [ 23.509218] Call Trace:
> [ 23.509220] [<9000000000244174>] show_stack+0x3c/0x16c
> [ 23.509226] [<900000000023eb30>] dump_stack_lvl+0x84/0xe0
> [ 23.509230] [<9000000000288208>] __warn+0x8c/0x174
> [ 23.509234] [<90000000017c1918>] report_bug+0x1c0/0x22c
> [ 23.509238] [<90000000017f66e8>] do_bp+0x280/0x344
> [ 23.509243] [<90000000002428a0>] handle_bp+0x120/0x1c0
> [ 23.509247] [<ffff80000251efc0>] emit_pte+0x394/0x3b0 [xe]
> [ 23.509295] [<ffff800002520d38>] xe_migrate_clear+0x2d8/0xa54 [xe]
> [ 23.509341] [<ffff8000024e6c38>] xe_bo_move+0x324/0x930 [xe]
> [ 23.509387] [<ffff800002209468>] ttm_bo_handle_move_mem+0xd0/0x194 [ttm]
> [ 23.509392] [<ffff800002209ebc>] ttm_bo_validate+0xd4/0x1cc [ttm]
> [ 23.509396] [<ffff80000220a138>] ttm_bo_init_reserved+0x184/0x1dc [ttm]
> [ 23.509399] [<ffff8000024e7840>] ___xe_bo_create_locked+0x1e8/0x3d4 [xe]
> [ 23.509445] [<ffff8000024e7cf8>] __xe_bo_create_locked+0x2cc/0x390 [xe]
> [ 23.509489] [<ffff8000024e7e98>] xe_bo_create_user+0x34/0xe4 [xe]
> [ 23.509533] [<ffff8000024e875c>] xe_gem_create_ioctl+0x154/0x4d8 [xe]
> [ 23.509578] [<9000000001062784>] drm_ioctl_kernel+0xe0/0x14c
> [ 23.509582] [<9000000001062c10>] drm_ioctl+0x420/0x5f4
> [ 23.509585] [<ffff8000024ea778>] xe_drm_ioctl+0x64/0xac [xe]
> [ 23.509630] [<9000000000653504>] sys_ioctl+0x2b8/0xf98
> [ 23.509634] [<90000000017f684c>] do_syscall+0xa0/0x140
> [ 23.509637] [<9000000000241e38>] handle_syscall+0xb8/0x158
> [ 23.509640]
> [ 23.509644] ---[ end trace 0000000000000000 ]---
>
> Revise calls to `xe_res_dma()' and `xe_res_cursor()' to use
> `XE_PTE_MASK' (12) and `SZ_4K' to fix this potentially confused use of
> `PAGE_SIZE' in relevant code.
>
> Cc: stable@...r.kernel.org
> Fixes: e89b384cde62 ("drm/xe/migrate: Update emit_pte to cope with a size level than 4k")
> Tested-by: Mingcong Bai <jeffbai@...c.io>
> Tested-by: Haien Liang <27873200@...com>
> Tested-by: Shirong Liu <lsr1024@...com>
> Tested-by: Haofeng Wu <s2600cw2@....com>
> Link: https://github.com/FanFansfan/loongson-linux/commit/22c55ab3931c32410a077b3ddb6dca3f28223360
> Co-developed-by: Shang Yatsen <429839446@...com>
> Signed-off-by: Shang Yatsen <429839446@...com>
> Signed-off-by: Mingcong Bai <jeffbai@...c.io>
> ---
> drivers/gpu/drm/xe/xe_migrate.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
> index 278bc96cf593d8a0b01003df26297c5a92a71c78..dd5d95a45b976010e718e074dd988c84253fb9fb 100644
> --- a/drivers/gpu/drm/xe/xe_migrate.c
> +++ b/drivers/gpu/drm/xe/xe_migrate.c
> @@ -593,7 +593,7 @@ static void emit_pte(struct xe_migrate *m,
> u64 addr, flags = 0;
> bool devmem = false;
>
> - addr = xe_res_dma(cur) & PAGE_MASK;
> + addr = xe_res_dma(cur) & ~XE_PTE_MASK;
> if (is_vram) {
> if (vm->flags & XE_VM_FLAG_64K) {
> u64 va = cur_ofs * XE_PAGE_SIZE / 8;
> @@ -614,7 +614,7 @@ static void emit_pte(struct xe_migrate *m,
> bb->cs[bb->len++] = lower_32_bits(addr);
> bb->cs[bb->len++] = upper_32_bits(addr);
>
> - xe_res_next(cur, min_t(u32, size, PAGE_SIZE));
> + xe_res_next(cur, min_t(u32, size, SZ_4K));
Nit: s/SZ_4K/XE_PAGE_SIZE
Otherwise LGTM.
Also, I believe someone at Intel will need to submit this series for CI,
as I don't think you are on the approved list to trigger our CI (new WIP
polciy). I'll take care of that and see if we can get you added to the
list.
Matt
> cur_ofs += 8;
> }
> }
>
> --
> 2.48.1
>
>
Powered by blists - more mailing lists