XLibre Xserver
Go to file
Mario Kleiner 73f0ed2d92 modesetting: Remove ms_crtc_msc_to_kernel_msc().
The function is ported from intel-ddx uxa backend around 2013, where its
stated purpose was to apply a vblank_offset to msc values to correct for
problems with those kernel provided msc values. Some (somewhat magic and
puzzling to myself) heuristic tried to guess if provided values were
unreasonable and tried to adapt the corrective vblank_offset to account
for that.

Except: It wasn't applied to kernel provided msc values, but the values
delivered by clients via DRI2 or Present, so valid client targetmsc
values, e.g., requesting a vblank event > 1000 vblanks in the future,
triggered the offset correction in arbitrarily wrong ways, leading to
wrong msc values being returned and thereby vblank events queued to the
kernel for the wrong time. This causes glXSwapBuffersMscOML and
glXWaitForMscOML to swap / return immediately whenever a swap/wait in >
1000 vblanks is requested.

The original code was also written to only deal with 32 bit mscs, but
server 1.20 modesetting ddx can now use new Linux 4.15+ kernel vblank
api to process true 64 bit msc's, which may confuse the heuristic even
more due to 32 bit integer truncation/wrapping.

This code caused various problems in the intel-ddx in the past since
year 2013, and was removed there in 2015 by Chris Wilson in commit
42ebe2ef9646be5c4586868cf332b4cd79bb4618:

"    uxa: Remove the filtering of bogus Present MSC values

    If the intention was to filter the return values from the kernel, the
    filtering would have been applied to the kernel values and not to the
    incoming values from Present. This filtering introduces crazy integer
    promotion and truncation bugs all because Present feeds garbage into its
    vblank requests.

"

Indeed, i found a Mesa bug yesterday which can cause Mesa's
PresentPixmap request to spuriously feed garbage targetMSC's into the
driver under some conditions. However, while other video drivers seem to
cope relatively well with that, modesetting ddx causes KDE-5's
plasmashell to lock up badly quite frequently, and my suspicion is that
the code removed in this commit is one major source of the extra
fragility.

Also my own tests fail for any swap scheduled more than 1000 vblanks
into the future, which is not uncommon for some scientific applications.

