aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2021-06-15 09:54:29 +0200
committerKenny Levinsen <kl@kl.wtf>2021-06-17 00:27:12 +0200
commitfb933d32048de617fdfe5e6567e11f296e20f4fd (patch)
tree1fc854e9a6a06afc2d988885f0b64b24782fbbeb
parent6c3d080e25e56404228ad7704eed43e40fa0c623 (diff)
backend/session: use drmIsKMS
This moves the magic incantation into libdrm and is clearer. See [1] for details. While at it, fixup the doc comment and improve logging. [1]: https://gitlab.freedesktop.org/mesa/drm/-/commit/523b3658aa8efa746417e916c987de23740ce313
-rw-r--r--backend/session/session.c25
-rw-r--r--meson.build2
2 files changed, 7 insertions, 20 deletions
diff --git a/backend/session/session.c b/backend/session/session.c
index 71fe5166..f87de22d 100644
--- a/backend/session/session.c
+++ b/backend/session/session.c
@@ -337,9 +337,8 @@ bool wlr_session_change_vt(struct wlr_session *session, unsigned vt) {
return libseat_switch_session(session->seat_handle, vt) == 0;
}
-/* Tests if 'path' is KMS compatible by trying to open it.
- * It leaves the open device in *fd_out it it succeeds.
- */
+/* Tests if 'path' is KMS compatible by trying to open it. Returns the opened
+ * device on success. */
static struct wlr_device *open_if_kms(struct wlr_session *restrict session,
const char *restrict path) {
if (!path) {
@@ -351,25 +350,13 @@ static struct wlr_device *open_if_kms(struct wlr_session *restrict session,
return NULL;
}
- // The kernel errors out with EOPNOTSUPP if DRIVER_MODESET isn't set
- drmModeRes *res = drmModeGetResources(dev->fd);
- if (!res) {
- if (errno != EOPNOTSUPP) {
- wlr_log_errno(WLR_ERROR, "drmModeGetResources(%s) failed", path);
- }
- goto out_dev;
- }
- if (res->count_crtcs == 0) {
- drmModeFreeResources(res);
- goto out_dev;
+ if (!drmIsKMS(dev->fd)) {
+ wlr_log(WLR_DEBUG, "Ignoring '%s': not a KMS device", path);
+ wlr_session_close_file(session, dev);
+ return NULL;
}
- drmModeFreeResources(res);
return dev;
-
-out_dev:
- wlr_session_close_file(session, dev);
- return NULL;
}
static ssize_t explicit_find_gpus(struct wlr_session *session,
diff --git a/meson.build b/meson.build
index 3dc05bfb..36bf6e8b 100644
--- a/meson.build
+++ b/meson.build
@@ -96,7 +96,7 @@ internal_features = {
wayland_server = dependency('wayland-server', version: '>=1.19')
wayland_client = dependency('wayland-client')
-drm = dependency('libdrm', version: '>=2.4.95')
+drm = dependency('libdrm', version: '>=2.4.105')
gbm = dependency('gbm', version: '>=17.1.0')
libinput = dependency('libinput', version: '>=1.14.0')
xkbcommon = dependency('xkbcommon')