diff --git a/u_xfree86-add-new-key-MatchSeat-to-xorg-conf.patch b/u_xfree86-add-new-key-MatchSeat-to-xorg-conf.patch new file mode 100644 index 0000000..a882122 --- /dev/null +++ b/u_xfree86-add-new-key-MatchSeat-to-xorg-conf.patch @@ -0,0 +1,242 @@ +From c29952e77111d6da1ab12957f0207d59ae14c809 Mon Sep 17 00:00:00 2001 +From: Oleg Samarin +Date: Thu, 3 Apr 2014 09:16:52 -0300 +Subject: [PATCH v2 2/3] xfree86: add new key MatchSeat to xorg.conf sections + "Device", "Screen", and "ServerLayout" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This patch introduces a new key MatchSeat in xorg.conf (also applies to +any .conf file in xorg.conf.d). It will allow targeting a given +"Device", "Screen", and/or "ServerLayout" section to a particular +seat only (specified by option "-seat" in X server command line), +so that other seats won't be affected. + +Without this patch, one needs to write a separate xorg.conf.custom +file and pass it to X server via "-config" option, if one wants that +these settings only apply for the right seat. However, in some cases, +this solution is undesirable or even impossible (e.g. when using GDM, +which doesn't allow X server command line customization). + +Example file (/etc/X11/xorg.conf.d/seat1.conf), which would be ignored +by X server unless it was started with "-seat seat1" option: + +Section "Device" + Identifier "card0" + Driver "nvidia" + Option "NoLogo" "True" + MatchSeat "seat1" +EndSection + +Signed-off-by: Oleg Samarin +Signed-off-by: Laércio de Sousa +--- + hw/xfree86/common/xf86Config.c | 34 +++++++++++++++++++++++++--------- + hw/xfree86/parser/Device.c | 6 ++++++ + hw/xfree86/parser/Layout.c | 6 ++++++ + hw/xfree86/parser/Screen.c | 6 ++++++ + hw/xfree86/parser/xf86Parser.h | 3 +++ + hw/xfree86/parser/xf86tokens.h | 1 + + 6 files changed, 47 insertions(+), 9 deletions(-) + +diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c +index 542d5ab..5d17567 100644 +--- a/hw/xfree86/common/xf86Config.c ++++ b/hw/xfree86/common/xf86Config.c +@@ -232,6 +232,17 @@ xf86ValidateFontPath(char *path) + return tmp_path; + } + ++#define FIND_SUITABLE(pointertype, listhead, ptr) \ ++ { \ ++ pointertype l, p; \ ++ \ ++ for (l = listhead, p = NULL; !p && l; l = (pointertype) l->list.next) { \ ++ if (! l->match_seat || SeatId && xf86nameCompare(l->match_seat, SeatId) == 0) \ ++ p = l; \ ++ } \ ++ ptr = p; \ ++ } ++ + /* + * use the datastructure that the parser provides and pick out the parts + * that we need at this point +@@ -1580,8 +1591,11 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout, + * config file, or - if it is NULL - configScreen autogenerates one for + * us */ + if (!count) { ++ XF86ConfScreenPtr screen; ++ ++ FIND_SUITABLE (XF86ConfScreenPtr, xf86configptr->conf_screen_lst, screen); + slp[0].screen = xnfcalloc(1, sizeof(confScreenRec)); +- if (!configScreen(slp[0].screen, xf86configptr->conf_screen_lst, ++ if (!configScreen(slp[0].screen, screen, + 0, X_CONFIG)) { + free(slp[0].screen); + free(slp); +@@ -1821,7 +1835,7 @@ configScreen(confScreenPtr screenp, XF86ConfScreenPtr conf_screen, int scrnum, + * set it to NULL so that the section can be autoconfigured later */ + screenp->device = xnfcalloc(1, sizeof(GDevRec)); + if ((!conf_screen->scrn_device) && (xf86configptr->conf_device_lst)) { +- conf_screen->scrn_device = xf86configptr->conf_device_lst; ++ FIND_SUITABLE (XF86ConfDevicePtr, xf86configptr->conf_device_lst, conf_screen->scrn_device); + xf86Msg(X_DEFAULT, "No device specified for screen \"%s\".\n" + "\tUsing the first device section listed.\n", screenp->id); + } +@@ -2429,14 +2443,19 @@ xf86HandleConfigFile(Bool autoconfig) + */ + + /* First check if a layout section is present, and if it is valid. */ ++ XF86ConfLayoutPtr layout; ++ ++ FIND_SUITABLE(XF86ConfLayoutPtr, xf86configptr->conf_layout_lst, layout); ++ if (layout == NULL || xf86ScreenName != NULL) { ++ XF86ConfScreenPtr screen; + +- if (xf86configptr->conf_layout_lst == NULL || xf86ScreenName != NULL) { + if (xf86ScreenName == NULL) { + xf86Msg(X_DEFAULT, + "No Layout section. Using the first Screen section.\n"); + } ++ FIND_SUITABLE (XF86ConfScreenPtr, xf86configptr->conf_screen_lst, screen); + if (!configImpliedLayout(&xf86ConfigLayout, +- xf86configptr->conf_screen_lst, ++ screen, + xf86configptr)) { + xf86Msg(X_ERROR, "Unable to determine the screen layout\n"); + return CONFIG_PARSE_ERROR; +@@ -2451,16 +2470,13 @@ xf86HandleConfigFile(Bool autoconfig) + if (optlist && xf86FindOption(optlist, "defaultserverlayout")) + dfltlayout = + xf86SetStrOption(optlist, "defaultserverlayout", NULL); +- if (!configLayout +- (&xf86ConfigLayout, xf86configptr->conf_layout_lst, +- dfltlayout)) { ++ if (!configLayout(&xf86ConfigLayout, layout, dfltlayout)) { + xf86Msg(X_ERROR, "Unable to determine the screen layout\n"); + return CONFIG_PARSE_ERROR; + } + } + else { +- if (!configLayout(&xf86ConfigLayout, xf86configptr->conf_layout_lst, +- NULL)) { ++ if (!configLayout(&xf86ConfigLayout, layout, NULL)) { + xf86Msg(X_ERROR, "Unable to determine the screen layout\n"); + return CONFIG_PARSE_ERROR; + } +diff --git a/hw/xfree86/parser/Device.c b/hw/xfree86/parser/Device.c +index 073171f..d3ac293 100644 +--- a/hw/xfree86/parser/Device.c ++++ b/hw/xfree86/parser/Device.c +@@ -71,6 +71,7 @@ xf86ConfigSymTabRec DeviceTab[] = { + {RAMDAC, "ramdac"}, + {DACSPEED, "dacspeed"}, + {CLOCKS, "clocks"}, ++ {MATCHSEAT, "matchseat"}, + {OPTION, "option"}, + {VIDEORAM, "videoram"}, + {BIOSBASE, "biosbase"}, +@@ -216,6 +217,11 @@ xf86parseDeviceSection(void) + Error(NUMBER_MSG, "TextClockFreq"); + ptr->dev_textclockfreq = (int) (xf86_lex_val.realnum * 1000.0 + 0.5); + break; ++ case MATCHSEAT: ++ if (xf86getSubToken(&(ptr->dev_comment)) != STRING) ++ Error(QUOTE_MSG, "MatchSeat"); ++ ptr->match_seat = xf86_lex_val.str; ++ break; + case OPTION: + ptr->dev_option_lst = xf86parseOption(ptr->dev_option_lst); + break; +diff --git a/hw/xfree86/parser/Layout.c b/hw/xfree86/parser/Layout.c +index 7be746f..994b31a 100644 +--- a/hw/xfree86/parser/Layout.c ++++ b/hw/xfree86/parser/Layout.c +@@ -70,6 +70,7 @@ static xf86ConfigSymTabRec LayoutTab[] = { + {ENDSECTION, "endsection"}, + {SCREEN, "screen"}, + {IDENTIFIER, "identifier"}, ++ {MATCHSEAT, "matchseat"}, + {INACTIVE, "inactive"}, + {INPUTDEVICE, "inputdevice"}, + {OPTION, "option"}, +@@ -109,6 +110,11 @@ xf86parseLayoutSection(void) + ptr->lay_identifier = xf86_lex_val.str; + has_ident = TRUE; + break; ++ case MATCHSEAT: ++ if (xf86getSubToken(&(ptr->lay_comment)) != STRING) ++ Error(QUOTE_MSG, "MatchSeat"); ++ ptr->match_seat = xf86_lex_val.str; ++ break; + case INACTIVE: + { + XF86ConfInactivePtr iptr; +diff --git a/hw/xfree86/parser/Screen.c b/hw/xfree86/parser/Screen.c +index fecd57c..0e9746a 100644 +--- a/hw/xfree86/parser/Screen.c ++++ b/hw/xfree86/parser/Screen.c +@@ -198,6 +198,7 @@ xf86parseDisplaySubSection(void) + static xf86ConfigSymTabRec ScreenTab[] = { + {ENDSECTION, "endsection"}, + {IDENTIFIER, "identifier"}, ++ {MATCHSEAT, "matchseat"}, + {OBSDRIVER, "driver"}, + {MDEVICE, "device"}, + {MONITOR, "monitor"}, +@@ -236,6 +237,11 @@ xf86parseScreenSection(void) + Error(ONLY_ONE_MSG, "Identifier or Driver"); + has_ident = TRUE; + break; ++ case MATCHSEAT: ++ if (xf86getSubToken(&(ptr->scrn_comment)) != STRING) ++ Error(QUOTE_MSG, "MatchSeat"); ++ ptr->match_seat = xf86_lex_val.str; ++ break; + case OBSDRIVER: + if (xf86getSubToken(&(ptr->scrn_comment)) != STRING) + Error(QUOTE_MSG, "Driver"); +diff --git a/hw/xfree86/parser/xf86Parser.h b/hw/xfree86/parser/xf86Parser.h +index 8f855ac..c95423a 100644 +--- a/hw/xfree86/parser/xf86Parser.h ++++ b/hw/xfree86/parser/xf86Parser.h +@@ -224,6 +224,7 @@ typedef struct { + int dev_screen; + XF86OptionPtr dev_option_lst; + char *dev_comment; ++ char *match_seat; + } XF86ConfDeviceRec, *XF86ConfDevicePtr; + + typedef struct { +@@ -275,6 +276,7 @@ typedef struct { + XF86OptionPtr scrn_option_lst; + char *scrn_comment; + int scrn_virtualX, scrn_virtualY; ++ char *match_seat; + } XF86ConfScreenRec, *XF86ConfScreenPtr; + + typedef struct { +@@ -366,6 +368,7 @@ typedef struct { + XF86ConfInactivePtr lay_inactive_lst; + XF86ConfInputrefPtr lay_input_lst; + XF86OptionPtr lay_option_lst; ++ char *match_seat; + char *lay_comment; + } XF86ConfLayoutRec, *XF86ConfLayoutPtr; + +diff --git a/hw/xfree86/parser/xf86tokens.h b/hw/xfree86/parser/xf86tokens.h +index f751b7b..5c01ce7 100644 +--- a/hw/xfree86/parser/xf86tokens.h ++++ b/hw/xfree86/parser/xf86tokens.h +@@ -87,6 +87,7 @@ typedef enum { + VENDOR, + DASH, + COMMA, ++ MATCHSEAT, + OPTION, + COMMENT, + +-- +1.8.4.5 + diff --git a/u_xfree86-add-short-description-about-MatchSeat-key-in-xorg-conf-man-page.patch b/u_xfree86-add-short-description-about-MatchSeat-key-in-xorg-conf-man-page.patch new file mode 100644 index 0000000..ab8891c --- /dev/null +++ b/u_xfree86-add-short-description-about-MatchSeat-key-in-xorg-conf-man-page.patch @@ -0,0 +1,66 @@ +From 1387d26159b24119903a67ffb226b869729201b0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?La=C3=A9rcio=20de=20Sousa?= +Date: Thu, 3 Apr 2014 10:20:51 -0300 +Subject: [PATCH v2 3/3] xfree86: add short description about MatchSeat key in + xorg.conf man page +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Laércio de Sousa +--- + hw/xfree86/man/xorg.conf.man | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +diff --git a/hw/xfree86/man/xorg.conf.man b/hw/xfree86/man/xorg.conf.man +index 85f9f2e..c11372f 100644 +--- a/hw/xfree86/man/xorg.conf.man ++++ b/hw/xfree86/man/xorg.conf.man +@@ -1374,6 +1374,14 @@ for the regular text mode. + The frequency is specified in MHz. + This is rarely used. + .TP 7 ++.BI "MatchSeat " "seat\-id" ++Only apply this ++.B Device ++section if X server was started with ++.B -seat ++.I seat\-id ++option. ++.TP 7 + .BI "Option \*qModeDebug\*q \*q" boolean \*q + Enable printing of additional debugging information about modesetting to + the server log. +@@ -1896,6 +1904,14 @@ The only case where there is even a choice in this value is for depth 24, + where some hardware supports both a packed 24 bit framebuffer layout and a + sparse 32 bit framebuffer layout. + .TP 7 ++.BI "MatchSeat " "seat\-id" ++Only apply this ++.B Screen ++section if X server was started with ++.B -seat ++.I seat\-id ++option. ++.TP 7 + .B Options + Various + .B Option +@@ -2291,6 +2307,14 @@ and the first two should normally be used to indicate the core pointer + and core keyboard devices respectively. + .RE + .TP 7 ++.BI "MatchSeat " "seat\-id" ++Only apply this ++.B ServerLayout ++section if X server was started with ++.B -seat ++.I seat\-id ++option. ++.TP 7 + .B Options + In addition to the following, any option permitted in the + .B ServerFlags +-- +1.8.4.5 + diff --git a/u_xfree86-allow-fallback-to-PCI-bus-probe-for-non-seat0-seats.patch b/u_xfree86-allow-fallback-to-PCI-bus-probe-for-non-seat0-seats.patch new file mode 100644 index 0000000..4b52a4b --- /dev/null +++ b/u_xfree86-allow-fallback-to-PCI-bus-probe-for-non-seat0-seats.patch @@ -0,0 +1,49 @@ +From 04ad4d4010a562a663ee3224b55d2b9c8468bd0e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?La=C3=A9rcio=20de=20Sousa?= +Date: Thu, 3 Apr 2014 09:14:36 -0300 +Subject: [PATCH v2 1/3] xfree86: allow fallback to PCI bus probe for graphics + devices on non-seat0 X servers (#66851) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Currently non-seat0 X servers only probe platform bus for graphics devices, +which is OK for most KMS-compliant drivers. However, for non-KMS drivers +(like NVIDIA proprietary ones), graphics devices can't be reached +by platform bus probe, resulting in a "No devices detected" error. + +This patch allows a fallback to PCI bus probe for non-seat0 X servers +in case no platform bus graphics device is found. + +Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=66851 + +Signed-off-by: Laércio de Sousa +--- + hw/xfree86/common/xf86Bus.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c +index 507c57d..b3b3f8c 100644 +--- a/hw/xfree86/common/xf86Bus.c ++++ b/hw/xfree86/common/xf86Bus.c +@@ -81,7 +81,7 @@ xf86CallDriverProbe(DriverPtr drv, Bool detect_only) + if (drv->platformProbe != NULL) { + foundScreen = xf86platformProbeDev(drv); + } +- if (ServerIsNotSeat0()) ++ if (ServerIsNotSeat0() && foundScreen) + return foundScreen; + #endif + +@@ -201,7 +201,7 @@ xf86BusProbe(void) + { + #ifdef XSERVER_PLATFORM_BUS + xf86platformProbe(); +- if (ServerIsNotSeat0()) ++ if (ServerIsNotSeat0() && xf86_num_platform_devices > 0) + return; + #endif + #ifdef XSERVER_LIBPCIACCESS +-- +1.8.4.5 + diff --git a/xorg-x11-server.changes b/xorg-x11-server.changes index 4421e1c..eaa5c34 100644 --- a/xorg-x11-server.changes +++ b/xorg-x11-server.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Thu Apr 30 16:43:00 UTC 2014 - lbsousajr@gmail.com + +- Add new patches to make non-seat0 X servers work properly with + non-KMS video drivers: + + u_xfree86-allow-fallback-to-PCI-bus-probe-for-non-seat0-seats.patch + + u_xfree86-add-new-key-MatchSeat-to-xorg-conf.patch + + u_xfree86-add-short-description-about-MatchSeat-key-in-xorg-conf-man-page.patch + ------------------------------------------------------------------- Mon Apr 28 09:02:06 UTC 2014 - sndirsch@suse.com diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index bb67d57..25d0fa3 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -151,6 +151,9 @@ Patch105: ux_xserver_xvfb-randr.patch Patch106: u_exa-only-draw-valid-trapezoids.patch # PATCH-FIX-UPSTREAM u_arch-Fix-image-and-bitmap-byte-order-for-ppc64le.patch -- sent to ML 2014-02-24 Patch107: u_arch-Fix-image-and-bitmap-byte-order-for-ppc64le.patch +Patch108: u_xfree86-allow-fallback-to-PCI-bus-probe-for-non-seat0-seats.patch +Patch109: u_xfree86-add-new-key-MatchSeat-to-xorg-conf.patch +Patch110: u_xfree86-add-short-description-about-MatchSeat-key-in-xorg-conf-man-page.patch Patch162: b_cache-xkbcomp-output-for-fast-start-up.patch Patch211: b_0001-Prevent-XSync-Alarms-from-senslessly-calling-CheckTr.patch @@ -226,6 +229,9 @@ cp %{SOURCE90} . %patch105 -p1 %patch106 -p1 %patch107 -p1 +%patch108 -p1 +%patch109 -p1 +%patch110 -p1 ### disabled for now #%patch162 -p1