mutter/src/backends/native
Jonas Ådahl 1d7920872d kms: Gracefully handle page flipping direct scanouts failing
When drmModePageFlip() or drmModeAtomicCommit() unexpectedly failed (e.g.
ENOSPC, which has been seen in the wild), this failure was not handled
very gracefully. The page flip listener for the scanout was left in the
MetaKmsUpdate, meaning when the primary plane composition was later page
flipped, two page flip listeners were added, one for the primary plane,
and one for the scanout. This caused the 'page-flipped' event to be
handled twice, the second time being fatal.

Handle this by making 'no-discard' listener flag be somewhat reversed,
and say 'drop-on-error', and then drop all 'drop-on-error' listeners
when a MetaKmsUpdate failed to be processed.

Also for a "preserve" flagged update, don't ever trigger "discard"
callbacks just yet, as preserved updates are used again for the primary
plane composition, in order to not miss e.g. CRTC gamma updates, or
cursor plane updates, which were added separately.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1809
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1910>
2021-07-02 13:29:54 +00:00
..
dbus-utils.c Clean up include macros mess 2018-11-06 17:17:36 +01:00
dbus-utils.h launcher: Replace mutter-launch with logind integration 2014-05-19 15:09:23 -04:00
gen-default-modes.py Fix incorrect 'is' in gen_default_modes 2020-02-10 20:35:05 +01:00
meta-backend-native-private.h backends/native: Implement support for pointer barriers 2015-01-19 02:27:59 -08:00
meta-backend-native-types.h Introduce virtual monitors 2021-03-12 15:09:45 +00:00
meta-backend-native.c native: Properly ignore devices on init too 2021-06-09 19:21:44 +00:00
meta-backend-native.h tests: Add headless native backend test 2021-03-12 15:09:45 +00:00
meta-barrier-native.c src: Stop using GSlice 2021-02-22 13:52:27 +01:00
meta-barrier-native.h backends/native: Add a bunch of "_in_impl" suffixes to functions 2020-11-27 15:14:34 +00:00
meta-clutter-backend-native.c backend: Take over seat ownership from the clutter backend 2021-03-13 18:56:21 +00:00
meta-clutter-backend-native.h clutter/backend/native: Don't double manage stage implementation 2021-03-13 18:56:21 +00:00
meta-cogl-utils.c native/cogl-utils: Fix license header 2021-01-28 20:33:01 +00:00
meta-cogl-utils.h native/cogl-utils: Minor macro cleanup 2021-01-28 20:33:01 +00:00
meta-crtc-kms.c crtc/kms: Make the 'transform-handled' API pass through MetaCrtcNative 2021-03-12 15:09:45 +00:00
meta-crtc-kms.h crtc/kms: Make the 'transform-handled' API pass through MetaCrtcNative 2021-03-12 15:09:45 +00:00
meta-crtc-mode-kms.c crtc-mode-kms: Wrap MetaKmsMode instead of drmModeModeInfo 2021-01-22 16:47:08 +00:00
meta-crtc-mode-kms.h crtc-mode-kms: Wrap MetaKmsMode instead of drmModeModeInfo 2021-01-22 16:47:08 +00:00
meta-crtc-mode-virtual.c Introduce virtual monitors 2021-03-12 15:09:45 +00:00
meta-crtc-mode-virtual.h Introduce virtual monitors 2021-03-12 15:09:45 +00:00
meta-crtc-native.c crtc/kms: Make the 'transform-handled' API pass through MetaCrtcNative 2021-03-12 15:09:45 +00:00
meta-crtc-native.h crtc/kms: Make the 'transform-handled' API pass through MetaCrtcNative 2021-03-12 15:09:45 +00:00
meta-crtc-virtual.c Introduce virtual monitors 2021-03-12 15:09:45 +00:00
meta-crtc-virtual.h Introduce virtual monitors 2021-03-12 15:09:45 +00:00
meta-cursor-renderer-native.c Introduce virtual monitors 2021-03-12 15:09:45 +00:00
meta-cursor-renderer-native.h cursor-renderer/native: Update HW state during frames 2021-01-22 16:47:08 +00:00
meta-drm-buffer-dumb.c native: Consolidate DRM buffer management to MetaDrmBuffer types 2021-01-22 16:47:08 +00:00
meta-drm-buffer-dumb.h native: Consolidate DRM buffer management to MetaDrmBuffer types 2021-01-22 16:47:08 +00:00
meta-drm-buffer-gbm.c native: Consolidate DRM buffer management to MetaDrmBuffer types 2021-01-22 16:47:08 +00:00
meta-drm-buffer-gbm.h native: Consolidate DRM buffer management to MetaDrmBuffer types 2021-01-22 16:47:08 +00:00
meta-drm-buffer-import.c native: Consolidate DRM buffer management to MetaDrmBuffer types 2021-01-22 16:47:08 +00:00
meta-drm-buffer-import.h native: Consolidate DRM buffer management to MetaDrmBuffer types 2021-01-22 16:47:08 +00:00
meta-drm-buffer-private.h native: Consolidate DRM buffer management to MetaDrmBuffer types 2021-01-22 16:47:08 +00:00
meta-drm-buffer.c native: Consolidate DRM buffer management to MetaDrmBuffer types 2021-01-22 16:47:08 +00:00
meta-drm-buffer.h native: Consolidate DRM buffer management to MetaDrmBuffer types 2021-01-22 16:47:08 +00:00
meta-gpu-kms.c backend/native: Only disable KMS modifiers for i915 2021-04-14 07:14:24 +00:00
meta-gpu-kms.h backend/native: Only disable KMS modifiers for i915 2021-04-14 07:14:24 +00:00
meta-input-device-native.c seat-impl: Destroy libinput objects on input thread on tear down 2021-01-11 17:17:39 +00:00
meta-input-device-native.h backends/native: Dispose the libinput device in the input thread 2020-12-16 17:09:58 +01:00
meta-input-device-tool-native.c backends/native: Add distinct meta-input-thread.h header 2020-11-27 15:14:34 +00:00
meta-input-device-tool-native.h backends/native: Add distinct meta-input-thread.h header 2020-11-27 15:14:34 +00:00
meta-input-settings-native.c backends: Drop MetaInputSettings::seat property 2021-05-05 19:07:26 +00:00
meta-input-settings-native.h backends/native: Add distinct meta-input-thread.h header 2020-11-27 15:14:34 +00:00
meta-input-thread.h backends/native: Add distinct meta-input-thread.h header 2020-11-27 15:14:34 +00:00
meta-keymap-native.c clutter/keymap: Make caps and num lock state properties 2021-03-04 17:39:08 +00:00
meta-keymap-native.h clutter/keymap: Make caps and num lock state properties 2021-03-04 17:39:08 +00:00
meta-kms-connector-private.h kms/connector: Look up CRTC_ID property 2021-01-22 16:47:08 +00:00
meta-kms-connector.c kms/connector: Properly predict connectors turning off 2021-04-14 18:44:57 +00:00
meta-kms-connector.h kms/connector: Don't use MetaConnectorType for connector type 2021-03-12 15:09:45 +00:00
meta-kms-crtc-private.h kms/crtc: Keep track of ACTIVE property value 2021-01-22 16:47:08 +00:00
meta-kms-crtc.c Change all g_memdup() to g_memdup2() 2021-02-04 19:16:28 +01:00
meta-kms-crtc.h kms/crtc: Make MetaKmsCrtcGamma reusable 2021-01-22 16:47:08 +00:00
meta-kms-device-private.h kms-impl-simple: Add fake cursor planes if no real ones 2020-03-07 21:40:50 +00:00
meta-kms-device.c kms: Add way to run without mode setting 2021-03-12 15:09:45 +00:00
meta-kms-device.h kms/device: Add plane getter 2021-01-22 16:47:08 +00:00
meta-kms-impl-device-atomic.c kms: Gracefully handle page flipping direct scanouts failing 2021-07-02 13:29:54 +00:00
meta-kms-impl-device-atomic.h kms: Add atomic MetaKmsImplDevice backend 2021-01-22 16:47:08 +00:00
meta-kms-impl-device-dummy.c kms/impl-device: Fix some argument naming mistakes 2021-04-14 12:53:25 +00:00
meta-kms-impl-device-dummy.h kms: Add way to run without mode setting 2021-03-12 15:09:45 +00:00
meta-kms-impl-device-simple.c kms: Gracefully handle page flipping direct scanouts failing 2021-07-02 13:29:54 +00:00
meta-kms-impl-device-simple.h kms: Move impl backend inherit MetaKmsImplDevice instead of MetaKmsImpl 2021-01-22 16:47:08 +00:00
meta-kms-impl-device.c kms: Gracefully handle page flipping direct scanouts failing 2021-07-02 13:29:54 +00:00
meta-kms-impl-device.h kms: Gracefully handle page flipping direct scanouts failing 2021-07-02 13:29:54 +00:00
meta-kms-impl.c kms: Gracefully handle page flipping direct scanouts failing 2021-07-02 13:29:54 +00:00
meta-kms-impl.h kms: Gracefully handle page flipping direct scanouts failing 2021-07-02 13:29:54 +00:00
meta-kms-mode-private.h kms/mode: Add mode flags 2021-01-22 16:47:08 +00:00
meta-kms-mode.c crtc-mode-kms: Wrap MetaKmsMode instead of drmModeModeInfo 2021-01-22 16:47:08 +00:00
meta-kms-mode.h crtc-mode-kms: Wrap MetaKmsMode instead of drmModeModeInfo 2021-01-22 16:47:08 +00:00
meta-kms-page-flip-private.h kms/page-flip: Pass ownership of listener user data along with closure 2021-01-22 16:47:08 +00:00
meta-kms-page-flip.c kms: Gracefully handle page flipping direct scanouts failing 2021-07-02 13:29:54 +00:00
meta-kms-plane-private.h kms/update: Make plane assignment take rotation instead of property list 2021-01-22 16:47:08 +00:00
meta-kms-plane.c kms/update: Make plane assignment take rotation instead of property list 2021-01-22 16:47:08 +00:00
meta-kms-plane.h kms-impl-simple: Add fake cursor planes if no real ones 2020-03-07 21:40:50 +00:00
meta-kms-private.h backends/native: Remove unused meta_gpu_kms_wait_for_flip and more 2020-08-04 08:57:06 +00:00
meta-kms-types.h backend/native: Only disable KMS modifiers for i915 2021-04-14 07:14:24 +00:00
meta-kms-update-private.h kms: Gracefully handle page flipping direct scanouts failing 2021-07-02 13:29:54 +00:00
meta-kms-update.c kms: Gracefully handle page flipping direct scanouts failing 2021-07-02 13:29:54 +00:00
meta-kms-update.h kms: Gracefully handle page flipping direct scanouts failing 2021-07-02 13:29:54 +00:00
meta-kms-utils.c backend/native: Calculate refresh rate in double-precision 2021-03-05 14:37:48 +00:00
meta-kms-utils.h backend/native: Add tests for refresh rate calculation 2021-03-05 14:37:48 +00:00
meta-kms.c kms: Gracefully handle page flipping direct scanouts failing 2021-07-02 13:29:54 +00:00
meta-kms.h backend/native: Split up KMS shutdown in two phases 2021-05-05 19:52:04 +00:00
meta-launcher.c launcher: Use gnome.gdbusgen and add prefix to generated API 2021-04-14 12:53:25 +00:00
meta-launcher.h meta: Remave meta_activate_session() 2021-01-28 20:05:23 +00:00
meta-monitor-manager-native.c native: Invalidate CRTC gamma when resuming or leaving power save 2021-04-29 18:04:04 +00:00
meta-monitor-manager-native.h native: Rename MetaMonitorManagerKms to MetaMonitorManagerNative 2021-03-12 15:09:45 +00:00
meta-onscreen-native.c kms: Gracefully handle page flipping direct scanouts failing 2021-07-02 13:29:54 +00:00
meta-onscreen-native.h onscreen/native: Move function declaration to the correct header file 2021-02-09 08:27:11 +00:00
meta-output-kms.c output/kms: Add back common modes on non-single mode outputs 2021-04-27 16:12:18 +00:00
meta-output-kms.h output/kms: Make EDID be read via MetaOutputNative object 2021-03-12 15:09:45 +00:00
meta-output-native.c output/kms: Make EDID be read via MetaOutputNative object 2021-03-12 15:09:45 +00:00
meta-output-native.h output/kms: Make EDID be read via MetaOutputNative object 2021-03-12 15:09:45 +00:00
meta-output-virtual.c Introduce virtual monitors 2021-03-12 15:09:45 +00:00
meta-output-virtual.h Introduce virtual monitors 2021-03-12 15:09:45 +00:00
meta-pointer-constraint-native.c clutter: Drop clutter_input_device_get_coords() method 2020-11-27 15:14:33 +00:00
meta-pointer-constraint-native.h backends: Delegate pointer confinements to an impl object 2020-11-27 15:14:33 +00:00
meta-renderer-native-gles3.c *: Fix spelling mistakes found by codespell 2020-08-29 09:10:31 +00:00
meta-renderer-native-gles3.h renderer/native: remove meta_renderer_native_gles3_read_pixels 2018-11-19 22:53:13 +00:00
meta-renderer-native-private.h renderer/native: Move out CoglOnscreen code to separate file 2021-01-30 09:11:45 +00:00
meta-renderer-native.c renderer/native: Clear pending update list before repopulating 2021-06-12 21:09:55 +02:00
meta-renderer-native.h native: Add headless mode using surfaceless EGL context 2021-03-12 15:09:45 +00:00
meta-seat-impl.c backends/native: Unref/unset key repeat GSource when cleared 2021-04-27 08:37:38 +00:00
meta-seat-impl.h seat/impl: Make it possible to run without libinput 2021-03-12 15:09:45 +00:00
meta-seat-native.c backend: Destroy seat explicitly 2021-03-13 18:56:21 +00:00
meta-seat-native.h seat-native: Remove left-over function declaration 2021-04-14 12:53:25 +00:00
meta-stage-native.c Introduce virtual monitors 2021-03-12 15:09:45 +00:00
meta-stage-native.h backends/native: Stop supporting stage views being disabled 2017-10-05 18:08:09 -04:00
meta-udev.c backend/native: Add udev rule to ignore vkms devices 2021-04-30 15:10:28 +02:00
meta-udev.h backend/native: Add udev rule to ignore vkms devices 2021-04-30 15:10:28 +02:00
meta-virtual-input-device-native.c virtual-input-device/native: Verify device cleanup in impl_state_free() 2021-02-23 10:05:32 +00:00
meta-virtual-input-device-native.h clutter: Move evdev input to src/backends/native 2019-08-24 08:59:08 +00:00
meta-virtual-monitor-native.c Introduce virtual monitors 2021-03-12 15:09:45 +00:00
meta-virtual-monitor-native.h Introduce virtual monitors 2021-03-12 15:09:45 +00:00
meta-xkb-utils.c backends/native: Update keyboard a11y status in seat impl 2020-11-27 15:14:34 +00:00
meta-xkb-utils.h backends/native: Update keyboard a11y status in seat impl 2020-11-27 15:14:34 +00:00