Repository navigation
Conversation
1 task done
A DRINODE the container does not have still started glamor on it. Under the NVIDIA runtime, which provides the driver's libraries but no /dev/dri, Xvfb then came up on NVIDIA's EGL and crashed in libnvidia-egl-gbm when it probed GLX.
A runtime can put the NVIDIA driver's own libEGL ahead of glvnd's, as the reporter's in linuxserver/docker-chromium#78 does (its backtrace runs from swrast_dri.so straight into libEGL_nvidia, with no glvnd frame). The pin to Mesa's EGL vendor is glvnd's, so it never reaches that library: the GLX probe still asks NVIDIA's EGL for the GBM platform's default display, and with no /dev/dri libnvidia-egl-gbm crashes. An empty __EGL_EXTERNAL_PLATFORM_CONFIG_FILENAMES, which libEGL_nvidia reads itself, leaves NVIDIA's EGL without its GBM platform, so it answers the probe with no display and Xvfb keeps Mesa's configs. In ghcr.io/linuxserver/chromium:latest on a GTX 1080 Ti (580.178.04), with /dev/dri hidden and NVIDIA's EGL handed out whatever the pin says, Xvfb crashes on master and serves with this; with the pin in effect it serves either way.
Member
|
implemented in dev |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description:
svc-xorgtakesDRINODEonly when that node exists in the container. Otherwise it logs so, and Xvfb starts without-glamor -dri, with EGL pinned to Mesa as for any software server. A software server also loads no EGL external platform (an empty__EGL_EXTERNAL_PLATFORM_CONFIG_FILENAMES), so it cannot reach NVIDIA's GBM platform where the pin does not apply.Both hunks apply unchanged to
ubunturesolute,arch,fedora44andkali.devalready carries the first, and the second applies there with an offset.alpine324takes the first and has no glvnd pin for the second.Benefits of this PR and context:
This is the crash in linuxserver/docker-chromium#78. The NVIDIA runtime gives the container the driver's libraries but no
/dev/dri, andDRINODEnames a render node that is not there. Xvfb still starts glamor on it and comes up on NVIDIA's EGL. When it then probes GLX,libnvidia-egl-gbmfinds no DRM device and reads a pointer thatdrmGetDevices2never set, so the X server crash-loops and no display comes up. Before the zero-copy update, the X server did not start glamor, so the same compose worked. The library fix is NVIDIA/egl-gbm#9, not merged yet.The reporter's runtime also puts the driver's own libEGL ahead of glvnd's: their backtrace runs from
swrast_dri.sostraight intolibEGL_nvidia, with no glvnd frame between, where a glvnd stack showslibEGL.so.1there. glvnd's pin to Mesa never reaches such a library, so even a software server, with noDRINODEat all, crashes the same way.libEGL_nvidiareads__EGL_EXTERNAL_PLATFORM_CONFIG_FILENAMESitself, and with it empty NVIDIA's EGL has no GBM platform, answers the probe with no display, and Xvfb keeps Mesa's configs.How Has This Been Tested?
On a Tesla P100 (driver 580.178), with
ghcr.io/linuxserver/chromium:latest(b1ee1dc8-ls55, whosesvc-xorg/runis identical to master's), under the NVIDIA runtime, with the patched script mounted over the stock one and a headless Chromium connected to the web client:/dev/dri,DRINODEandDRI_NODEset to/dev/dri/renderD129): stock crash-loops with the issue's backtrace (libnvidia-egl-gbm.so.1+0x34a5). With the patch, the display comes up and the stream encodes on NVENC H.264.ghcr.io/linuxserver/chromium:latest, with/dev/drihidden from Xvfb and glvnd made to hand out NVIDIA's EGL whatever the pin says: master's software server crashes inlibnvidia-egl-gbm; with the second commit it serves. With the pin in effect it serves either way. The same change is in the Selkies image as selkies-project/selkies@6addb643, where it also held on an RTX 4090 with driver 595.71.05, the reporter's driver branch.Source / References: