关于 intel xe driver 的问题

目前断断续续地用过一段时间的 intel xe driver,但是在 arrow lake Ultra 7 255h 和 tiger lake i5 1145G7 上都遇到了非常影响体验的问题:

前者是有概率在使用硬件解码的时候(比如看在线视频)的时候系统完全卡死,无法切换tty以及其他操作,后者是在suspend唤醒后的一段时间内操作延迟会变得非常高,wm的所有动画掉帧都非常严重。。而且两者在journalctl里面都找不到明显相关的log,不知道有没有其他人遇到同样问题的或者已经有解决方案了的。。

看了一下journalctl里面有xe相关的log,但是log上的时间和触发卡死的时间又对不上

10月 29 01:02:10 TB14G7PlusIAH kernel: ------------[ cut here ]------------
10月 29 01:02:10 TB14G7PlusIAH kernel: xe 0000:00:02.0: [drm] drm_WARN_ON_ONCE(ret == -110)
10月 29 01:02:10 TB14G7PlusIAH kernel: WARNING: CPU: 8 PID: 113 at drivers/gpu/drm/xe/xe_gt_mcr.c:628 mcr_lock+0x9e/0xb0 [xe]
10月 29 01:02:10 TB14G7PlusIAH kernel: Modules linked in: snd_seq_dummy snd_hrtimer snd_seq rfcomm snd_seq_device tun ccm uinput cmac algif_hash algif_skcipher af_alg bnep vfat fat hid_sensor_als hid_sensor_trigger industrialio_triggered_buffer kfifo_buf hid_sensor_iio_common industrialio intel_ishtp_hid snd_soc_skl_hda_dsp snd_soc_intel_sof_board_helpers snd_sof_probes snd_soc_intel_hda_dsp_common snd_hda_codec_intelhdmi snd_hda_codec_alc269 snd_hda_scodec_component snd_hda_codec_realtek_lib snd_hda_codec_generic snd_soc_dmic snd_hda_intel snd_sof_pci_intel_mtl snd_sof_intel_hda_generic soundwire_intel snd_sof_intel_hda_sdw_bpt snd_sof_intel_hda_common intel_uncore_frequency snd_soc_hdac_hda snd_sof_intel_hda_mlink intel_uncore_frequency_common snd_sof_intel_hda snd_hda_codec_hdmi x86_pkg_temp_thermal soundwire_cadence snd_sof_pci intel_powerclamp snd_sof_xtensa_dsp coretemp snd_sof snd_sof_utils snd_hda_ext_core snd_hda_codec kvm_intel snd_hda_core snd_intel_dspcfg snd_intel_sdw_acpi snd_soc_acpi_intel_match snd_soc_acpi_intel_sdca_quirks
10月 29 01:02:10 TB14G7PlusIAH kernel:  soundwire_generic_allocation kvm snd_soc_acpi snd_hwdep iwlmld soundwire_bus uvcvideo snd_soc_sdca videobuf2_vmalloc snd_soc_core irqbypass processor_thermal_device_pci ucsi_acpi uvc polyval_clmulni snd_compress mac80211 processor_thermal_device typec_ucsi btusb ghash_clmulni_intel videobuf2_memops processor_thermal_wt_hint ac97_bus typec aesni_intel platform_temperature_control videobuf2_v4l2 btrtl snd_pcm_dmaengine hid_multitouch rapl roles lenovo_wmi_gamezone processor_thermal_rfim libarc4 iwlwifi videobuf2_common btintel snd_pcm intel_cstate lenovo_wmi_other processor_thermal_rapl intel_rapl_msr mei_gsc_proxy lenovo_wmi_events lenovo_wmi_helpers intel_lpss_pci snd_timer i2c_i801 e1000e btbcm intel_uncore snd_ctl_led lenovo_wmi_capdata01 think_lmi videodev intel_rapl_common i2c_smbus intel_lpss cfg80211 snd btmtk firmware_attributes_class ptp mei_me lenovo_wmi_hotkey_utilities pcspkr wmi_bmof soundcore processor_thermal_wt_req pps_core crc8 bluetooth mei mc i2c_mux idma64 intel_ish_ipc
10月 29 01:02:10 TB14G7PlusIAH kernel:  processor_thermal_power_floor intel_pmc_core processor_thermal_mbox intel_vpu intel_ishtp thunderbolt igen6_edac ideapad_laptop int3403_thermal mousedev pmt_telemetry int340x_thermal_zone platform_profile pmt_discovery joydev pmt_class i2c_hid_acpi rfkill intel_hid i2c_hid int3400_thermal intel_pmc_ssram_telemetry sparse_keymap pinctrl_meteorlake acpi_thermal_rel acpi_pad mac_hid pkcs8_key_parser ntsync i2c_dev crypto_user loop dm_mod nfnetlink zram 842_decompress 842_compress lz4hc_compress lz4_compress ip_tables x_tables xfs hid_sensor_custom hid_sensor_hub xe drm_ttm_helper drm_suballoc_helper nvme sdhci_pci gpu_sched sdhci_uhs2 nvme_core drm_gpuvm sdhci drm_exec cqhci nvme_keyring drm_gpusvm_helper mmc_core nvme_auth intel_vsec serio_raw i915 i2c_algo_bit drm_buddy video wmi ttm intel_gtt drm_display_helper cec
10月 29 01:02:10 TB14G7PlusIAH kernel: CPU: 8 UID: 0 PID: 113 Comm: kworker/u65:0 Tainted: G     U              6.17.5-arch1-1 #1 PREEMPT(full)  01c39fc421df2af799dd5e9180b572af860b40c1
10月 29 01:02:10 TB14G7PlusIAH kernel: Tainted: [U]=USER
10月 29 01:02:10 TB14G7PlusIAH kernel: Hardware name: LENOVO 21TK/LNVNB161216, BIOS R6CN23WW 06/12/2025
10月 29 01:02:10 TB14G7PlusIAH kernel: Workqueue: async async_run_entry_fn
10月 29 01:02:10 TB14G7PlusIAH kernel: Sched_ext: bpfland_1.0.17_g8d994512_dirty_x86_64_unknown_linux_gnu (enabled+all), task: runnable_at=-1ms
10月 29 01:02:10 TB14G7PlusIAH kernel: RIP: 0010:mcr_lock+0x9e/0xb0 [xe]
10月 29 01:02:10 TB14G7PlusIAH kernel: Code: 48 8b 5f 50 48 85 db 75 03 48 8b 1f e8 fb e0 86 e5 48 c7 c1 b7 f6 09 c1 48 89 da 48 c7 c7 d5 f6 09 c1 48 89 c6 e8 22 7d d0 e4 <0f> 0b eb 86 0f 1f 00 66 66 2e 0f 1f 84 00 00 00 00 00 90 90 90 90
10月 29 01:02:10 TB14G7PlusIAH kernel: RSP: 0018:ffffcf8cc0563cd0 EFLAGS: 00010246
10月 29 01:02:10 TB14G7PlusIAH kernel: RAX: 0000000000000000 RBX: ffff890042283890 RCX: 0000000000000027
10月 29 01:02:10 TB14G7PlusIAH kernel: RDX: ffff8907a021cfc8 RSI: 0000000000000001 RDI: ffff8907a021cfc0
10月 29 01:02:10 TB14G7PlusIAH kernel: RBP: ffff890044dfc000 R08: 0000000000000000 R09: 00000000ffffffff
10月 29 01:02:10 TB14G7PlusIAH kernel: R10: 0000000000000000 R11: 0000000000000004 R12: ffff890044dfc000
10月 29 01:02:10 TB14G7PlusIAH kernel: R13: 0000000000000001 R14: ffffffffc1062b00 R15: ffff89010af59da0
10月 29 01:02:10 TB14G7PlusIAH kernel: FS:  0000000000000000(0000) GS:ffff8907f7906000(0000) knlGS:0000000000000000
10月 29 01:02:10 TB14G7PlusIAH kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
10月 29 01:02:10 TB14G7PlusIAH kernel: CR2: 000055f20f07c048 CR3: 0000000376424005 CR4: 0000000000f72ef0
10月 29 01:02:10 TB14G7PlusIAH kernel: PKRU: 55555554
10月 29 01:02:10 TB14G7PlusIAH kernel: Call Trace:
10月 29 01:02:10 TB14G7PlusIAH kernel:  <TASK>
10月 29 01:02:10 TB14G7PlusIAH kernel:  xe_gt_mcr_multicast_write+0x22/0x70 [xe cb34284d0997c6df787c6db271e4eb675cc94b1b]
10月 29 01:02:10 TB14G7PlusIAH kernel:  program_pat_mcr+0x53/0xc0 [xe cb34284d0997c6df787c6db271e4eb675cc94b1b]
10月 29 01:02:10 TB14G7PlusIAH kernel:  do_gt_restart+0x28/0x1b0 [xe cb34284d0997c6df787c6db271e4eb675cc94b1b]
10月 29 01:02:10 TB14G7PlusIAH kernel:  xe_gt_resume+0x59/0xe0 [xe cb34284d0997c6df787c6db271e4eb675cc94b1b]
10月 29 01:02:10 TB14G7PlusIAH kernel:  xe_pm_resume+0x174/0x2c0 [xe cb34284d0997c6df787c6db271e4eb675cc94b1b]
10月 29 01:02:10 TB14G7PlusIAH kernel:  ? __pfx_pci_pm_resume+0x10/0x10
10月 29 01:02:10 TB14G7PlusIAH kernel:  dpm_run_callback+0x47/0x150
10月 29 01:02:10 TB14G7PlusIAH kernel:  device_resume+0x15c/0x260
10月 29 01:02:10 TB14G7PlusIAH kernel:  async_resume+0x21/0x30
10月 29 01:02:10 TB14G7PlusIAH kernel:  async_run_entry_fn+0x33/0x140
10月 29 01:02:10 TB14G7PlusIAH kernel:  process_one_work+0x190/0x350
10月 29 01:02:10 TB14G7PlusIAH kernel:  worker_thread+0x2d7/0x410
10月 29 01:02:10 TB14G7PlusIAH kernel:  ? __pfx_worker_thread+0x10/0x10
10月 29 01:02:10 TB14G7PlusIAH kernel:  kthread+0xf9/0x240
10月 29 01:02:10 TB14G7PlusIAH kernel:  ? __pfx_kthread+0x10/0x10
10月 29 01:02:10 TB14G7PlusIAH kernel:  ? __pfx_kthread+0x10/0x10
10月 29 01:02:10 TB14G7PlusIAH kernel:  ret_from_fork+0x1c1/0x1f0
10月 29 01:02:10 TB14G7PlusIAH kernel:  ? __pfx_kthread+0x10/0x10
10月 29 01:02:10 TB14G7PlusIAH kernel:  ret_from_fork_asm+0x1a/0x30
10月 29 01:02:10 TB14G7PlusIAH kernel:  </TASK>
10月 29 01:02:10 TB14G7PlusIAH kernel: ---[ end trace 0000000000000000 ]---
10月 29 01:02:10 TB14G7PlusIAH kernel: random: crng reseeded on system resumption

