Go to file
Pekka Paalanen 85e9784a22 renderer/native: fix next_fb_id race on CPU copy path
There was a race in setting next_fb_id when a secondary GPU was using
the CPU copy path. Losing this race caused the attempt to
drmModePageFlip () to FB ID 0 which is invalid and always fails. Failing
to flip causes Mutter to fall back to drmModeSetCrtc () permanently.

In meta_onscreen_native_swap_buffers_with_damage ():
- update_secondary_gpu_state_pre_swap_buffers ()
  - copy_shared_framebuffer_cpu () but only on the CPU copy path
    - secondary_gpu_state->gbm.next_fb_id is set
- wait_for_pending_flips ()
  - Waits for any remaining page flip events and executes and destroys
    the related page flip closures.
    - on_crtc_flipped ()
      - meta_onscreen_native_swap_drm_fb ()
        - swap_secondary_drm_fb ()
	  - secondary_gpu_state->gbm.next_fb_id = 0;
- meta_onscreen_native_flip_crtcs ()
  - meta_onscreen_native_flip_crtc ()
    - meta_gpu_kms_flip_crtc () gets called with fb_id = 0

This race was observed lost when running 'mutter --wayland' on a machine
with two outputs on Intel and one output on DisplayLink USB dock, and
wiggling around a weston-terminal window between the Intel and
DisplayLink outputs. It took from a second to a minute to trigger. For
testing with DisplayLink outputs Mutter also needed a patch to take the
DisplayLink output into use, as it would have otherwise been ignored
being a platform device rather than a PCI device.

Fix this race by first waiting for pending flips and only then
proceeding with the swap operations. This should be safe, because the
pending flips could have completed already before entering
meta_onscreen_native_swap_buffers_with_damage ().
2018-10-25 09:57:39 +00:00
clutter clutter: Add clutter_input_method_forward_key() method. 2018-10-08 16:30:04 +00:00
cogl cogl: Fix cogl_frame_info_get_frame_counter docs 2018-07-20 15:48:56 +08:00
data Make screen cast and remote desktop non-experimental 2018-06-07 12:57:51 +00:00
doc Remove gtk-doc 2015-07-06 00:52:18 -07:00
po Updated Czech translation 2018-10-01 17:39:07 +02:00
src renderer/native: fix next_fb_id race on CPU copy path 2018-10-25 09:57:39 +00:00
tools Clean up the source tree 2014-03-18 20:37:35 -04:00
.gitignore wayland: Implement text-input from wayland-protocols 2018-08-14 15:43:21 +00:00
autogen.sh Fix bashism in autogen.sh 2017-05-11 13:45:44 +02:00
configure.ac Bump version to 3.30.1 2018-10-08 20:55:50 +02:00
COPYING Updated obsolete FSF postal address in COPYING 2014-01-13 11:35:48 -05:00
Makefile.am Fix the merged build 2016-04-27 20:37:47 +02:00
mutter.doap doap: add <programming-language> 2014-07-31 17:50:28 +02:00
NEWS Bump version to 3.30.1 2018-10-08 20:55:50 +02:00
README.md Add README.md 2018-07-30 21:58:59 +02:00

Mutter

Mutter is a Wayland display server and X11 window manager and compositor library.

When used as a Wayland display server, it runs on top of KMS and libinput. It implements the compositor side of the Wayland core protocol as well as various protocol extensions. It also has functionality related to running X11 applications using Xwayland.

When used on top of Xorg it acts as a X11 window manager and compositing manager.

It contains functionality related to, among other things, window management, window compositing, focus tracking, workspace management, keybindings and monitor configuration.

Internally it uses a fork of Cogl, a hardware acceleration abstraction library used to simplify usage of OpenGL pipelines, as well as a fork af Clutter, a scene graph and user interface toolkit.

Mutter is used by GNOME Shell, the GNOME core user interface. It can also be run standalone, using the command "mutter", but just running plain mutter is only intended for debugging purposes.

License

Mutter is distributed under the terms of the GNU General Public License, version 2 or later. See the COPYING file for detalis.