From fa8ea877d32b8c6d4eb787148cb8d6d0f15aed44 Mon Sep 17 00:00:00 2001 From: Yi Xie Date: Mon, 27 Feb 2023 16:18:46 +0900 Subject: [PATCH] minigbm: Drop DRM master if taken by accident on primary node On display-only DRM devices (e.g. vkms) we have to use primary node for GBM, which is used by cros-camera. However, if cros-camera is started before Chrome, it automatically takes over DRM master via minigbm, blocking Chrome from starting. Since we don't actually need any DRM master ioctls in minigbm (it works on render nodes anyway), we'd like to drop it whenever it's taken by accident. BUG=b:239110721 TEST=On VM with vkms: stop ui -> restart cros-camera -> start ui Change-Id: I66d60210e221dad9450ecd1eea939bd1d7813bbd Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/4290730 Commit-Queue: Yi Xie Tested-by: Yi Xie Reviewed-by: Lepton Wu Reviewed-by: Chia-I Wu --- minigbm_helpers.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/minigbm_helpers.c b/minigbm_helpers.c index f91707c..b3471e5 100644 --- a/minigbm_helpers.c +++ b/minigbm_helpers.c @@ -329,6 +329,11 @@ static struct gbm_device *try_drm_devices(drmDevicePtr *devs, int dev_count, int if (fd >= 0) { struct gbm_device *gbm = gbm_create_device(fd); if (gbm) { + // DRM master might be taken by accident on a primary node even + // if master is not needed for GBM. Drop it so that programs + // that actually need DRM master (e.g. Chrome) won't be blocked. + if (type == DRM_NODE_PRIMARY && drmIsMaster(fd)) + drmDropMaster(fd); *out_fd = fd; return gbm; }