From 88d042ec498b0edf480d36f737da93160b2c9a2c Mon Sep 17 00:00:00 2001
From: Dan Robertson <dan.robertson@anidata.org>
Date: Tue, 24 Oct 2017 22:35:31 +0000
Subject: [PATCH] nvidia: Validate the nvidia_drm module options

When the proprietary nvidia driver is used, ensure the modeset option is
set instead of checking /proc/cmdline for nvidia-drm.modeset=1.
---
 sway/main.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/sway/main.c b/sway/main.c
index 6d13955c..cc9147b8 100644
--- a/sway/main.c
+++ b/sway/main.c
@@ -135,6 +135,29 @@ void detect_proprietary() {
 				"You need nvidia, nvidia_modeset, nvidia_uvm, and nvidia_drm."
 				"\x1B[0m\n");
 		}
+#ifdef __linux__
+		f = fopen("/sys/module/nvidia_drm/parameters/modeset", "r");
+		if (f) {
+			char *line = read_line(f);
+			if (line && strstr(line, "Y")) {
+				// nvidia-drm.modeset is set to 0
+				fprintf(stderr, "\x1B[1;31mWarning: You must load "
+					"nvidia-drm with the modeset option on to use "
+					"the proprietary driver. Consider adding "
+					"nvidia-drm.modeset=1 to your kernel command line "
+					"parameters.\x1B[0m\n");
+			}
+			fclose(f);
+			free(line);
+		} else {
+			// nvidia-drm.modeset is not set
+			fprintf(stderr, "\x1B[1;31mWarning: You must load "
+				"nvidia-drm with the modeset option on to use "
+				"the proprietary driver. Consider adding "
+				"nvidia-drm.modeset=1 to your kernel command line "
+				"parameters.\x1B[0m\n");
+		}
+#else
 		f = fopen("/proc/cmdline", "r");
 		if (f) {
 			char *line = read_line(f);
@@ -146,6 +169,7 @@ void detect_proprietary() {
 			fclose(f);
 			free(line);
 		}
+#endif
 	}
 }