Screen shake in kernel 6.6.1 and 6.7.0
Running the latest mainline kernel 6.7.0 on arch linux, my external monitor flickers if both the external monitor and the internal monitor are on, as can be seen in the attached video.
To reproduce
Before booting the system, I put my laptop in a Dell docking station, and connect my monitor (a samsung F24T350FH) through a displayport to HDMI cable (though it did not appear to make a difference whether I connected it using HDMI to HDMI directly to the PC).
Now boot using a kernel with version 6.6.1 or 6.7.0 (the mainline kernel). Upon reaching TTY the display on the external monitor starts flickering, and running Xorg does not change the issue which can be seen in the video.
Note however that both displays need to be active for the bug to occur; if i disable the internal display in my laptop, the external monitor stops flickering.
The flickering arose every time I booted my computer. I have no other computers running linux.
Information
Uname
Linux 6.7.0-1-mainline #1 SMP PREEMPT_DYNAMIC Mon, 15 Jan 2024 12:04:29 +0000 x86_64 GNU/Linux
PCI
Note that I ran lspci -vnn -d ":*:0300"
00:02.0 VGA compatible controller [0300]: Intel Corporation 4th Gen Core Processor Integrated Graphics Controller [8086:0416] (rev 06) (prog-if 00 [VGA controller])
DeviceName: Onboard IGD
Subsystem: Dell 4th Gen Core Processor Integrated Graphics Controller [1028:05be]
Flags: bus master, fast devsel, latency 0, IRQ 36
Memory at f5800000 (64-bit, non-prefetchable) [size=4M]
Memory at e0000000 (64-bit, prefetchable) [size=256M]
I/O ports at f000 [size=64]
Expansion ROM at 000c0000 [virtual] [disabled] [size=128K]
Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
Capabilities: [d0] Power Management version 2
Capabilities: [a4] PCI Advanced Features
Kernel driver in use: i915
Kernel modules: i915
Laptop model
Dell Latitude E6540
Dmesg
Display info.
Internal laptop display: eDP
External display: HDMI
Window manager: dwm
xrandr --verbose: xrandr.txt
Additional notes
Strangely, it seems that if I run stress -c 1
or in another way make my CPU work, the issue fixes itself, until the CPU idles again.
I tried making sure that it was not a problem with a different program I have, by doing the following:
- I encounter the bug on my kernel after an update.
- I try downgrading and the bug goes away.
- I spin up an old arch-linux ISO with an old kernel, and there was no issue.
- I spin up a brand new arch-linux ISO and the bug occured.
If I disconnect my laptop from the docking station, the kworker process starts hogging CPU, and this forum (https://bbs.archlinux.org/viewtopic.php?id=184913) suggested that I use the command grep . -r /sys/firmware/acpi/interrupts/
to find the largest number of interrupts. gpe13 and gpe0D were very big and growing. However, the flickering issue has stopped. If I disable gpe0D using echo "disable" > /sys/firmware/acpi/interrupts/gpe0D
, the CPU usage drops to nothing and the external screen starts shaking again. I don't know if these issues are at all related.
Bisection
I noticed that kernel v6.5.9 was working, and that kernel v6.6.1 was not, so I ran a bisection. I used the git-repo that comes with the AUR-package linux-git
(https://aur.archlinux.org/packages/linux-git), as per the instructions on the arch-wiki. This rendered the log
and that the commit [v2,13/13] drm/i915/psr: Re-enable PSR1 on hsw/bdw
with id 783d8b80871f6014a5c73182f63e1ec3c6bdfcd2
was the issue.