suspend 后概率卡顿的事情也有遇到过. 一开始以为是充电器功率不够, 但插上原装充电器也仍未缓解.

Raptor Lake 14900HX 核显.

多屏幕环境?我使用 Ultra9 285H

播放在线视频必卡死的问题是一样的,但只有多屏幕环境才会出现 (DP over Type-C) 并且目前没找到好的解决办法。

尝试过使用 linux-drm-tip-git 内核仍会出现卡死问题 。


Suspend 后有时会有卡死问题,但是“操作延迟高”没有遇到过。卡死问题通过在 suspend 前后增加 systemd unit 改变 cpu idle max cstate level 解决。
edit: suspend 前必须允许所有 cstate cpu 无法进入更高(更节能)的 cstate会导致睡眠期间功耗过高。
参考:Intel Graphics

Systemd Unit files:

/etc/systemd/system/pre-sleep.service:

[Unit]
Description=Enable all CPU idle states before sleep
Before=sleep.target

[Service]
Type=simple
ExecStart=/usr/bin/cpupower idle-set -E

[Install]
WantedBy=sleep.target

/etc/systemd/system/post-sleep.service

[Unit]
Description=Disable CPU idle states above C1 after sleep
After=suspend.target hibernate.target

[Service]
Type=simple
ExecStart=/usr/bin/cpupower idle-set -D2

