From 6583adb08ba442b7eecc652941b1ab55fcf9442c Mon Sep 17 00:00:00 2001 From: lihongtao Date: Fri, 18 Nov 2022 10:32:37 +0800 Subject: [PATCH] modesetting: Fix prime screen not display when expansion screen rotates In the multi screen mode, rotating the expansion screen will cause the prime screen not to display, because crtcs sharing the fb, and delete one crtc fb will affect other crtcs. One method is to delete all crtcs fb first and then re-create it. And the best solution is to provide a reference mechanism for crtcs sharing fb, drmModeRmFB until ref is 0. --- hw/xfree86/drivers/modesetting/present.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hw/xfree86/drivers/modesetting/present.c b/hw/xfree86/drivers/modesetting/present.c index c3266d871..e1181a855 100644 --- a/hw/xfree86/drivers/modesetting/present.c +++ b/hw/xfree86/drivers/modesetting/present.c @@ -424,6 +424,14 @@ ms_present_unflip(ScreenPtr screen, uint64_t event_id) drmmode_crtc->drmmode->fb_id); drmmode_crtc->drmmode->fb_id = 0; } + } + + for (i = 0; i < config->num_crtc; i++) { + xf86CrtcPtr crtc = config->crtc[i]; + drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; + + if (!crtc->enabled) + continue; if (drmmode_crtc->dpms_mode == DPMSModeOn) crtc->funcs->set_mode_major(crtc, &crtc->mode, crtc->rotation,