# Copyright (c) 2006, 2009, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), # to deal in the Software without restriction, including without limitation # the rights to use, copy, modify, merge, publish, distribute, sublicense, # and/or sell copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice (including the next # paragraph) shall be included in all copies or substantial portions of the # Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. --- xorg-server-1.18.4/hw/xfree86/common/xf86Config.c.orig 2016-09-17 00:07:50.879400615 +0200 +++ xorg-server-1.18.4/hw/xfree86/common/xf86Config.c 2016-09-17 00:08:09.608273665 +0200 @@ -559,13 +559,34 @@ static void fixup_video_driver_list(const char **drivers) { - const char **end; + const char **end, **drv; + const char *x; /* walk to the end of the list */ for (end = drivers; *end && **end; end++); end--; qsort(drivers, end - drivers, sizeof(const char *), driver_sort); + + /* + * Since the nvidia kernel driver interferes with the nv Xorg driver, + * make sure to prefer nvidia if it's installed + */ + for (drv = drivers; drv != end; drv++) { + char **nv, **nvidia; + if (!strcmp(*drv, "nv")) { + nv = drv; + for (drv = nv; drv != end; drv++) { + if (!strcmp(*drv, "nvidia")) { + nvidia = drv; + x = *nvidia; *nvidia = *nv; *nv = x; + break; + } + } + /* if we get here, nvidia was already ahead of nv */ + break; + } + } } static const char **