[Install]
WantedBy=suspend.target hibernate.target

/etc/systemd/systemd/sys-idle-disable.service

[Unit]
Description=Disable CPU idle states above C1 when boot
After=graphical.target

[Service]
Type=simple
ExecStart=/usr/bin/cpupower idle-set -D2

[Install]
WantedBy=graphical.target

没有多屏幕环境,我这边 arrow lake 的机器是 thinkbook 14+,然后卡死的问题应该和 suspend 无关(我这边列出的 suspend 后响应慢的问题主要是针对我手上的 tiger lake 的机器),然后看你给出的解决方案是用 cpupower 实现的,切换核显的驱动从 i915 到 xe 会出现这方面的问题吗?还是你的意思是你在 i915 驱动上也会遇到这个问题?

i915 驱动也会遇到卡死问题。限制 cstate 可以解决。

但是 xe driver 的视频编解码导致的卡死问题目前没找到解决方法。

单屏幕环境,你可以先试一下修改 cstate 。兴许能 work

使用硬件解码卡死的问题已经通过升级到 mesa-git 解决

在正常使用一个多小时后仍然出现了卡死的情况。。

同thinkbook 14+, 285H, xe解码也会卡死, 现在退回i915了, 蹲一个解决办法.

我也是DP over Type-C环境.

