From 873ce330a7c606bfa806cdd5bf5f2a59ab5da05a Mon Sep 17 00:00:00 2001 From: Alexander Orzechowski Date: Sun, 28 Jan 2024 17:50:18 -0500 Subject: [PATCH] drm/monitor: Remove primary_drm This field is not used anymore. This also gives us the opportunity to clean up backend autocreation. --- backend/backend.c | 31 ++++++++++++------------------- backend/drm/monitor.c | 14 +------------- include/backend/drm/monitor.h | 5 +---- 3 files changed, 14 insertions(+), 36 deletions(-) diff --git a/backend/backend.c b/backend/backend.c index 9d1b9b754..7decc4ed6 100644 --- a/backend/backend.c +++ b/backend/backend.c @@ -240,23 +240,23 @@ static struct wlr_backend *attempt_headless_backend(struct wl_event_loop *loop) return backend; } -static struct wlr_backend *attempt_drm_backend(struct wlr_backend *backend, struct wlr_session *session) { +static bool attempt_drm_backend(struct wlr_backend *backend, struct wlr_session *session) { #if WLR_HAS_DRM_BACKEND struct wlr_device *gpus[8]; ssize_t num_gpus = wlr_session_find_gpus(session, 8, gpus); if (num_gpus < 0) { wlr_log(WLR_ERROR, "Failed to find GPUs"); - return NULL; + return false; } if (num_gpus == 0) { wlr_log(WLR_ERROR, "Found 0 GPUs, cannot create backend"); - return NULL; + return false; } else { wlr_log(WLR_INFO, "Found %zu GPUs", num_gpus); } - struct wlr_backend *primary_drm = NULL; + bool ok = false; for (size_t i = 0; i < (size_t)num_gpus; ++i) { struct wlr_backend *drm = wlr_drm_backend_create(session, gpus[i]); if (!drm) { @@ -264,22 +264,20 @@ static struct wlr_backend *attempt_drm_backend(struct wlr_backend *backend, stru continue; } - if (!primary_drm) { - primary_drm = drm; - } - wlr_multi_backend_add(backend, drm); + ok = true; } - if (!primary_drm) { + + if (!ok) { wlr_log(WLR_ERROR, "Could not successfully create backend on any GPU"); - return NULL; + return false; } if (getenv("WLR_DRM_DEVICES") == NULL) { - drm_backend_monitor_create(backend, primary_drm, session); + drm_backend_monitor_create(backend, session); } - return primary_drm; + return true; #else wlr_log(WLR_ERROR, "Cannot create DRM backend: disabled at compile-time"); return NULL; @@ -319,7 +317,7 @@ static bool attempt_backend_by_name(struct wl_event_loop *loop, backend = attempt_libinput_backend(*session_ptr); } else { // attempt_drm_backend() adds the multi drm backends itself - return attempt_drm_backend(multi, *session_ptr) != NULL; + return attempt_drm_backend(multi, *session_ptr); } } else { wlr_log(WLR_ERROR, "unrecognized backend '%s'", name); @@ -423,16 +421,11 @@ struct wlr_backend *wlr_backend_autocreate(struct wl_event_loop *loop, goto error; } - struct wlr_backend *primary_drm = attempt_drm_backend(multi, session); - if (primary_drm == NULL) { + if (!attempt_drm_backend(multi, session)) { wlr_log(WLR_ERROR, "Failed to open any DRM device"); goto error; } - if (!auto_backend_monitor_create(multi, primary_drm)) { - goto error; - } - success: if (session_ptr != NULL) { *session_ptr = session; diff --git a/backend/drm/monitor.c b/backend/drm/monitor.c index c01f9ad57..6e5a6376d 100644 --- a/backend/drm/monitor.c +++ b/backend/drm/monitor.c @@ -7,7 +7,6 @@ static void drm_backend_monitor_destroy(struct wlr_drm_backend_monitor* monitor) { wl_list_remove(&monitor->session_add_drm_card.link); wl_list_remove(&monitor->session_destroy.link); - wl_list_remove(&monitor->primary_drm_destroy.link); wl_list_remove(&monitor->multi_destroy.link); free(monitor); } @@ -49,12 +48,6 @@ static void handle_session_destroy(struct wl_listener *listener, void *data) { drm_backend_monitor_destroy(backend_monitor); } -static void handle_primary_drm_destroy(struct wl_listener *listener, void *data) { - struct wlr_drm_backend_monitor *backend_monitor = - wl_container_of(listener, backend_monitor, primary_drm_destroy); - drm_backend_monitor_destroy(backend_monitor); -} - static void handle_multi_destroy(struct wl_listener *listener, void *data) { struct wlr_drm_backend_monitor *backend_monitor = wl_container_of(listener, backend_monitor, multi_destroy); @@ -62,8 +55,7 @@ static void handle_multi_destroy(struct wl_listener *listener, void *data) { } struct wlr_drm_backend_monitor *drm_backend_monitor_create( - struct wlr_backend *multi, struct wlr_backend *primary_drm, - struct wlr_session *session) { + struct wlr_backend *multi, struct wlr_session *session) { struct wlr_drm_backend_monitor *monitor = calloc(1, sizeof(*monitor)); if (!monitor) { wlr_log_errno(WLR_ERROR, "Allocation failed"); @@ -71,7 +63,6 @@ struct wlr_drm_backend_monitor *drm_backend_monitor_create( } monitor->multi = multi; - monitor->primary_drm = primary_drm; monitor->session = session; monitor->session_add_drm_card.notify = handle_add_drm_card; @@ -80,9 +71,6 @@ struct wlr_drm_backend_monitor *drm_backend_monitor_create( monitor->session_destroy.notify = handle_session_destroy; wl_signal_add(&session->events.destroy, &monitor->session_destroy); - monitor->primary_drm_destroy.notify = handle_primary_drm_destroy; - wl_signal_add(&primary_drm->events.destroy, &monitor->primary_drm_destroy); - monitor->multi_destroy.notify = handle_multi_destroy; wl_signal_add(&multi->events.destroy, &monitor->multi_destroy); diff --git a/include/backend/drm/monitor.h b/include/backend/drm/monitor.h index 518171932..06b182a9f 100644 --- a/include/backend/drm/monitor.h +++ b/include/backend/drm/monitor.h @@ -8,17 +8,14 @@ */ struct wlr_drm_backend_monitor { struct wlr_backend *multi; - struct wlr_backend *primary_drm; struct wlr_session *session; struct wl_listener multi_destroy; - struct wl_listener primary_drm_destroy; struct wl_listener session_destroy; struct wl_listener session_add_drm_card; }; struct wlr_drm_backend_monitor *drm_backend_monitor_create( - struct wlr_backend *multi, struct wlr_backend *primary_drm, - struct wlr_session *session); + struct wlr_backend *multi, struct wlr_session *session); #endif