1*4882a593SmuzhiyunFrom f9a6415f671d94e4983b33a6b592d77889e5ac6b Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Fri, 13 Aug 2021 10:10:01 +0800 4*4882a593SmuzhiyunSubject: [PATCH 52/93] backend-drm: Allow pageflip error 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunAllow to recover from pageflip error: 7*4882a593Smuzhiyun[02:08:14.089] queueing pageflip failed: Operation not permitted 8*4882a593Smuzhiyun[02:08:14.090] Couldn't apply state for output eDP-1 9*4882a593Smuzhiyun[02:08:14.090] repaint-flush failed: No such file or directory 10*4882a593Smuzhiyun 11*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 12*4882a593Smuzhiyun--- 13*4882a593Smuzhiyun libweston/backend-drm/kms.c | 8 ++++++-- 14*4882a593Smuzhiyun 1 file changed, 6 insertions(+), 2 deletions(-) 15*4882a593Smuzhiyun 16*4882a593Smuzhiyundiff --git a/libweston/backend-drm/kms.c b/libweston/backend-drm/kms.c 17*4882a593Smuzhiyunindex 52f0c68..690ada0 100644 18*4882a593Smuzhiyun--- a/libweston/backend-drm/kms.c 19*4882a593Smuzhiyun+++ b/libweston/backend-drm/kms.c 20*4882a593Smuzhiyun@@ -1382,6 +1382,7 @@ drm_pending_state_apply(struct drm_pending_state *pending_state) 21*4882a593Smuzhiyun struct drm_backend *b = device->backend; 22*4882a593Smuzhiyun struct drm_output_state *output_state, *tmp; 23*4882a593Smuzhiyun struct drm_crtc *crtc; 24*4882a593Smuzhiyun+ int has_error = 0; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun if (device->atomic_modeset) 27*4882a593Smuzhiyun return drm_pending_state_apply_atomic(pending_state, 28*4882a593Smuzhiyun@@ -1424,6 +1425,7 @@ drm_pending_state_apply(struct drm_pending_state *pending_state) 29*4882a593Smuzhiyun drm_output_fini_egl(output); 30*4882a593Smuzhiyun drm_output_init_egl(output, b); 31*4882a593Smuzhiyun } 32*4882a593Smuzhiyun+ has_error = 1; 33*4882a593Smuzhiyun } 34*4882a593Smuzhiyun } 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun@@ -1431,7 +1433,7 @@ drm_pending_state_apply(struct drm_pending_state *pending_state) 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun drm_pending_state_free(pending_state); 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun- return 0; 41*4882a593Smuzhiyun+ return has_error ? -EACCES : 0; 42*4882a593Smuzhiyun } 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun /** 45*4882a593Smuzhiyun@@ -1447,6 +1449,7 @@ drm_pending_state_apply_sync(struct drm_pending_state *pending_state) 46*4882a593Smuzhiyun struct drm_device *device = pending_state->device; 47*4882a593Smuzhiyun struct drm_output_state *output_state, *tmp; 48*4882a593Smuzhiyun struct drm_crtc *crtc; 49*4882a593Smuzhiyun+ int has_error = 0; 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun if (device->atomic_modeset) 52*4882a593Smuzhiyun return drm_pending_state_apply_atomic(pending_state, 53*4882a593Smuzhiyun@@ -1475,6 +1478,7 @@ drm_pending_state_apply_sync(struct drm_pending_state *pending_state) 54*4882a593Smuzhiyun if (ret != 0) { 55*4882a593Smuzhiyun weston_log("Couldn't apply state for output %s\n", 56*4882a593Smuzhiyun output_state->output->base.name); 57*4882a593Smuzhiyun+ has_error = 1; 58*4882a593Smuzhiyun } 59*4882a593Smuzhiyun } 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun@@ -1482,7 +1486,7 @@ drm_pending_state_apply_sync(struct drm_pending_state *pending_state) 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun drm_pending_state_free(pending_state); 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun- return 0; 66*4882a593Smuzhiyun+ return has_error ? -EACCES : 0; 67*4882a593Smuzhiyun } 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun void 70*4882a593Smuzhiyun-- 71*4882a593Smuzhiyun2.20.1 72*4882a593Smuzhiyun 73