xf86-video-intel: 3 commits - src/sna/kgem.c src/sna/sna_driver.c src/sna/sna.h
Chris Wilson
ickle at kemper.freedesktop.org
Wed Apr 10 02:40:35 PDT 2013
src/sna/kgem.c | 7 ++++++-
src/sna/sna.h | 1 +
src/sna/sna_driver.c | 19 ++++++++++++++++---
3 files changed, 23 insertions(+), 4 deletions(-)
New commits:
commit 540802595fee7f8b2c73e74c2b44e9a21f6471ae
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Apr 10 10:33:48 2013 +0100
sna: Suppress hotplug events whilst VT switched away
Whilst we are not DRM master, not only is another server in control of
the outputs and responding to the udev event, we ourselves cannot
change modes and just cause contention upon the DRM device. Instead
inform userspace of the change as soon as we are DRM master again and
back in control.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna.h b/src/sna/sna.h
index 13a5ce3..61f2672 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -206,6 +206,7 @@ struct sna {
#define SNA_TRIPLE_BUFFER 0x4
#define SNA_TEAR_FREE 0x10
#define SNA_FORCE_SHADOW 0x20
+#define SNA_REPROBE 0x80000000
unsigned cpu_features;
#define MMX 0x1
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index 0458743..5c8ba2d 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -734,8 +734,11 @@ sna_handle_uevents(int fd, void *closure)
if (memcmp(&s.st_rdev, &udev_devnum, sizeof (dev_t)) == 0 &&
hotplug && atoi(hotplug) == 1) {
DBG(("%s: hotplug event\n", __FUNCTION__));
- sna_mode_update(sna);
- RRGetInfo(xf86ScrnToScreen(scrn), TRUE);
+ if (sna->scrn->vtSema) {
+ sna_mode_update(sna);
+ RRGetInfo(xf86ScrnToScreen(scrn), TRUE);
+ } else
+ sna->flags |= SNA_REPROBE;
}
udev_device_unref(dev);
@@ -1106,9 +1109,19 @@ static void sna_free_screen(FREE_SCREEN_ARGS_DECL)
static Bool sna_enter_vt(VT_FUNC_ARGS_DECL)
{
SCRN_INFO_PTR(arg);
+ struct sna *sna = to_sna(scrn);
DBG(("%s\n", __FUNCTION__));
- return sna_become_master(to_sna(scrn));
+ if (!sna_become_master(sna))
+ return FALSE;
+
+ if (sna->flags & SNA_REPROBE) {
+ sna_mode_update(sna);
+ RRGetInfo(xf86ScrnToScreen(scrn), TRUE);
+ sna->flags &= ~SNA_REPROBE;
+ }
+
+ return TRUE;
}
static Bool sna_switch_mode(SWITCH_MODE_ARGS_DECL)
commit 7afe2b45556f07b7e3a36e36da5a6d1c60366c25
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Apr 9 20:57:23 2013 +0100
sna: Add a DBG option for testing userptr more thoroughly
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 67978c5..4b13cc0 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -62,6 +62,7 @@ search_snoop_cache(struct kgem *kgem, unsigned int num_pages, unsigned flags);
#define DBG_NO_CACHE_LEVEL 0
#define DBG_NO_CPU 0
#define DBG_NO_USERPTR 0
+#define DBG_NO_UNSYNCHRONIZED_USERPTR 0
#define DBG_NO_LLC 0
#define DBG_NO_SEMAPHORES 0
#define DBG_NO_MADV 0
@@ -240,7 +241,8 @@ static uint32_t gem_userptr(int fd, void *ptr, int size, int read_only)
if (read_only)
arg.flags |= I915_USERPTR_READ_ONLY;
- if (drmIoctl(fd, LOCAL_IOCTL_I915_GEM_USERPTR, &arg)) {
+ if (DBG_NO_UNSYNCHRONIZED_USERPTR ||
+ drmIoctl(fd, LOCAL_IOCTL_I915_GEM_USERPTR, &arg)) {
arg.flags &= ~I915_USERPTR_UNSYNCHRONIZED;
if (drmIoctl(fd, LOCAL_IOCTL_I915_GEM_USERPTR, &arg)) {
DBG(("%s: failed to map %p + %d bytes: %d\n",
commit fbe081061a2790e0e6e6a4065af313df0d1d6a84
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Apr 9 09:52:13 2013 +0100
sna: Document fence limits for gen4+
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 4136ce9..67978c5 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -3369,6 +3369,9 @@ int kgem_choose_tiling(struct kgem *kgem, int tiling, int width, int height, int
__FUNCTION__, width, height));
tiling = -I915_TILING_X;
}
+
+ /* fences limited to 128k (256k on ivb) */
+ assert(width * bpp <= 128 * 1024 * 8);
}
if (tiling < 0)
More information about the xorg-commit
mailing list