xorg-server: Changes to 'ubuntu+1'
debian/changelog | 7 -
debian/patches/series | 2
debian/patches/xmir.patch | 242 +++++++++++++++++++++++++++-------------------
3 files changed, 152 insertions(+), 99 deletions(-)
New commits:
commit 0a38b9e027ff4c712254db5a50b1e2e2c7cfdb9b
Author: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Date: Fri Jul 4 16:16:41 2014 +1000
Changelog entry for XMir
diff --git a/debian/changelog b/debian/changelog
index 5bc9ea2..cad027b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,10 +1,13 @@
xorg-server (2:1.15.99.903-3ubuntu1) UNRELEASED; urgency=medium
+ [ Maarten Lankhorst ]
* New upstream release.
- Refresh patches.
- - Disable xmir, for now.
- -- Maarten Lankhorst <maarten.lankhorst@ubuntu.com> Wed, 25 Jun 2014 12:57:16 +0200
+ [ Christopher James Halse Rogers ]
+ * Refresh XMir patch
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com> Fri, 04 Jul 2014 10:40:30 +1000
xorg-server (2:1.15.99.903-3) experimental; urgency=medium
commit 04dff2f45038b067f99935319aa8f40646546c88
Author: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Date: Fri Jul 4 10:40:00 2014 +1000
Refresh xmir patch for 1.16
diff --git a/debian/patches/series b/debian/patches/series
index f6b2b6d..5e74491 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -49,7 +49,7 @@ disable-rotation-transform-gpuscreens.patch
pixman-validate.patch
fix-ftbfs-ppc64el.patch
-#xmir.patch
+xmir.patch
drm_device_keep_trying.patch
xi2-resize-touch.patch
mi-dont-process-disabled.patch
diff --git a/debian/patches/xmir.patch b/debian/patches/xmir.patch
index d8870de..f60216f 100644
--- a/debian/patches/xmir.patch
+++ b/debian/patches/xmir.patch
@@ -1,14 +1,16 @@
+diff --git a/configure.ac b/configure.ac
+index e5387bf..ec171d9 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -628,6 +628,7 @@
- AC_ARG_ENABLE(libdrm, AS_HELP_STRING([--enable-libdrm], [Build Xorg with libdrm support (default: enabled)]), [DRM=$enableval],[DRM=yes])
- AC_ARG_ENABLE(clientids, AS_HELP_STRING([--disable-clientids], [Build Xorg with client ID tracking (default: enabled)]), [CLIENTIDS=$enableval], [CLIENTIDS=yes])
- AC_ARG_ENABLE(pciaccess, AS_HELP_STRING([--enable-pciaccess], [Build Xorg with pciaccess library (default: enabled)]), [PCI=$enableval], [PCI=yes])
-+AC_ARG_ENABLE(xmir, AS_HELP_STRING([--enable-xmir], [Build support for nesting in Mir (default: auto)]), [XMIR=$enableval], [XMIR=auto])
- AC_ARG_ENABLE(linux_acpi, AS_HELP_STRING([--disable-linux-acpi], [Disable building ACPI support on Linux (if available).]), [enable_linux_acpi=$enableval], [enable_linux_acpi=yes])
+@@ -627,6 +627,7 @@ AC_ARG_ENABLE(linux_acpi, AS_HELP_STRING([--disable-linux-acpi], [Disable buildi
AC_ARG_ENABLE(linux_apm, AS_HELP_STRING([--disable-linux-apm], [Disable building APM support on Linux (if available).]), [enable_linux_apm=$enableval], [enable_linux_apm=yes])
+ AC_ARG_ENABLE(systemd-logind, AS_HELP_STRING([--enable-systemd-logind], [Build systemd-logind support (default: auto)]), [SYSTEMD_LOGIND=$enableval], [SYSTEMD_LOGIND=auto])
+ AC_ARG_ENABLE(suid-wrapper, AS_HELP_STRING([--enable-suid-wrapper], [Build suid-root wrapper for legacy driver support on rootless xserver systems (default: no)]), [SUID_WRAPPER=$enableval], [SUID_WRAPPER=no])
++AC_ARG_ENABLE(xmir, AS_HELP_STRING([--enable-xmir], [Build support for nesting in Mir (default: auto)]), [XMIR=$enableval], [XMIR=auto])
-@@ -1317,6 +1318,15 @@
+ dnl DDXes.
+ AC_ARG_ENABLE(xorg, AS_HELP_STRING([--enable-xorg], [Build Xorg server (default: auto)]), [XORG=$enableval], [XORG=auto])
+@@ -1348,6 +1349,15 @@ if test "x$XINERAMA" = xyes; then
SDK_REQUIRED_MODULES="$SDK_REQUIRED_MODULES $XINERAMAPROTO"
fi
@@ -16,15 +18,15 @@
+ PKG_CHECK_MODULES([XMIR], [mirclient], [XMIR=yes], [XMIR=no])
+ AC_SUBST([XMIR_LIBS])
+ AC_SUBST([XMIR_CFLAGS])
-+ AC_DEFINE(XMIR, 1, [Support Mir nested mode])
++ AC_DEFINE(XMIR, 1, [Support wayland mode])
+ SDK_REQUIRED_MODULES="$SDK_REQUIRED_MODULES mirclient"
-+fi
++fi
+AM_CONDITIONAL(XMIR, [test "x$XMIR" = xyes])
+
AM_CONDITIONAL(XACE, [test "x$XACE" = xyes])
if test "x$XACE" = xyes; then
AC_DEFINE(XACE, 1, [Build X-ACE extension])
-@@ -2504,6 +2514,7 @@
+@@ -2573,6 +2583,7 @@ hw/xfree86/utils/Makefile
hw/xfree86/utils/man/Makefile
hw/xfree86/utils/cvt/Makefile
hw/xfree86/utils/gtf/Makefile
@@ -32,9 +34,11 @@
hw/dmx/config/Makefile
hw/dmx/config/man/Makefile
hw/dmx/doc/Makefile
+diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
+index c5992c3..c9a077f 100644
--- a/hw/xfree86/Makefile.am
+++ b/hw/xfree86/Makefile.am
-@@ -30,15 +30,20 @@
+@@ -34,16 +34,20 @@ if INT10MODULE
INT10_SUBDIR = int10
endif
@@ -45,21 +49,23 @@
SUBDIRS = common ddc x86emu $(INT10_SUBDIR) os-support parser \
ramdac $(VGAHW_SUBDIR) loader modes $(DRI_SUBDIR) \
$(DRI2_SUBDIR) . $(VBE_SUBDIR) i2c dixmods \
-- fbdevhw shadowfb exa $(XF86UTILS_SUBDIR) doc man
-+ fbdevhw shadowfb exa $(XF86UTILS_SUBDIR) doc man \
-+ $(XMIR_SUBDIR)
+ fbdevhw shadowfb exa $(XF86UTILS_SUBDIR) doc man \
+- $(GLAMOR_EGL_SUBDIR)
++ $(GLAMOR_EGL_SUBDIR) $(XMIR_SUBDIR)
DIST_SUBDIRS = common ddc i2c x86emu int10 fbdevhw os-support \
parser ramdac shadowfb vbe vgahw \
loader dixmods dri dri2 exa modes \
-- utils doc man
-+ utils doc man xmir
+- utils doc man glamor_egl
++ utils doc man glamor_egl xmir
bin_PROGRAMS = Xorg
nodist_Xorg_SOURCES = sdksyms.c
+diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
+index 2adef44..f8c3a7e 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
-@@ -118,6 +118,7 @@
+@@ -118,6 +118,7 @@ static ModuleDefault ModuleDefaults[] = {
{.name = "fb",.toLoad = TRUE,.load_opt = NULL},
{.name = "shadow",.toLoad = TRUE,.load_opt = NULL},
#endif
@@ -67,7 +73,7 @@
{.name = NULL,.toLoad = FALSE,.load_opt = NULL}
};
-@@ -260,6 +261,17 @@
+@@ -272,6 +273,17 @@ xf86ModulelistFromConfig(void ***optlist)
return NULL;
}
@@ -85,56 +91,37 @@
if (xf86configptr->conf_modules) {
/* Walk the disable list and let people know what we've parsed to
* not be loaded
+diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
+index 35a673d..082e454 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
-@@ -105,8 +105,6 @@
- extern void (*xf86OSPMClose) (void);
- #endif
-
--static void xf86VTSwitch(void);
--
- /*
- * Allow arbitrary drivers or other XFree86 code to register with our main
- * Wakeup handler.
-@@ -469,7 +467,7 @@
-
- xf86AccessLeave(); /* We need this here, otherwise */
-
-- if (!xf86VTSwitchAway())
-+ if (!xorgMir && !xf86VTSwitchAway())
- goto switch_failed;
-
- #ifdef XF86PM
-@@ -528,7 +526,7 @@
- IHPtr ih;
-
- DebugF("xf86VTSwitch: Entering\n");
-- if (!xf86VTSwitchTo())
-+ if (!xorgMir && !xf86VTSwitchTo())
- return;
-
- #ifdef XF86PM
-@@ -576,7 +574,7 @@
- * xf86VTSwitch --
- * Handle requests for switching the vt.
- */
--static void
-+_X_EXPORT void
- xf86VTSwitch(void)
+@@ -614,6 +614,10 @@ xf86VTSwitch(void)
{
DebugF("xf86VTSwitch()\n");
+
++ /* Host Mir server handles VTs for XMir */
++ if (xorgMir)
++ return;
++
+ #ifdef XFreeXDGA
+ if (!DGAVTSwitch())
+ return;
+diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
+index 984c39b..9b23d9a 100644
--- a/hw/xfree86/common/xf86Globals.c
+++ b/hw/xfree86/common/xf86Globals.c
-@@ -206,3 +206,6 @@
+@@ -204,3 +204,6 @@ Bool xf86VidModeAllowNonLocal = FALSE;
#endif
RootWinPropPtr *xf86RegisteredPropertiesTable = NULL;
Bool xorgHWAccess = FALSE;
+Bool xorgMir = FALSE;
+const char *mirID = NULL;
+const char *mirSocket = NULL;
+diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
+index e2b32a0..d942ffd 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
-@@ -100,7 +100,14 @@
+@@ -100,7 +100,14 @@ xf86DeleteDriver(int drvIndex)
if (xf86DriverList[drvIndex]->module)
UnloadModule(xf86DriverList[drvIndex]->module);
free(xf86DriverList[drvIndex]);
@@ -150,9 +137,11 @@
}
}
+diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
+index 5a45004..931381d 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
-@@ -557,7 +557,7 @@
+@@ -540,7 +540,7 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
* needed at this early stage.
*/
@@ -161,12 +150,13 @@
xorgHWFlags flags = HW_IO;
if (xf86DriverList[i]->Identify != NULL)
-@@ -568,12 +568,21 @@
+@@ -551,12 +551,22 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
GET_REQUIRED_HW_INTERFACES,
&flags);
+ if (xorgMir &&
+ (NEED_IO_ENABLED(flags) || !(flags & HW_SKIP_CONSOLE))) {
++
+ ErrorF("Driver needs flags %lu, incompatible with nested, deleting.\n", flags);
+ xf86DeleteDriver(i);
+ continue;
@@ -183,7 +173,7 @@
}
if (xorgHWOpenConsole)
-@@ -668,9 +677,13 @@
+@@ -644,9 +654,13 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
}
/* Remove (unload) drivers that are not required */
@@ -199,7 +189,7 @@
/*
* At this stage we know how many screens there are.
-@@ -1498,6 +1511,17 @@
+@@ -1479,6 +1493,17 @@ ddxProcessArgument(int argc, char **argv, int i)
xf86Info.ShareVTs = TRUE;
return 1;
}
@@ -217,7 +207,7 @@
/* OS-specific processing */
return xf86ProcessArgument(argc, argv, i);
-@@ -1571,6 +1595,8 @@
+@@ -1552,6 +1577,8 @@ ddxUseMsg(void)
ErrorF
("-novtswitch don't automatically switch VT at reset & exit\n");
ErrorF("-sharevts share VTs with another X server\n");
@@ -226,37 +216,41 @@
/* OS-specific usage */
xf86UseMsg();
ErrorF("\n");
+diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h
+index 6e374eb..226ae5d 100644
--- a/hw/xfree86/common/xf86Priv.h
+++ b/hw/xfree86/common/xf86Priv.h
-@@ -93,6 +93,9 @@
+@@ -91,6 +91,11 @@ extern _X_EXPORT int xf86NumScreens;
extern _X_EXPORT const char *xf86VisualNames[];
extern _X_EXPORT int xf86Verbose; /* verbosity level */
extern _X_EXPORT int xf86LogVerbose; /* log file verbosity level */
++extern _X_EXPORT Bool xorgHWAccess;
+extern _X_EXPORT Bool xorgMir;
+extern _X_EXPORT const char *mirID;
+extern _X_EXPORT const char *mirSocket;
++
extern _X_EXPORT RootWinPropPtr *xf86RegisteredPropertiesTable;
-@@ -149,6 +152,9 @@
- extern _X_EXPORT int (*xf86PMGetEventFromOs) (int fd, pmEvent * events,
+@@ -148,6 +153,7 @@ extern _X_EXPORT int (*xf86PMGetEventFromOs) (int fd, pmEvent * events,
int num);
extern _X_EXPORT pmWait (*xf86PMConfirmEventToOs) (int fd, pmEvent event);
-+extern _X_EXPORT void
-+xf86VTSwitch(void);
-+
++
/* xf86Helper.c */
extern _X_EXPORT void
+ xf86LogInit(void);
+diff --git a/hw/xfree86/ramdac/xf86Cursor.c b/hw/xfree86/ramdac/xf86Cursor.c
+index fac6822..7becd5f 100644
--- a/hw/xfree86/ramdac/xf86Cursor.c
+++ b/hw/xfree86/ramdac/xf86Cursor.c
-@@ -58,7 +58,12 @@
+@@ -58,7 +58,12 @@ xf86InitCursor(ScreenPtr pScreen, xf86CursorInfoPtr infoPtr)
xf86CursorScreenPtr ScreenPriv;
miPointerScreenPtr PointPriv;
- if (!xf86InitHardwareCursor(pScreen, infoPtr))
+ infoPtr->pScrn = xf86ScreenToScrn(pScreen);
-+
++
+ /* If we can't create a hardware cursor don't bother initialising HW cursor support */
+ if (infoPtr->MaxWidth != 0 &&
+ infoPtr->MaxHeight != 0 &&
@@ -264,9 +258,11 @@
return FALSE;
if (!dixRegisterPrivateKey(&xf86CursorScreenKeyRec, PRIVATE_SCREEN, 0))
+diff --git a/hw/xfree86/ramdac/xf86HWCurs.c b/hw/xfree86/ramdac/xf86HWCurs.c
+index 953c86a..d8994be 100644
--- a/hw/xfree86/ramdac/xf86HWCurs.c
+++ b/hw/xfree86/ramdac/xf86HWCurs.c
-@@ -114,8 +114,6 @@
+@@ -114,8 +114,6 @@ xf86InitHardwareCursor(ScreenPtr pScreen, xf86CursorInfoPtr infoPtr)
infoPtr->RealizeCursor = RealizeCursorInterleave0;
}
@@ -275,6 +271,29 @@
return TRUE;
}
+diff --git a/hw/xfree86/xmir/#xmir.h# b/hw/xfree86/xmir/#xmir.h#
+new file mode 100644
+index 0000000..1ca78b1
+--- /dev/null
++++ b/hw/xfree86/xmir/#xmir.h#
+@@ -0,0 +1,14 @@
++
++typedef struct MirBufferInfo {
++ uint32_t name;
++ uint32_t stride;
++} MirBufferInfo;
++
++typedef void (*XMirBufferReceivedProcPtr)(WindowPtr window,
++ MirBufferInfo *info);
++
++typedef struct xmir_screen {
++ XMirBufferReceivedProcPtr BufferNotify;
++ MirSurface *root_surf;
++ RealizeWindowProcPtr RealizeWindow;
++} xmir_screen;
+diff --git a/hw/xfree86/xmir/Makefile.am b/hw/xfree86/xmir/Makefile.am
+new file mode 100644
+index 0000000..80715f8
--- /dev/null
+++ b/hw/xfree86/xmir/Makefile.am
@@ -0,0 +1,26 @@
@@ -304,6 +323,9 @@
+ xmir-private.h
+
+sdk_HEADERS = xmir.h
+diff --git a/hw/xfree86/xmir/xmir-output.c b/hw/xfree86/xmir/xmir-output.c
+new file mode 100644
+index 0000000..6cfb9da
--- /dev/null
+++ b/hw/xfree86/xmir/xmir-output.c
@@ -0,0 +1,678 @@
@@ -632,7 +654,7 @@
+ const char *error_msg;
+
+ if (mode->HDisplay == 0 || mode->VDisplay == 0)
-+ return FALSE;
++ return FALSE;
+
+ xf86Msg(X_INFO, "Initial configuration for crtc %p:\n", crtc);
+ xmir_dump_config(xmir_crtc->config);
@@ -798,7 +820,7 @@
+static void
+xmir_output_destroy(xf86OutputPtr xf86output)
+{
-+ /* The MirDisplayOutput* in driver_private gets cleaned up by
++ /* The MirDisplayOutput* in driver_private gets cleaned up by
+ mir_display_config_destroy() */
+}
+
@@ -816,7 +838,7 @@
+};
+
+static int
-+xmir_visit_set_window_pixmap(WindowPtr window, void *data)
++xmir_visit_set_window_pixmap(WindowPtr window, void* data)
+{
+ struct xmir_visit_set_pixmap_window *visit = data;
+
@@ -895,7 +917,7 @@
+ xmir_update_config(crtc_config);
+
+ /* Trigger RANDR refresh */
-+ RRGetInfo(xf86ScrnToScreen(scrn), TRUE);
++ RRGetInfo(xf86ScrnToScreen(scrn), TRUE);
+}
+
+static void
@@ -982,9 +1004,12 @@
+
+ /* TODO: Use initial Mir state rather than setting up our own */
+ xf86InitialConfiguration(scrn, TRUE);
-+
++
+ return TRUE;
+}
+diff --git a/hw/xfree86/xmir/xmir-private.h b/hw/xfree86/xmir/xmir-private.h
+new file mode 100644
+index 0000000..15d89f0
--- /dev/null
+++ b/hw/xfree86/xmir/xmir-private.h
@@ -0,0 +1,106 @@
@@ -1094,6 +1119,9 @@
+xmir_process_from_eventloop(void);
+
+ #endif /* _MIR_PRIVATE_H */
+diff --git a/hw/xfree86/xmir/xmir-thread-proxy.c b/hw/xfree86/xmir/xmir-thread-proxy.c
+new file mode 100644
+index 0000000..2e60aec
--- /dev/null
+++ b/hw/xfree86/xmir/xmir-thread-proxy.c
@@ -0,0 +1,124 @@
@@ -1147,7 +1175,7 @@
+static int pipefds[2];
+
+static void
-+xmir_wakeup_handler(void *data, int err, void *read_mask)
++xmir_wakeup_handler(void* data, int err, void* read_mask)
+{
+ if (err >= 0 && FD_ISSET(pipefds[0], (fd_set *)read_mask))
+ xmir_process_from_eventloop();
@@ -1190,7 +1218,7 @@
+}
+
+void
-+xmir_post_to_eventloop(xmir_marshall_handler *handler, void *msg)
++xmir_post_to_eventloop(xmir_marshall_handler *handler, void *msg)
+{
+ ssize_t written;
+ const int total_size = sizeof *handler + handler->msg_size;
@@ -1221,6 +1249,9 @@
+ }
+}
+
+diff --git a/hw/xfree86/xmir/xmir-window.c b/hw/xfree86/xmir/xmir-window.c
+new file mode 100644
+index 0000000..18a19bf
--- /dev/null
+++ b/hw/xfree86/xmir/xmir-window.c
@@ -0,0 +1,343 @@
@@ -1559,7 +1590,7 @@
+ xmir->DestroyWindow = screen->DestroyWindow;
+ screen->DestroyWindow = xmir_destroy_window;
+
-+ xmir->submit_rendering_handler =
++ xmir->submit_rendering_handler =
+ xmir_register_handler(&xmir_handle_buffer_available,
+ sizeof (xmir_window *));
+ if (xmir->submit_rendering_handler == NULL)
@@ -1567,6 +1598,9 @@
+
+ return TRUE;
+}
+diff --git a/hw/xfree86/xmir/xmir.c b/hw/xfree86/xmir/xmir.c
+new file mode 100644
+index 0000000..ceb81e1
--- /dev/null
+++ b/hw/xfree86/xmir/xmir.c
@@ -0,0 +1,263 @@
@@ -1621,7 +1655,7 @@
+#include <mir_toolkit/mir_client_library_drm.h>
+
+static DevPrivateKeyRec xmir_screen_private_key;
-+/*
++/*
+ * We have only a single Mir connection, regardless of how many
+ * drivers load.
+ */
@@ -1704,13 +1738,13 @@
+ Bool new_focus = *(Bool *)ctx;
+ xf86Msg(X_INFO, "[XMir] Handling focus event, new_focus = %s\n", new_focus ? "TRUE" : "FALSE");
+
-+ /* TODO: Split xf86VTSwitch out so that we don't need to check xf86VTOwner*/
+ /* TODO: Disable input on startup until we receive a usc ACK */
-+ if (new_focus && !xf86VTOwner())
-+ xf86VTSwitch();
-+
-+ if (!new_focus && xf86VTOwner())
-+ xf86VTSwitch();
++ if (new_focus) {
++ xf86VTEnter();
++ }
++ else {
++ xf86VTLeave();
++ }
+}
+
+static void xmir_handle_lifecycle_event(MirConnection *unused, MirLifecycleState state, void *ctx)
@@ -1747,7 +1781,7 @@
+ xf86Msg(X_WARNING, "xf86Cursor initialisation failed\n");
+
+ /* Hook up focus -> VT switch proxy */
-+ xmir->focus_event_handler =
++ xmir->focus_event_handler =
+ xmir_register_handler(&xmir_handle_focus_event,
+ sizeof(Bool));
+ if (xmir->focus_event_handler == NULL)
@@ -1769,7 +1803,7 @@
+_X_EXPORT void
+xmir_screen_destroy(xmir_screen *xmir)
+{
-+
++
+}
+
+_X_EXPORT void
@@ -1801,11 +1835,11 @@
+
+_X_EXPORT XF86ModuleData xmirModuleData = { &VersRec, xMirSetup, xMirTeardown };
+
-+static void *
-+xMirSetup(void *module, void *opts, int *errmaj, int *errmin)
++static void*
++xMirSetup(void* module, void* opts, int *errmaj, int *errmin)
+{
+ static Bool setupDone = FALSE;
-+
++
+ if (setupDone) {
+ if (errmaj)
+ *errmaj = LDR_ONCEONLY;
@@ -1822,7 +1856,7 @@
+ return NULL;
+ }
+
-+ xmir_init_thread_to_eventloop();
++ xmir_init_thread_to_eventloop();
+
+ setupDone = TRUE;
+
@@ -1830,9 +1864,12 @@
+}
+
+static void
-+xMirTeardown(void *module)
++xMirTeardown(void* module)
+{
+}
+diff --git a/hw/xfree86/xmir/xmir.h b/hw/xfree86/xmir/xmir.h
+new file mode 100644
+index 0000000..78396a3
--- /dev/null
+++ b/hw/xfree86/xmir/xmir.h
@@ -0,0 +1,103 @@
@@ -1906,7 +1943,7 @@
+
+_X_EXPORT void
+xmir_screen_close(ScreenPtr screen, xmir_screen *xmir);
-+
++
+_X_EXPORT void
+xmir_screen_destroy(xmir_screen *xmir);
+
@@ -1939,9 +1976,11 @@
+xmir_screen_for_each_damaged_window(xmir_screen *xmir, xmir_window_proc callback);
+
+#endif /* _XMIR_H */
+diff --git a/include/list.h b/include/list.h
+index 455c670..c5f8d11 100644
--- a/include/list.h
+++ b/include/list.h
-@@ -184,6 +184,14 @@
+@@ -184,6 +184,14 @@ __xorg_list_del(struct xorg_list *prev, struct xorg_list *next)
prev->next = next;
}
@@ -1956,6 +1995,8 @@
/**
* Remove the element from the list it is in. Using this function will reset
* the pointers to/from this element so it is removed from the list. It does
+diff --git a/include/xorg-server.h.in b/include/xorg-server.h.in
+index 8bf9d38..9bcfe7c 100644
--- a/include/xorg-server.h.in
+++ b/include/xorg-server.h.in
@@ -227,4 +227,7 @@
@@ -1966,19 +2007,25 @@
+#undef XMIR
+
#endif /* _XORG_SERVER_H_ */
+diff --git a/test/Makefile.am b/test/Makefile.am
+index 32edc7a..39c86ca 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
-@@ -6,6 +6,9 @@
+@@ -6,7 +6,12 @@ if XORG
# For now, requires xf86 ddx, could be adjusted to use another
SUBDIRS += xi2
noinst_PROGRAMS += xkb input xtest misc fixes xfree86 hashtabletest os signal-logging touch
+-endif
++
+if XMIR
+noinst_PROGRAMS += xmir-thread-proxy
+endif #XMIR
- endif
++
++endif #XORG
check_LTLIBRARIES = libxservertest.la
-@@ -38,6 +41,8 @@
+ TESTS=$(noinst_PROGRAMS)
+@@ -37,6 +42,8 @@ touch_LDADD=$(TEST_LDADD)
signal_logging_LDADD=$(TEST_LDADD)
hashtabletest_LDADD=$(TEST_LDADD)
os_LDADD=$(TEST_LDADD)
@@ -1987,6 +2034,9 @@
libxservertest_la_LIBADD = $(XSERVER_LIBS)
if XORG
+diff --git a/test/xmir-thread-proxy.c b/test/xmir-thread-proxy.c
+new file mode 100644
+index 0000000..7cf19cf
--- /dev/null
+++ b/test/xmir-thread-proxy.c
@@ -0,0 +1,154 @@
@@ -2126,7 +2176,7 @@
+
+ xmir_process_from_eventloop();
+
-+ assert(check == NUM_THREADS);
++ assert(check == NUM_THREADS);
+}
+
+static void
Reply to: