Public bug reported:

[ Impact ]

Some newer AMD APUs don't claim they are VGA class device, but a PCI
display:

```
c4:00.0 Display controller [0380]: Advanced Micro Devices, Inc. [AMD/ATI] Strix 
[Radeon 880M / 890M] [1002:150e] (rev d1)
        Subsystem: Dell Device [1028:0d80]
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B- DisINTx+
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- 
<MAbort- >SERR- <PERR- INTx-
        Latency: 0
        Interrupt: pin A routed to IRQ 149
        IOMMU group: 18
        Region 0: Memory at 5800000000 (64-bit, prefetchable) [size=256M]
        Region 2: Memory at b0000000 (64-bit, prefetchable) [size=2M]
        Region 4: I/O ports at 1000 [size=256]
        Region 5: Memory at b0500000 (32-bit, non-prefetchable) [size=512K]
        Capabilities: <access denied>
        Kernel driver in use: amdgpu
        Kernel modules: amdgp
```

There used to be a polling logic in GDM that expects VGA device to
appear. On platforms with those newer APUs, The polling logic simply
times out, leading to a 10-second delay before GDM can fully initialize
every time the system boots.

When this happens, if the debug is enabled in the /etc/gdm3/custom.conf:

```
[debug]
# Uncomment the line below to turn on debugging
# More verbose logs
# Additionally lets the X server dump core if it crashes
Enable=true
```

journalctl shows the following log pattern on those platforms:

```
$ journalctl -b 0 -u gdm -o short-monotonic
...
[    5.564409] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: Found secondary 
PCI graphics adapter, not proceeding yet.
[    5.564465] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: Found secondary 
PCI graphics adapter, not proceeding yet.
[    5.564466] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: udev has not 
settled enough for graphics.
[    5.564526] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: udev is still 
settling, so not creating display yet
[    5.564528] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: Getting session 
type (prefers wayland, falling back: no)
[    5.564548] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: New displays on 
seat0 will use wayland
[    5.564549] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: seat0 doesn't 
yet support graphics.  Waiting 10 seconds to try again.
[    5.564574] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: received VT 
change event
[    5.564601] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: VT is 1 at 
startup
[   16.011122] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: display for seat 
seat0 requested
[   16.011205] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: udev timed out, 
proceeding anyway.
[   16.011226] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: System supports 
graphics
[   16.011230] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: Getting session 
type (prefers wayland, falling back: no)
[   16.011250] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: New displays on 
seat0 will use wayland
[   16.011252] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: wayland login 
display for seat seat0 requested
[   16.011258] ubuntu gdm3[2583]: Gdm: GdmLocalDisplayFactory: Adding display 
on seat seat0
...
```

[ Fix ]

====== GDM =======

Upstream GDM has had this fixed in commit 85982d61, by adding extra
logic to check the "boot_display" sysfs attribute. The changed is merged
in Gnome 50:

- https://gitlab.gnome.org/GNOME/gdm/-/merge_requests/343

Resolute already has it. To fix the timeout issue it needs to be brought
back to Questing and Noble.

== Linux Kernel ==

For this change to work, the kernel needs to support boot_display sysfs
ABI:

-  https://docs.kernel.org/admin-guide/abi-testing.html#abi-sys-class-
drm-boot-display

This is included in kernel v6.19, in the following patch series:

- https://lore.kernel.org/r/[email protected]

Currently no generic kernel has it yet, but for the upcoming 7.0-based
kernel this will be included. For kernels not supporting this sysfs
attribite, it simply falls back to the original behavior.

[ Tests ]

Boot the system with udpated package installed.

On platforms where the GPU is NOT recognized as a VGA class (e.g. Strix, 
Karaken, Strix Halo)
    - Make sure that the above 10-second delay doesn't appear in the journal.

On other platforms:
    - Run basic graphic test like `glxinfo -B`, make sure display and rendering 
work properly.

On all platforms:
    - Make sure gdm works properly on kernels without the boot_display sysfs 
attribute.

[ Where problems could occur ]

For platforms running with kernels that don't have this boot_display
sysfs ABI, even with this patch, this 10 second delay will still exist.
The patch must not regress the behavior of GDM on those kernel.

** Affects: gdm3 (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: originate-from-2146375

** Tags added: originate-from-2146375

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2146768

Title:
  Avoid 10-second timeout on platforms where GPU is not advertised as
  VGA class

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/2146768/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to