From 73137ace84bcb3acd156446abcbcf65034ff1f40 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 23 Feb 2021 20:53:50 +0100 Subject: [PATCH] backend/session: fix KMS device filtering As explained in [1], user-space should perform a drmModeGetResources call to figure out whether a device supports KMS. [1]: https://gitlab.freedesktop.org/mesa/drm/-/merge_requests/127 --- backend/session/session.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/backend/session/session.c b/backend/session/session.c index a076543a..cfb69ac2 100644 --- a/backend/session/session.c +++ b/backend/session/session.c @@ -265,12 +265,20 @@ static struct wlr_device *open_if_kms(struct wlr_session *restrict session, return NULL; } - drmVersion *ver = drmGetVersion(dev->fd); - if (!ver) { + // 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; } + drmModeFreeResources(res); - drmFreeVersion(ver); return dev; out_dev: