You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
7.4 KiB
149 lines
7.4 KiB
From 0131864b339dc0cc5f23def75e6caa5872c9ed11 Mon Sep 17 00:00:00 2001 |
|
From: Ray Strode <rstrode@redhat.com> |
|
Date: Mon, 7 Mar 2022 10:16:39 -0500 |
|
Subject: [PATCH 4/4] data: Use latest upstream udev rules |
|
|
|
This pulls in the latest udev rule from upstream that gives us |
|
wayland on nvidia when we can, and disables wayland on nvidia |
|
when we should. |
|
|
|
It also pulls in the latest handling for passthrough gpus. |
|
--- |
|
data/61-gdm.rules.in | 139 +++++++++++++++++++++++++++++++++++++++++-- |
|
1 file changed, 135 insertions(+), 4 deletions(-) |
|
|
|
diff --git a/data/61-gdm.rules.in b/data/61-gdm.rules.in |
|
index b1da191f..5dae00ea 100644 |
|
--- a/data/61-gdm.rules.in |
|
+++ b/data/61-gdm.rules.in |
|
@@ -1,6 +1,123 @@ |
|
+# identify virtio graphics cards to find passthrough setups |
|
+SUBSYSTEM!="virtio", GOTO="gdm_virtio_device_end" |
|
+ACTION!="add", GOTO="gdm_virtio_device_end" |
|
+ATTR{vendor}=="0x1af4", ATTR{device}=="0x0010", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-virtual-gpu", ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}="1", GOTO="gdm_virtio_device_end" |
|
+LABEL="gdm_virtio_device_end" |
|
+ |
|
+SUBSYSTEM!="pci", GOTO="gdm_pci_device_end" |
|
+ACTION!="bind", ACTION!="add", GOTO="gdm_pci_device_end" |
|
+ |
|
+# identify virtio graphics cards to find passthrough setups |
|
+# cirrus |
|
+ATTR{vendor}=="0x1013", ATTR{device}=="0x00b8", ATTR{subsystem_vendor}=="0x1af4", ATTR{subsystem_device}=="0x1100", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-virtual-gpu", ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}="1", GOTO="gdm_pci_device_end" |
|
+# vga |
|
+ATTR{vendor}=="0x1b36", ATTR{device}=="0x0100", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-virtual-gpu", ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}="1", GOTO="gdm_pci_device_end" |
|
+# qxl |
|
+ATTR{vendor}=="0x1234", ATTR{device}=="0x1111", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-virtual-gpu", ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}="1", GOTO="gdm_pci_device_end" |
|
+ |
|
# disable Wayland on Hi1710 chipsets |
|
-ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", RUN+="@libexecdir@/gdm-runtime-config set daemon WaylandEnable false" |
|
-# disable Wayland when using the proprietary nvidia driver |
|
-DRIVER=="nvidia", RUN+="@libexecdir@/gdm-runtime-config set daemon WaylandEnable false" |
|
+ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", GOTO="gdm_disable_wayland" |
|
+ |
|
+LABEL="gdm_pci_device_end" |
|
+ |
|
# disable Wayland if modesetting is disabled |
|
-IMPORT{cmdline}="nomodeset", RUN+="@libexecdir@/gdm-runtime-config set daemon WaylandEnable false" |
|
+KERNEL!="card[0-9]*", GOTO="gdm_nomodeset_end" |
|
+SUBSYSTEM!="drm", GOTO="gdm_nomodeset_end" |
|
+IMPORT{parent}="GDM_MACHINE_HAS_VIRTUAL_GPU" |
|
+ENV{GDM_MACHINE_HAS_VIRTUAL_GPU}!="1", RUN+="/usr/bin/touch /run/udev/gdm-machine-has-hardware-gpu" |
|
+# but keep it enabled for simple framebuffer drivers |
|
+DRIVERS=="simple-framebuffer", GOTO="gdm_nomodeset_end" |
|
+IMPORT{cmdline}="nomodeset", GOTO="gdm_disable_wayland" |
|
+LABEL="gdm_nomodeset_end" |
|
+ |
|
+# The vendor nvidia driver has multiple modules that need to be loaded before GDM can make an |
|
+# informed choice on which way to proceed, so force GDM to wait until NVidia's modules are |
|
+# loaded before starting up. |
|
+KERNEL!="nvidia", GOTO="gdm_nvidia_end" |
|
+SUBSYSTEM!="module", GOTO="gdm_nvidia_end" |
|
+ACTION!="add", GOTO="gdm_nvidia_end" |
|
+RUN+="/usr/bin/touch /run/udev/gdm-machine-has-vendor-nvidia-driver" |
|
+ |
|
+# Check if suspend/resume services necessary for working wayland support is available |
|
+TEST{0711}!="/usr/bin/nvidia-sleep.sh", GOTO="gdm_disable_wayland" |
|
+TEST{0711}!="/usr/lib/systemd/system-sleep/nvidia", GOTO="gdm_disable_wayland" |
|
+IMPORT{program}="/bin/sh -c \"sed -e 's/: /=/g' -e 's/\([^[:upper:]]\)\([[:upper:]]\)/\1_\2/g' -e 's/[[:lower:]]/\U&/g' -e 's/^/NVIDIA_/' /proc/driver/nvidia/params\"" |
|
+ENV{NVIDIA_PRESERVE_VIDEO_MEMORY_ALLOCATIONS}!="1", GOTO="gdm_disable_wayland" |
|
+IMPORT{program}="/bin/sh -c 'echo NVIDIA_HIBERNATE=`systemctl is-enabled nvidia-hibernate`'" |
|
+ENV{NVIDIA_HIBERNATE}!="enabled", GOTO="gdm_disable_wayland" |
|
+IMPORT{program}="/bin/sh -c 'echo NVIDIA_RESUME=`systemctl is-enabled nvidia-resume`'" |
|
+ENV{NVIDIA_RESUME}!="enabled", GOTO="gdm_disable_wayland" |
|
+IMPORT{program}="/bin/sh -c 'echo NVIDIA_SUSPEND=`systemctl is-enabled nvidia-suspend`'" |
|
+ENV{NVIDIA_SUSPEND}!="enabled", GOTO="gdm_disable_wayland" |
|
+LABEL="gdm_nvidia_end" |
|
+ |
|
+# If this machine has an internal panel, take note, since it's probably a laptop |
|
+# FIXME: It could be "ghost connectors" make this pop positive for some workstations |
|
+# in the wild. If so, we may have to fallback to looking at the chassis type from |
|
+# dmi data or acpi |
|
+KERNEL!="card[0-9]-eDP-*", GOTO="gdm_laptop_check_end" |
|
+SUBSYSTEM!="drm", GOTO="gdm_laptop_check_end" |
|
+ACTION!="add", GOTO="gdm_laptop_check_end" |
|
+RUN+="/usr/bin/touch /run/udev/gdm-machine-is-laptop" |
|
+GOTO="gdm_hybrid_nvidia_laptop_check" |
|
+LABEL="gdm_laptop_check_end" |
|
+ |
|
+# If this is a hybrid graphics setup, take note |
|
+KERNEL!="card[1-9]*", GOTO="gdm_hybrid_graphics_check_end" |
|
+KERNEL=="card[1-9]-*", GOTO="gdm_hybrid_graphics_check_end" |
|
+SUBSYSTEM!="drm", GOTO="gdm_hybrid_graphics_check_end" |
|
+ACTION!="add", GOTO="gdm_hybrid_graphics_check_end" |
|
+RUN+="/usr/bin/touch /run/udev/gdm-machine-has-hybrid-graphics" |
|
+LABEL="gdm_hybrid_graphics_check_end" |
|
+ |
|
+# If this is a hybrid graphics laptop with vendor nvidia driver, disable wayland |
|
+LABEL="gdm_hybrid_nvidia_laptop_check" |
|
+TEST!="/run/udev/gdm-machine-is-laptop", GOTO="gdm_hybrid_nvidia_laptop_check_end" |
|
+TEST!="/run/udev/gdm-machine-has-hybrid-graphics", GOTO="gdm_hybrid_nvidia_laptop_check_end" |
|
+TEST!="/run/udev/gdm-machine-has-vendor-nvidia-driver", GOTO="gdm_hybrid_nvidia_laptop_check_end" |
|
+GOTO="gdm_disable_wayland" |
|
+LABEL="gdm_hybrid_nvidia_laptop_check_end" |
|
+ |
|
+# Disable wayland in situation where we're in a guest with a virtual gpu and host passthrough gpu |
|
+LABEL="gdm_virt_passthrough_check" |
|
+TEST!="/run/udev/gdm-machine-has-hybrid-graphics", GOTO="gdm_virt_passthrough_check_end" |
|
+TEST!="/run/udev/gdm-machine-has-virtual-gpu", GOTO="gdm_virt_passthrough_check_end" |
|
+TEST!="/run/udev/gdm-machine-has-hardware-gpu", GOTO="gdm_virt_passthrough_check_end" |
|
+GOTO="gdm_disable_wayland" |
|
+LABEL="gdm_virt_passthrough_check_end" |
|
+ |
|
+# Disable wayland when there are multiple virtual gpus |
|
+LABEL="gdm_virt_multi_gpu_check" |
|
+TEST!="/run/udev/gdm-machine-has-hybrid-graphics", GOTO="gdm_virt_multi_gpu_check_end" |
|
+TEST!="/run/udev/gdm-machine-has-virtual-gpu", GOTO="gdm_virt_multi_gpu_check_end" |
|
+TEST=="/run/udev/gdm-machine-has-hardware-gpu", GOTO="gdm_virt_multi_gpu_check_end" |
|
+LABEL="gdm_virt_multi_gpu_check_end" |
|
+ |
|
+# Disable wayland when nvidia modeset is disabled or when drivers are a lower |
|
+# version than 470, |
|
+# For versions above 470 but lower than 510 prefer Xorg, |
|
+# Above 510, prefer Wayland. |
|
+KERNEL!="nvidia_drm", GOTO="gdm_nvidia_drm_end" |
|
+SUBSYSTEM!="module", GOTO="gdm_nvidia_drm_end" |
|
+ACTION!="add", GOTO="gdm_nvidia_drm_end" |
|
+# disable wayland if nvidia-drm modeset is not enabled |
|
+ATTR{parameters/modeset}!="Y", GOTO="gdm_disable_wayland" |
|
+# disable wayland for nvidia drivers versions lower than 470 |
|
+ATTR{version}=="4[0-6][0-9].*|[0-3][0-9][0-9].*|[0-9][0-9].*|[0-9].*", GOTO="gdm_disable_wayland" |
|
+# For nvidia drivers versions Above 510, keep Wayland by default |
|
+ATTR{version}=="[5-9][1-9][0-9].*", GOTO="gdm_end" |
|
+# For nvidia drivers versions 470-495, prefer Xorg by default |
|
+GOTO="gdm_prefer_xorg" |
|
+LABEL="gdm_nvidia_drm_end" |
|
+ |
|
+GOTO="gdm_end" |
|
+ |
|
+LABEL="gdm_prefer_xorg" |
|
+RUN+="@libexecdir@/gdm-runtime-config set daemon PreferredDisplayServer xorg" |
|
+GOTO="gdm_end" |
|
+ |
|
+LABEL="gdm_disable_wayland" |
|
+RUN+="@libexecdir@/gdm-runtime-config set daemon WaylandEnable false" |
|
+GOTO="gdm_end" |
|
+ |
|
+LABEL="gdm_end" |
|
-- |
|
2.34.1 |
|
|
|
|