Iow. modesetting's swap scheduling seems to be more robust without this
function afaics.

Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Keith Packard <keithp@keithp.com>
Tested-by: Mike Lothian <mike@fireburn.co.uk>
2018-05-07 12:32:40 -04:00
Xext meson: Ensure we always build Xext/hashtable.c for glx 2018-04-19 16:20:22 -04:00
Xi Use ARRAY_SIZE all over the tree 2017-10-30 13:45:20 -04:00
composite meson: Distribute more SDK headers 2018-04-02 13:42:08 -04:00
config meson: Fix install path for 10-quirks.conf 2018-03-27 10:28:33 -04:00
damageext Use ARRAY_SIZE all over the tree 2017-10-30 13:45:20 -04:00
dbe meson: Distribute more SDK headers 2018-04-02 13:42:08 -04:00
dix dix: Allow an extension to disable itself 2018-04-24 14:36:04 -04:00
doc Rewrite the byte swapping macros. 2017-04-25 15:01:23 -07:00
dri3 dri3: Robustly clamp to 1.0 if not all screens support 1.2 2018-04-30 13:48:00 -04:00
exa exa: promise not to touch the data when swapping pointers 2018-03-21 11:22:59 -04:00
fb meson: Distribute more SDK headers 2018-04-02 13:42:08 -04:00
glamor glamor: Don't fail in glamor_get_formats if not dmabuf_capable. 2018-04-30 13:48:46 -04:00
glx glx: Require depth > 12 for GLX visuals 2018-04-24 14:36:04 -04:00
hw modesetting: Remove ms_crtc_msc_to_kernel_msc(). 2018-05-07 12:32:40 -04:00
include meson: Set XCONFIGFILE to 'xorg.conf' instead of '/etc/xorg.conf' 2018-05-07 12:25:00 -04:00
m4 Add ax_pthread.m4 to m4/ 2016-05-29 19:20:51 -07:00
man man: s/__/@/g 2018-03-27 10:13:17 -04:00
mi mi: Hush an almost certainly bogus warning 2018-04-05 14:18:49 -04:00
miext meson: Distribute more SDK headers 2018-04-02 13:42:08 -04:00
os os/WaitFor: Check timers on every iteration 2018-04-17 16:30:36 -04:00
present present: fix msc offset calculation in window mode 2018-05-02 14:55:48 -04:00
pseudoramiX Unvalidated lengths 2017-10-10 23:33:34 +02:00
randr randr: Account for panning and transforms when constraining the cursor 2018-05-02 12:20:01 -04:00
record Add a Meson build system alongside autotools. 2017-04-26 15:25:27 -07:00
render animcur: Fix crash when removing a master device 2018-04-24 14:28:27 -04:00
test travis: Bump rawhide image 2018-03-21 12:11:23 -04:00
xfixes xfixes: Restore monitoring of animated cursors 2018-02-14 13:52:45 -05:00
xkb xkb: Silence some compiler warnings 2018-04-05 14:18:47 -04:00
.appveyor.yml appveyor: use meson 2018-03-21 10:16:44 -04:00
.dir-locals.el Add .dir-locals.el 2013-08-17 12:17:36 +02:00
.gitignore .gitignore: Add new autotools file 'test-driver' 2014-04-21 13:41:42 -07:00
.gitlab-ci.yml gitlab-ci: Add for gitlab.freedesktop.org 2018-05-02 15:00:53 -04:00
.travis.yml travis: Drop Xcode 8.2 2018-03-21 12:15:28 -04:00
COPYING modesetting: Merge modesetting's COPYING into the xserver's. 2014-09-15 12:46:02 -07:00
Makefile.am automake: Fix 'make dist' 2018-03-28 15:11:16 -04:00
README README: Add link to fd.o CoC 2017-04-11 08:51:34 -04:00
autogen.sh autogen: Set a default subject prefix for patches 2016-02-08 17:41:38 -05:00
configure.ac xserver 1.20 RC5 2018-04-24 17:03:07 -04:00
devbook.am doc: Create a script to filter xmlto output 2015-01-05 14:24:06 -08:00
docbook.am docbook.am: embed css styles inside the HTML HEAD element 2011-09-21 14:07:49 -07:00
fix-miregion Change region implementation names to eliminate the 'mi' prefix 2010-06-05 17:47:32 -07:00
fix-miregion-private Change region implementation names to eliminate the 'mi' prefix 2010-06-05 17:47:32 -07:00
fix-patch-whitespace Rename region macros to eliminate screen argument 2010-06-05 18:59:00 -07:00
fix-region Rename region macros to eliminate screen argument 2010-06-05 18:59:00 -07:00
manpages.am autotools: Fix excessive \-escaping that broke the build 2018-03-27 10:47:05 -04:00
meson.build meson: Bump version number here too 2018-04-30 14:07:44 -04:00
meson_options.txt xwayland: Add glamor egl_backend for EGLStreams 2018-04-24 16:51:18 -04:00
xorg-server.m4 macros: clarify documentation 2012-11-05 13:24:57 -06:00
xorg-server.pc.in xfree86: link modules against Xorg symbols on Cygwin 2012-04-05 21:57:07 -05:00
xserver.ent.in doc: relocate xserver.ent in the package root directory 2011-05-14 11:22:26 -07:00

					X Server

The X server accepts requests from client applications to create windows,
which are (normally rectangular) "virtual screens" that the client program
can draw into.

Windows are then composed on the actual screen by the X server
(or by a separate composite manager) as directed by the window manager,
which usually communicates with the user via graphical controls such as buttons
and draggable titlebars and borders.

For a comprehensive overview of X Server and X Window System, consult the
following article:
https://en.wikipedia.org/wiki/X_server

All questions regarding this software should be directed at the
Xorg mailing list:

        https://lists.freedesktop.org/mailman/listinfo/xorg

Please submit bug reports to the Xorg bugzilla:

        https://bugs.freedesktop.org/enter_bug.cgi?product=xorg

The master development code repository can be found at:

        git://anongit.freedesktop.org/git/xorg/xserver

        https://cgit.freedesktop.org/xorg/xserver

For patch submission instructions, see:

	https://www.x.org/wiki/Development/Documentation/SubmittingPatches

For more information on the git code manager, see:

        https://wiki.x.org/wiki/GitPage

As with other projects hosted on freedesktop.org, X.Org follows its
Code of Conduct, based on the Contributor Covenant. Please conduct
yourself in a respectful and civilized manner when using the above
mailing lists, bug trackers, etc:

	https://www.freedesktop.org/wiki/CodeOfConduct