aboutsummaryrefslogtreecommitdiff
path: root/backend/session
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 /backend/session
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
Diffstat (limited to 'backend/session')
-rw-r--r--backend/session/session.c25
1 files changed, 6 insertions, 19 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,