debian/changelog | 14 debian/patches/fix-preinit-cleanup-paths.patch | 94 +++ debian/patches/series | 2 debian/patches/xmir.patch | 714 +++++++++++++++---------- 4 files changed, 554 insertions(+), 270 deletions(-)
New commits: commit bfc1b6badcc5010cabfed0509894853895364aa5 Author: Christopher James Halse Rogers <r...@ubuntu.com> Date: Thu Aug 15 11:50:39 2013 +1000 Update XMir patch following ickle's branch diff --git a/debian/changelog b/debian/changelog index 6a74bb1..cfbca0c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +xserver-xorg-video-intel (2:2.21.12-1ubuntu3) saucy; urgency=low + + * fix-preinit-cleanup-paths.patch: Upstream cherrypick to fix leaks in + sna_pre_init failure paths. Prerequisite for new XMir patch. + * xmir.patch: Update to follow upstream developments + + -- Christopher James Halse Rogers <r...@ubuntu.com> Thu, 15 Aug 2013 11:46:10 +1000 + xserver-xorg-video-intel (2:2.21.12-1ubuntu2) saucy; urgency=low * Fix crash in sna_adjust_frame under XMir (LP: #1212065) diff --git a/debian/patches/fix-preinit-cleanup-paths.patch b/debian/patches/fix-preinit-cleanup-paths.patch new file mode 100644 index 0000000..72065a5 --- /dev/null +++ b/debian/patches/fix-preinit-cleanup-paths.patch @@ -0,0 +1,94 @@ +commit d7465ece29c9ae665a5a9f5bdac764a19062786e +Author: Chris Wilson <ch...@chris-wilson.co.uk> +Date: Mon Jul 29 21:55:29 2013 +0100 + + sna: Cleanup along all error paths in sna_pre_init() + + Only one out of a dozen error paths actually freed the locally allocated + memory, oops. + + Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> + +diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c +index 9c338bb..16dbc91 100644 +--- a/src/sna/sna_driver.c ++++ b/src/sna/sna_driver.c +@@ -276,15 +276,6 @@ cleanup_front: + return FALSE; + } + +-static void PreInitCleanup(ScrnInfoPtr scrn) +-{ +- if (!scrn || !scrn->driverPrivate) +- return; +- +- free(scrn->driverPrivate); +- scrn->driverPrivate = NULL; +-} +- + static void sna_selftest(void) + { + sna_damage_selftest(); +@@ -434,7 +425,7 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags) + if (fd == -1) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, + "Failed to become DRM master.\n"); +- return FALSE; ++ goto cleanup; + } + + preferred_depth = sna->info->gen < 030 ? 15 : 24; +@@ -444,7 +435,7 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags) + if (!xf86SetDepthBpp(scrn, preferred_depth, 0, 0, + Support32bppFb | + SupportConvert24to32 | PreferConvert24to32)) +- return FALSE; ++ goto cleanup; + + switch (scrn->depth) { + case 8: +@@ -458,18 +449,18 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags) + xf86DrvMsg(scrn->scrnIndex, X_ERROR, + "Given depth (%d) is not supported by the Intel driver and this chipset.\n", + scrn->depth); +- return FALSE; ++ goto cleanup; + } + xf86PrintDepthBpp(scrn); + + if (!xf86SetWeight(scrn, defaultWeight, defaultWeight)) +- return FALSE; ++ goto cleanup; + if (!xf86SetDefaultVisual(scrn, -1)) +- return FALSE; ++ goto cleanup; + + sna->Options = intel_options_get(scrn); + if (sna->Options == NULL) +- return FALSE; ++ goto cleanup; + + sna_setup_capabilities(scrn, fd); + +@@ -523,8 +514,7 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags) + if (!sna_mode_pre_init(scrn, sna)) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, + "No outputs and no modes.\n"); +- PreInitCleanup(scrn); +- return FALSE; ++ goto cleanup; + } + scrn->currentMode = scrn->modes; + +@@ -536,6 +526,11 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags) + sna->dri_available = !!xf86LoadSubModule(scrn, "dri2"); + + return TRUE; ++ ++cleanup: ++ scrn->driverPrivate = (void *)((uintptr_t)sna->info | 1); ++ free(sna); ++ return FALSE; + } + + static void diff --git a/debian/patches/series b/debian/patches/series index c72571f..765b2c3 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -2,4 +2,6 @@ sna-note-that-borderClip-region.patch sna-fix-typo-in-computing-box.patch sna-fall-back-to-proc-cpuinfo.patch + +fix-preinit-cleanup-paths.patch xmir.patch diff --git a/debian/patches/xmir.patch b/debian/patches/xmir.patch index 467de7b..454882e 100644 --- a/debian/patches/xmir.patch +++ b/debian/patches/xmir.patch @@ -1,80 +1,33 @@ -commit ea3344d571ff728f5cb84c6920635e552090ec7c +commit b6b5c3f009585151eb772dfc2526843c7cee82b3 Author: Chris Wilson <ch...@chris-wilson.co.uk> -Date: Wed Jul 24 01:44:30 2013 +0100 +Date: Fri Aug 9 11:34:39 2013 +0100 - sna: Preliminary patch for XMir + intel: Disable incompatible features whilst hosted - For the intrepid explorer, who is desperate to encounter all the bugs we - fixed long ago. /o\ + Start adding the infrastructure to disable direct hardware access if X + is being run under a system compositor (aka "hosted"). Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> -Index: xf86-video-intel/src/Makefile.am -=================================================================== ---- xf86-video-intel.orig/src/Makefile.am 2013-08-14 14:01:04.235601828 +1000 -+++ xf86-video-intel/src/Makefile.am 2013-08-14 14:01:04.231601828 +1000 -@@ -46,6 +46,7 @@ - intel_device.c \ - intel_options.c \ - intel_module.c \ -+ intel_xmir.h \ - compat-api.h \ - $(NULL) - -Index: xf86-video-intel/src/intel_device.c -=================================================================== ---- xf86-video-intel.orig/src/intel_device.c 2013-08-14 14:01:04.235601828 +1000 -+++ xf86-video-intel/src/intel_device.c 2013-08-14 14:01:04.231601828 +1000 -@@ -92,7 +92,7 @@ +diff --git a/src/intel_device.c b/src/intel_device.c +index c5f0a38..d9ff8bc 100644 +--- a/src/intel_device.c ++++ b/src/intel_device.c +@@ -92,7 +92,7 @@ static int __intel_check_device(int fd) if (drmIoctl(fd, DRM_IOCTL_I915_GETPARAM, &gp)) ret = FALSE; } - if (ret) { -+ if (ret && !xorgMir) { ++ if (ret && !hosted()) { struct drm_mode_card_res res; memset(&res, 0, sizeof(res)); -@@ -121,10 +121,34 @@ - return fd; - } - -+static int __intel_open_xmir(const struct pci_device *pci, -+ char **path) -+{ -+ char id[20]; -+ int fd; -+ -+ snprintf(id, sizeof(id), -+ "pci:%04x:%02x:%02x.%d", -+ pci->domain, pci->bus, pci->dev, pci->func); -+ fd = xmir_get_drm_fd(id); -+ if (fd == -1) -+ return -1; -+ -+ if (*path == NULL) /* XXX Fix Xmir - it knows both the fd and path */ -+ *path = drmGetDeviceNameFromFd(fd); -+ if (*path == NULL) -+ fd = -1; -+ -+ return fd; -+} -+ - static int __intel_open_device(const struct pci_device *pci, char **path) - { - int fd; - -+ if (xorgMir) -+ return __intel_open_xmir(pci, path); -+ - if (*path == NULL) { - char id[20]; - int ret; -@@ -199,6 +223,12 @@ +@@ -199,6 +199,12 @@ int intel_open_device(int entity_num, dev->open_count = 0; dev->master_count = 0; + /* If hosted under a system compositor, just pretend to be master */ -+ if (xorgMir) { ++ if (hosted()) { + dev->open_count++; + dev->master_count++; + } @@ -82,80 +35,401 @@ Index: xf86-video-intel/src/intel_device.c xf86GetEntityPrivate(entity_num, intel_device_key)->ptr = dev; return fd; -@@ -222,6 +252,8 @@ +@@ -222,6 +228,8 @@ int intel_get_device(ScrnInfoPtr scrn) drmSetVersion sv; int retry = 2000; -+ assert(!xorgMir); ++ assert(!hosted()); + /* Check that what we opened was a master or a * master-capable FD, by setting the version of the * interface we'll use to talk to it. -@@ -267,6 +299,7 @@ +@@ -267,6 +275,7 @@ int intel_get_master(ScrnInfoPtr scrn) if (dev->master_count++ == 0) { int retry = 2000; -+ assert(!xorgMir); ++ assert(!hosted()); do { ret = drmSetMaster(dev->fd); if (ret == 0) -@@ -288,6 +321,7 @@ +@@ -288,6 +297,7 @@ int intel_put_master(ScrnInfoPtr scrn) ret = 0; assert(dev->master_count); if (--dev->master_count == 0) { -+ assert(!xorgMir); ++ assert(!hosted()); assert(drmSetMaster(dev->fd) == 0); ret = drmDropMaster(dev->fd); } -@@ -317,6 +351,7 @@ +@@ -317,6 +327,7 @@ void intel_put_device(ScrnInfoPtr scrn) if (--dev->open_count) return; -+ assert(!xorgMir); ++ assert(!hosted()); intel_set_device(scrn, NULL); drmClose(dev->fd); -Index: xf86-video-intel/src/intel_driver.h -=================================================================== ---- xf86-video-intel.orig/src/intel_driver.h 2013-08-14 14:01:04.235601828 +1000 -+++ xf86-video-intel/src/intel_driver.h 2013-08-14 14:01:04.231601828 +1000 -@@ -1,6 +1,8 @@ - #ifndef INTEL_DRIVER_H - #define INTEL_DRIVER_H - -+#include "intel_xmir.h" -+ - #define INTEL_VERSION 4000 - #define INTEL_NAME "intel" - #define INTEL_DRIVER_NAME "intel" -Index: xf86-video-intel/src/intel_module.c -=================================================================== ---- xf86-video-intel.orig/src/intel_module.c 2013-08-14 14:01:04.235601828 +1000 -+++ xf86-video-intel/src/intel_module.c 2013-08-14 14:01:04.231601828 +1000 -@@ -422,6 +422,9 @@ +diff --git a/src/intel_driver.h b/src/intel_driver.h +index 1e67eab..4768536 100644 +--- a/src/intel_driver.h ++++ b/src/intel_driver.h +@@ -129,4 +129,6 @@ void intel_put_device(ScrnInfoPtr scrn); + + void __intel_uxa_release_device(ScrnInfoPtr scrn); + ++#define hosted() (0) ++ + #endif /* INTEL_DRIVER_H */ +diff --git a/src/intel_module.c b/src/intel_module.c +index 47e494c..42fa8d8 100644 +--- a/src/intel_module.c ++++ b/src/intel_module.c +@@ -382,6 +382,9 @@ static Bool intel_driver_func(ScrnInfoPtr pScrn, #else (*flag) = HW_IO | HW_MMIO; #endif -+ if (xorgMir) ++ if (hosted()) + (*flag) = HW_SKIP_CONSOLE; + return TRUE; default: /* Unknown or deprecated function */ -@@ -533,7 +536,8 @@ +@@ -410,6 +413,9 @@ static enum accel_method { UXA, SNA } get_accel_method(void) + enum accel_method accel_method = DEFAULT_ACCEL_METHOD; + XF86ConfDevicePtr dev; + ++ if (hosted()) ++ return SNA; ++ + dev = _xf86findDriver("intel", xf86configptr->conf_device_lst); + if (dev && dev->dev_option_lst) { + const char *s; +@@ -493,7 +499,8 @@ static Bool intel_pci_probe(DriverPtr driver, case PCI_CHIP_I810_DC100: case PCI_CHIP_I810_E: case PCI_CHIP_I815: - break; -+ if (!xorgMir) ++ if (!hosted()) + break; default: return FALSE; } -Index: xf86-video-intel/src/intel_xmir.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xf86-video-intel/src/intel_xmir.h 2013-08-14 14:01:04.231601828 +1000 +diff --git a/src/sna/sna.h b/src/sna/sna.h +index caf671f..7387088 100644 +--- a/src/sna/sna.h ++++ b/src/sna/sna.h +@@ -229,6 +229,7 @@ struct sna { + #define SNA_TEAR_FREE 0x10 + #define SNA_FORCE_SHADOW 0x20 + #define SNA_FLUSH_GTT 0x40 ++#define SNA_IS_HOSTED 0x80 + #define SNA_REPROBE 0x80000000 + + unsigned cpu_features; +diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c +index 5dcf47f..f86d93d 100644 +--- a/src/sna/sna_display.c ++++ b/src/sna/sna_display.c +@@ -3151,11 +3151,22 @@ sna_crtc_config_notify(ScreenPtr screen) + sna_mode_update(to_sna_from_screen(screen)); + } + ++#if HAS_PIXMAP_SHARING ++#define sna_setup_provider(scrn) xf86ProviderSetup(scrn, NULL, "Intel") ++#else ++#define sna_setup_provider(scrn) ++#endif ++ + bool sna_mode_pre_init(ScrnInfoPtr scrn, struct sna *sna) + { + struct sna_mode *mode = &sna->mode; + int i; + ++ if (sna->flags & SNA_IS_HOSTED) { ++ sna_setup_provider(scrn); ++ return true; ++ } ++ + mode->kmode = drmModeGetResources(sna->kgem.fd); + if (mode->kmode) { + xf86CrtcConfigInit(scrn, &sna_mode_funcs); +@@ -3172,9 +3183,7 @@ bool sna_mode_pre_init(ScrnInfoPtr scrn, struct sna *sna) + if (!xf86IsEntityShared(scrn->entityList[0])) + sna_mode_compute_possible_clones(scrn); + +-#if HAS_PIXMAP_SHARING +- xf86ProviderSetup(scrn, NULL, "Intel"); +-#endif ++ sna_setup_provider(scrn); + } else { + if (!sna_mode_fake_init(sna)) + return false; +@@ -3200,6 +3209,9 @@ sna_mode_close(struct sna *sna) + while (sna_mode_has_pending_events(sna)) + sna_mode_wakeup(sna); + ++ if (sna->flags & SNA_IS_HOSTED) ++ return; ++ + for (i = 0; i < xf86_config->num_crtc; i++) + sna_crtc_disable_shadow(sna, to_sna_crtc(xf86_config->crtc[i])); + } +diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c +index fc8773b..7f2c0ac 100644 +--- a/src/sna/sna_driver.c ++++ b/src/sna/sna_driver.c +@@ -287,7 +287,7 @@ static bool has_pageflipping(struct sna *sna) + drm_i915_getparam_t gp; + int v; + +- if (sna->flags & SNA_NO_WAIT) ++ if (sna->flags & (SNA_IS_HOSTED | SNA_NO_WAIT)) + return false; + + v = 0; +@@ -413,6 +413,7 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags) + sna = to_sna(scrn); + sna->scrn = scrn; + sna->pEnt = pEnt; ++ sna->flags = 0; + + scrn->displayWidth = 640; /* default it */ + +@@ -425,7 +426,7 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags) + fd = intel_get_device(scrn); + if (fd == -1) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, +- "Failed to become DRM master.\n"); ++ "Failed to claim DRM device.\n"); + goto cleanup; + } + +@@ -484,7 +485,6 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags) + if (xf86ReturnOptValBool(sna->Options, OPTION_TILING_FB, FALSE)) + sna->tiling &= ~SNA_TILING_FB; + +- sna->flags = 0; + if (!xf86ReturnOptValBool(sna->Options, OPTION_SWAPBUFFERS_WAIT, TRUE)) + sna->flags |= SNA_NO_WAIT; + if (xf86ReturnOptValBool(sna->Options, OPTION_TRIPLE_BUFFER, TRUE)) +@@ -629,6 +629,9 @@ sna_uevent_init(ScrnInfoPtr scrn) + Bool hotplug; + MessageType from = X_CONFIG; + ++ if (sna->flags & SNA_IS_HOSTED) ++ return; ++ + DBG(("%s\n", __FUNCTION__)); + + /* RandR will be disabled if Xinerama is active, and so generating +@@ -895,7 +898,8 @@ sna_screen_init(SCREEN_INIT_ARGS_DECL) + if (!miDCInitialize(screen, xf86GetPointerScreenFuncs())) + return FALSE; + +- if (xf86_cursors_init(screen, SNA_CURSOR_X, SNA_CURSOR_Y, ++ if ((sna->flags & SNA_IS_HOSTED) == 0 && ++ xf86_cursors_init(screen, SNA_CURSOR_X, SNA_CURSOR_Y, + HARDWARE_CURSOR_TRUECOLOR_AT_8BPP | + HARDWARE_CURSOR_BIT_ORDER_MSBFIRST | + HARDWARE_CURSOR_INVERT_MASK | +diff --git a/src/sna/sna_video_overlay.c b/src/sna/sna_video_overlay.c +index a0b4db9..a68a173 100644 +--- a/src/sna/sna_video_overlay.c ++++ b/src/sna/sna_video_overlay.c +@@ -683,6 +683,9 @@ void sna_video_overlay_setup(struct sna *sna, ScreenPtr screen) + struct sna_video *video; + XvPortPtr port; + ++ if (sna->flags & SNA_IS_HOSTED) ++ return; ++ + if (!sna_has_overlay(sna)) + return; + +diff --git a/src/sna/sna_video_sprite.c b/src/sna/sna_video_sprite.c +index 07e59bd..a8d50ab 100644 +--- a/src/sna/sna_video_sprite.c ++++ b/src/sna/sna_video_sprite.c +@@ -456,6 +456,9 @@ void sna_video_sprite_setup(struct sna *sna, ScreenPtr screen) + struct sna_video *video; + XvPortPtr port; + ++ if (sna->flags & SNA_IS_HOSTED) ++ return; ++ + memset(&r, 0, sizeof(struct drm_mode_get_plane_res)); + if (drmIoctl(sna->kgem.fd, DRM_IOCTL_MODE_GETPLANERESOURCES, &r)) + return; +commit 3d818c0a36919add462c05d01a64b297f693fa69 +Author: Chris Wilson <ch...@chris-wilson.co.uk> +Date: Wed Aug 14 08:34:46 2013 +0100 + + sna: unwrap old modesetting API whilst hosted + + If we are hosted, then we do not have our own modesetting backend and + calling it results in fireworks. So leave the old modesetting entry + points for the hosting midlayer to control. + + Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> + +diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c +index 7f2c0ac..c27deb6 100644 +--- a/src/sna/sna_driver.c ++++ b/src/sna/sna_driver.c +@@ -1080,6 +1080,15 @@ static Bool sna_pm_event(SCRN_ARG_TYPE arg, pmEvent event, Bool undo) + return TRUE; + } + ++static Bool sna_enter_vt__hosted(VT_FUNC_ARGS_DECL) ++{ ++ return TRUE; ++} ++ ++static void sna_leave_vt__hosted(VT_FUNC_ARGS_DECL) ++{ ++} ++ + Bool sna_init_scrn(ScrnInfoPtr scrn, int entity_num) + { + DBG(("%s: entity_num=%d\n", __FUNCTION__, entity_num)); +@@ -1110,13 +1119,18 @@ Bool sna_init_scrn(ScrnInfoPtr scrn, int entity_num) + + scrn->PreInit = sna_pre_init; + scrn->ScreenInit = sna_screen_init; +- scrn->SwitchMode = sna_switch_mode; +- scrn->AdjustFrame = sna_adjust_frame; +- scrn->EnterVT = sna_enter_vt; +- scrn->LeaveVT = sna_leave_vt; ++ if (!hosted()) { ++ scrn->SwitchMode = sna_switch_mode; ++ scrn->AdjustFrame = sna_adjust_frame; ++ scrn->EnterVT = sna_enter_vt; ++ scrn->LeaveVT = sna_leave_vt; ++ scrn->ValidMode = sna_valid_mode; ++ scrn->PMEvent = sna_pm_event; ++ } else { ++ scrn->EnterVT = sna_enter_vt__hosted; ++ scrn->LeaveVT = sna_leave_vt__hosted; ++ } + scrn->FreeScreen = sna_free_screen; +- scrn->ValidMode = sna_valid_mode; +- scrn->PMEvent = sna_pm_event; + + xf86SetEntitySharable(entity_num); + xf86SetEntityInstanceForScreen(scrn, entity_num, +commit 394978867edf3746c285491db6be41abfe325d87 +Author: Chris Wilson <ch...@chris-wilson.co.uk> +Date: Wed Aug 14 08:38:52 2013 +0100 + + sna: Check that we successfully install the required hosting midlayer + + Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> + +diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c +index c27deb6..83a5bba 100644 +--- a/src/sna/sna_driver.c ++++ b/src/sna/sna_driver.c +@@ -430,6 +430,13 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags) + goto cleanup; + } + ++ /* Sanity check */ ++ if (hosted() && (sna->flags & SNA_IS_HOSTED) == 0) { ++ xf86DrvMsg(scrn->scrnIndex, X_ERROR, ++ "Failed to setup hosted device.\n"); ++ goto cleanup; ++ } ++ + preferred_depth = sna->info->gen < 030 ? 15 : 24; + if (!fb_supports_depth(fd, preferred_depth)) + preferred_depth = 24; +commit 96e2b3c6ee7aad96612a2efad97656a764e197f4 +Author: Chris Wilson <ch...@chris-wilson.co.uk> +Date: Wed Jul 24 01:44:30 2013 +0100 + + sna: Preliminary patch for XMir + + For the intrepid explorer, who is desperate to encounter all the bugs we + fixed long ago. /o\ + + Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> + +diff --git a/src/Makefile.am b/src/Makefile.am +index b0781ca..126bde2 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -59,6 +59,7 @@ intel_drv_la_SOURCES = \ + intel_driver.h \ + intel_options.c \ + intel_module.c \ ++ intel_xmir.h \ + compat-api.h \ + $(NULL) + +diff --git a/src/intel_device.c b/src/intel_device.c +index d9ff8bc..706b156 100644 +--- a/src/intel_device.c ++++ b/src/intel_device.c +@@ -121,10 +121,34 @@ static int fd_set_cloexec(int fd) + return fd; + } + ++static int __intel_open_xmir(const struct pci_device *pci, ++ char **path) ++{ ++ char id[20]; ++ int fd; ++ ++ snprintf(id, sizeof(id), ++ "pci:%04x:%02x:%02x.%d", ++ pci->domain, pci->bus, pci->dev, pci->func); ++ fd = xmir_get_drm_fd(id); ++ if (fd == -1) ++ return -1; ++ ++ if (*path == NULL) /* XXX Fix Xmir - it knows both the fd and path */ ++ *path = drmGetDeviceNameFromFd(fd); ++ if (*path == NULL) ++ fd = -1; ++ ++ return fd; ++} ++ + static int __intel_open_device(const struct pci_device *pci, char **path) + { + int fd; + ++ if (xorgMir) ++ return __intel_open_xmir(pci, path); ++ + if (*path == NULL) { + char id[20]; + int ret; +diff --git a/src/intel_driver.h b/src/intel_driver.h +index 4768536..d5caa4f 100644 +--- a/src/intel_driver.h ++++ b/src/intel_driver.h +@@ -1,6 +1,8 @@ + #ifndef INTEL_DRIVER_H + #define INTEL_DRIVER_H + ++#include "intel_xmir.h" ++ + #define INTEL_VERSION 4000 + #define INTEL_NAME "intel" + #define INTEL_DRIVER_NAME "intel" +@@ -129,6 +131,6 @@ void intel_put_device(ScrnInfoPtr scrn); + + void __intel_uxa_release_device(ScrnInfoPtr scrn); + +-#define hosted() (0) ++#define hosted() (xorgMir) + + #endif /* INTEL_DRIVER_H */ +diff --git a/src/intel_xmir.h b/src/intel_xmir.h +new file mode 100644 +index 0000000..2e3c85a +--- /dev/null ++++ b/src/intel_xmir.h @@ -0,0 +1,15 @@ +#ifndef INTEL_XMIR_H +#define INTEL_XMIR_H @@ -172,11 +446,11 @@ Index: xf86-video-intel/src/intel_xmir.h +#endif + +#endif /* INTEL_XMIR_H */ -Index: xf86-video-intel/src/sna/Makefile.am -=================================================================== ---- xf86-video-intel.orig/src/sna/Makefile.am 2013-08-14 14:01:04.235601828 +1000 -+++ xf86-video-intel/src/sna/Makefile.am 2013-08-14 14:01:04.231601828 +1000 -@@ -73,6 +73,7 @@ +diff --git a/src/sna/Makefile.am b/src/sna/Makefile.am +index 5d5417e..1c5dda0 100644 +--- a/src/sna/Makefile.am ++++ b/src/sna/Makefile.am +@@ -75,6 +75,7 @@ libsna_la_SOURCES = \ sna_video_overlay.c \ sna_video_sprite.c \ sna_video_textured.c \ @@ -184,19 +458,11 @@ Index: xf86-video-intel/src/sna/Makefile.am gen2_render.c \ gen2_render.h \ gen3_render.c \ -Index: xf86-video-intel/src/sna/sna.h -=================================================================== ---- xf86-video-intel.orig/src/sna/sna.h 2013-08-14 14:01:04.235601828 +1000 -+++ xf86-video-intel/src/sna/sna.h 2013-08-14 14:01:04.231601828 +1000 -@@ -218,6 +218,7 @@ - #define SNA_TEAR_FREE 0x10 - #define SNA_FORCE_SHADOW 0x20 - #define SNA_FLUSH_GTT 0x40 -+#define SNA_IS_HOSTED 0x80 - #define SNA_REPROBE 0x80000000 - - unsigned cpu_features; -@@ -271,6 +272,7 @@ +diff --git a/src/sna/sna.h b/src/sna/sna.h +index fe84074..d9ebd75 100644 +--- a/src/sna/sna.h ++++ b/src/sna/sna.h +@@ -283,6 +283,7 @@ struct sna { EntityInfoPtr pEnt; struct pci_device *PciInfo; const struct intel_device_info *info; @@ -204,7 +470,25 @@ Index: xf86-video-intel/src/sna/sna.h ScreenBlockHandlerProcPtr BlockHandler; ScreenWakeupHandlerProcPtr WakeupHandler; -@@ -912,4 +914,18 @@ +@@ -420,6 +421,17 @@ CARD32 sna_render_format_for_depth(int depth); + + void sna_debug_flush(struct sna *sna); + ++static inline void ++get_window_deltas(PixmapPtr pixmap, int16_t *x, int16_t *y) ++{ ++#ifdef COMPOSITE ++ *x = -pixmap->screen_x; ++ *y = -pixmap->screen_y; ++#else ++ *x = *y = 0; ++#endif ++} ++ + static inline bool + get_drawable_deltas(DrawablePtr drawable, PixmapPtr pixmap, int16_t *x, int16_t *y) + { +@@ -930,4 +942,18 @@ void sna_image_composite(pixman_op_t op, uint16_t width, uint16_t height); @@ -223,59 +507,11 @@ Index: xf86-video-intel/src/sna/sna.h +#endif + #endif /* _SNA_H */ -Index: xf86-video-intel/src/sna/sna_display.c -=================================================================== ---- xf86-video-intel.orig/src/sna/sna_display.c 2013-08-14 14:01:04.235601828 +1000 -+++ xf86-video-intel/src/sna/sna_display.c 2013-08-14 14:01:13.183602136 +1000 -@@ -1488,6 +1488,9 @@ - xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(sna->scrn); - xf86CrtcPtr crtc; - -+ if (sna->flags & SNA_IS_HOSTED) -+ return; -+ - if ((unsigned)config->compat_output >= config->num_output) - return; - -@@ -3128,11 +3131,22 @@ - sna_mode_update(to_sna_from_screen(screen)); - } - -+#if HAS_PIXMAP_SHARING -+#define sna_setup_provider(scrn) xf86ProviderSetup(scrn, NULL, "Intel") -+#else -+#define sna_setup_provider(scrn) -+#endif -+ - bool sna_mode_pre_init(ScrnInfoPtr scrn, struct sna *sna) - { - struct sna_mode *mode = &sna->mode; - int i; - -+ if (sna->flags & SNA_IS_HOSTED) { -+ sna_setup_provider(scrn); -+ return true; -+ } -+ - mode->kmode = drmModeGetResources(sna->kgem.fd); - if (mode->kmode) { - xf86CrtcConfigInit(scrn, &sna_mode_funcs); -@@ -3149,9 +3163,7 @@ - if (!xf86IsEntityShared(scrn->entityList[0])) - sna_mode_compute_possible_clones(scrn); - --#if HAS_PIXMAP_SHARING -- xf86ProviderSetup(scrn, NULL, "Intel"); --#endif -+ sna_setup_provider(scrn); - } else { - if (!sna_mode_fake_init(sna)) - return false; -Index: xf86-video-intel/src/sna/sna_dri.c -=================================================================== ---- xf86-video-intel.orig/src/sna/sna_dri.c 2013-08-14 14:01:04.235601828 +1000 -+++ xf86-video-intel/src/sna/sna_dri.c 2013-08-14 14:01:04.231601828 +1000 -@@ -2399,6 +2399,13 @@ +diff --git a/src/sna/sna_dri.c b/src/sna/sna_dri.c +index 1569251..d0db3de 100644 +--- a/src/sna/sna_dri.c ++++ b/src/sna/sna_dri.c +@@ -2272,6 +2272,13 @@ out_complete: } #endif @@ -289,7 +525,7 @@ Index: xf86-video-intel/src/sna/sna_dri.c static bool has_i830_dri(void) { return access(DRI_DRIVER_PATH "/i830_dri.so", R_OK) == 0; -@@ -2474,6 +2481,13 @@ +@@ -2347,6 +2354,13 @@ bool sna_dri_open(struct sna *sna, ScreenPtr screen) info.ReuseBufferNotify = NULL; #endif @@ -303,41 +539,26 @@ Index: xf86-video-intel/src/sna/sna_dri.c #if USE_ASYNC_SWAP info.version = 10; info.AsyncSwap = sna_dri_async_swap; -Index: xf86-video-intel/src/sna/sna_driver.c -=================================================================== ---- xf86-video-intel.orig/src/sna/sna_driver.c 2013-08-14 14:01:04.235601828 +1000 -+++ xf86-video-intel/src/sna/sna_driver.c 2013-08-14 14:01:04.231601828 +1000 -@@ -295,7 +295,7 @@ - drm_i915_getparam_t gp; - int v; - -- if (sna->flags & SNA_NO_WAIT) -+ if (sna->flags & (SNA_IS_HOSTED | SNA_NO_WAIT)) - return false; - - v = 0; -@@ -421,6 +421,7 @@ - sna = to_sna(scrn); - sna->scrn = scrn; - sna->pEnt = pEnt; -+ sna->flags = 0; - - scrn->displayWidth = 640; /* default it */ +diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c +index 83a5bba..6fe49c9 100644 +--- a/src/sna/sna_driver.c ++++ b/src/sna/sna_driver.c +@@ -430,6 +430,9 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags) + goto cleanup; + } -@@ -433,13 +434,21 @@ - fd = intel_get_device(scrn); - if (fd == -1) { ++ if (!sna_xmir_create(sna)) ++ return FALSE; ++ + /* Sanity check */ + if (hosted() && (sna->flags & SNA_IS_HOSTED) == 0) { xf86DrvMsg(scrn->scrnIndex, X_ERROR, -- "Failed to become DRM master.\n"); -+ "Failed to claim DRM device.\n"); - return FALSE; +@@ -437,9 +440,14 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags) + goto cleanup; } - preferred_depth = sna->info->gen < 030 ? 15 : 24; - if (!fb_supports_depth(fd, preferred_depth)) -+ if (!sna_xmir_create(sna)) -+ return FALSE; -+ + if (sna->xmir) { + /* XXX query depth from xmir */ preferred_depth = 24; @@ -349,7 +570,7 @@ Index: xf86-video-intel/src/sna/sna_driver.c if (!xf86SetDepthBpp(scrn, preferred_depth, 0, 0, Support32bppFb | -@@ -475,6 +484,9 @@ +@@ -475,6 +483,9 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags) intel_detect_chipset(scrn, sna->pEnt, sna->PciInfo); @@ -359,15 +580,7 @@ Index: xf86-video-intel/src/sna/sna_driver.c kgem_init(&sna->kgem, fd, sna->PciInfo, sna->info->gen); if (xf86ReturnOptValBool(sna->Options, OPTION_ACCEL_DISABLE, FALSE) || !sna_option_cast_to_bool(sna, OPTION_ACCEL_METHOD, TRUE)) { -@@ -492,7 +504,6 @@ - if (xf86ReturnOptValBool(sna->Options, OPTION_TILING_FB, FALSE)) - sna->tiling &= ~SNA_TILING_FB; - -- sna->flags = 0; - if (!xf86ReturnOptValBool(sna->Options, OPTION_SWAPBUFFERS_WAIT, TRUE)) - sna->flags |= SNA_NO_WAIT; - if (xf86ReturnOptValBool(sna->Options, OPTION_TRIPLE_BUFFER, TRUE)) -@@ -555,6 +566,8 @@ +@@ -558,6 +569,8 @@ sna_block_handler(BLOCKHANDLER_ARGS_DECL) if (*tv == NULL || ((*tv)->tv_usec | (*tv)->tv_sec)) sna_accel_block_handler(sna, tv); @@ -376,17 +589,7 @@ Index: xf86-video-intel/src/sna/sna_driver.c } static void -@@ -633,6 +646,9 @@ - Bool hotplug; - MessageType from = X_CONFIG; - -+ if (sna->flags & SNA_IS_HOSTED) -+ return; -+ - DBG(("%s\n", __FUNCTION__)); - - /* RandR will be disabled if Xinerama is active, and so generating -@@ -885,6 +901,8 @@ +@@ -898,6 +911,8 @@ sna_screen_init(SCREEN_INIT_ARGS_DECL) return FALSE; } @@ -395,49 +598,12 @@ Index: xf86-video-intel/src/sna/sna_driver.c xf86SetBlackWhitePixels(screen); xf86SetBackingStore(screen); -@@ -892,7 +910,8 @@ - if (!miDCInitialize(screen, xf86GetPointerScreenFuncs())) - return FALSE; - -- if (xf86_cursors_init(screen, SNA_CURSOR_X, SNA_CURSOR_Y, -+ if ((sna->flags & SNA_IS_HOSTED) == 0 && -+ xf86_cursors_init(screen, SNA_CURSOR_X, SNA_CURSOR_Y, - HARDWARE_CURSOR_TRUECOLOR_AT_8BPP | - HARDWARE_CURSOR_BIT_ORDER_MSBFIRST | - HARDWARE_CURSOR_INVERT_MASK | -Index: xf86-video-intel/src/sna/sna_video_overlay.c -=================================================================== ---- xf86-video-intel.orig/src/sna/sna_video_overlay.c 2013-08-14 14:01:04.235601828 +1000 -+++ xf86-video-intel/src/sna/sna_video_overlay.c 2013-08-14 14:01:04.231601828 +1000 -@@ -683,6 +683,9 @@ - struct sna_video *video; - XvPortPtr port; - -+ if (sna->flags & SNA_IS_HOSTED) -+ return; -+ - if (!sna_has_overlay(sna)) - return; - -Index: xf86-video-intel/src/sna/sna_video_sprite.c -=================================================================== ---- xf86-video-intel.orig/src/sna/sna_video_sprite.c 2013-08-14 14:01:04.235601828 +1000 -+++ xf86-video-intel/src/sna/sna_video_sprite.c 2013-08-14 14:01:04.231601828 +1000 -@@ -456,6 +456,9 @@ - struct sna_video *video; - XvPortPtr port; - -+ if (sna->flags & SNA_IS_HOSTED) -+ return; -+ - memset(&r, 0, sizeof(struct drm_mode_get_plane_res)); - if (drmIoctl(sna->kgem.fd, DRM_IOCTL_MODE_GETPLANERESOURCES, &r)) - return; -Index: xf86-video-intel/src/sna/sna_xmir.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ xf86-video-intel/src/sna/sna_xmir.c 2013-08-14 14:01:04.231601828 +1000 -@@ -0,0 +1,165 @@ +diff --git a/src/sna/sna_xmir.c b/src/sna/sna_xmir.c +new file mode 100644 +index 0000000..a7c882d +--- /dev/null ++++ b/src/sna/sna_xmir.c +@@ -0,0 +1,163 @@ +/*************************************************************************** + + Copyright 2013 Intel Corporation. All Rights Reserved. @@ -489,7 +655,7 @@ Index: xf86-video-intel/src/sna/sna_xmir.c + +#define FORCE_FULL_REDRAW 0 + -+static bool ++static void +sna_xmir_copy_to_mir(WindowPtr win, RegionPtr region) +{ + PixmapPtr src = get_window_pixmap(win); @@ -497,20 +663,23 @@ Index: xf86-video-intel/src/sna/sna_xmir.c + struct sna_pixmap *priv; + struct kgem_bo *bo; + BoxRec box, *boxes; ++ int16_t sx, sy; + int nbox; -+ bool ret; ++ ++ if (wedged(sna)) /* XXX need pitch/size for CPU copy fallback */ ++ return; + + priv = sna_pixmap_force_to_gpu(src, MOVE_READ); + if (priv == NULL) -+ return false; ++ return; + -+ /* XXX size and pitch are bogus */ ++ /* XXX size and pitch are bogus, but only used for sanity checks */ -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/e1v9slo-0000fx...@vasks.debian.org