通过添加启动参数 intel_idle.max_cstate=1 似乎这个问题已经解决了,但实际上还是有freezing的问题,不过不像之前只能硬重启,这次能切换tty,并且好像切换回来之后也会自己恢复,journalctl里面的相关的log为

11月 03 20:54:13 TB14G7PlusIAH kernel: xe 0000:00:02.0: [drm] GT1: Check job timeout: seqno=9321, lrc_seqno=9321, guc_id=14, not started
11月 03 20:54:18 TB14G7PlusIAH kernel: xe 0000:00:02.0: [drm] GT1: Check job timeout: seqno=9321, lrc_seqno=9321, guc_id=14, not started
11月 03 20:54:24 TB14G7PlusIAH kernel: xe 0000:00:02.0: [drm] GT1: Check job timeout: seqno=9321, lrc_seqno=9321, guc_id=14, not started
11月 03 20:54:24 TB14G7PlusIAH kernel: xe 0000:00:02.0: [drm] GT1: Timedout job: seqno=9321, lrc_seqno=9321, guc_id=14, flags=0x0 in qutebrowser [1652]

遗憾,在播放了将近两个小时的视频后还是出现了完全卡死的情况。。

第二个问题已经通过启动参数 ahci.mobile_lpm_policy=1 解决

应该是 intel_idle.max_cstate=1 这个参数的作用。。

另一个(大概并不通用的)解决办法就是在bios里设置待机模式为s3,还能在待机的时候更省电一点。。

卡死的问题也已经解决了,方法是在bios里面关闭sagv,不过我没有多屏幕环境,无法确认这种情况下是否能通过同样的方式解决。。