xf86-video-intel: 2 commits - src/sna/kgem.c src/sna/sna_display.c src/sna/sna_driver.c src/sna/sna.h

Chris Wilson ickle at kemper.freedesktop.org
Mon Nov 26 07:50:34 PST 2012


 src/sna/kgem.c        |    8 +++-----
 src/sna/sna.h         |    1 +
 src/sna/sna_display.c |   25 +++++++++++++++++++++++++
 src/sna/sna_driver.c  |   17 +----------------
 4 files changed, 30 insertions(+), 21 deletions(-)

New commits:
commit 1e06d19a00f5a5a05369deeb3c5ae15b282c0f92
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Nov 26 15:30:09 2012 +0000

    sna: Disable shadow tracking upon regen
    
    References: https://bugs.freedesktop.org/show_bug.cgi?id=56608
    References: https://bugs.freedesktop.org/show_bug.cgi?id=52255
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna.h b/src/sna/sna.h
index f1b3beb..6028c4f 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -295,6 +295,7 @@ extern void sna_mode_update(struct sna *sna);
 extern void sna_mode_disable_unused(struct sna *sna);
 extern void sna_mode_wakeup(struct sna *sna);
 extern void sna_mode_redisplay(struct sna *sna);
+extern void sna_mode_close(struct sna *sna);
 extern void sna_mode_fini(struct sna *sna);
 
 extern int sna_page_flip(struct sna *sna,
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index aefb6f7..cec2af3 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -2621,6 +2621,31 @@ bool sna_mode_pre_init(ScrnInfoPtr scrn, struct sna *sna)
 	return true;
 }
 
+static Bool sna_mode_has_pending_events(struct sna *sna)
+{
+	struct pollfd pfd;
+	pfd.fd = sna->kgem.fd;
+	pfd.events = POLLIN;
+	return poll(&pfd, 1, 0) == 1;
+}
+
+void
+sna_mode_close(struct sna *sna)
+{
+	xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(sna->scrn);
+	int i;
+
+	/* In order to workaround a kernel bug in not honouring O_NONBLOCK,
+	 * check that the fd is readable before attempting to read the next
+	 * event from drm.
+	 */
+	if (sna_mode_has_pending_events(sna))
+		sna_mode_wakeup(sna);
+
+	for (i = 0; i < xf86_config->num_crtc; i++)
+		sna_crtc_disable_shadow(sna, to_sna_crtc(xf86_config->crtc[i]));
+}
+
 void
 sna_mode_fini(struct sna *sna)
 {
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index f214b90..086be6a 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -62,7 +62,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include <sys/ioctl.h>
 #include <sys/fcntl.h>
-#include <sys/poll.h>
 #include "i915_drm.h"
 
 #ifdef HAVE_VALGRIND
@@ -730,18 +729,6 @@ static void sna_leave_vt(VT_FUNC_ARGS_DECL)
 			   "drmDropMaster failed: %s\n", strerror(errno));
 }
 
-/* In order to workaround a kernel bug in not honouring O_NONBLOCK,
- * check that the fd is readable before attempting to read the next
- * event from drm.
- */
-static Bool sna_mode_has_pending_events(struct sna *sna)
-{
-	struct pollfd pfd;
-	pfd.fd = sna->kgem.fd;
-	pfd.events = POLLIN;
-	return poll(&pfd, 1, 0) == 1;
-}
-
 static Bool sna_early_close_screen(CLOSE_SCREEN_ARGS_DECL)
 {
 	ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
@@ -752,9 +739,7 @@ static Bool sna_early_close_screen(CLOSE_SCREEN_ARGS_DECL)
 	xf86_hide_cursors(scrn);
 	sna_uevent_fini(scrn);
 
-	/* drain the event queues */
-	if (sna_mode_has_pending_events(sna))
-		sna_mode_wakeup(sna);
+	sna_mode_close(sna);
 
 	if (sna->dri_open) {
 		sna_dri_close(sna, screen);
commit d21ed3a6aba5ae227cc5ecd164f3c18bc48c69af
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Nov 26 10:34:28 2012 +0000

    sna: Use a single execobject flag to mark read/write domains
    
    Slight modification to the proposed API to only pass the simplified
    domain tracking now performed by the kernel.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 034e182..7f8774f 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -111,6 +111,7 @@ search_snoop_cache(struct kgem *kgem, unsigned int num_pages, unsigned flags);
 #define LOCAL_I915_PARAM_HAS_NO_RELOC		24
 #define LOCAL_I915_PARAM_HAS_HANDLE_LUT		25
 
+#define LOCAL_EXEC_OBJECT_WRITE			(1<<2)
 #define LOCAL_I915_EXEC_NO_RELOC		(1<<10)
 #define LOCAL_I915_EXEC_HANDLE_LUT		(1<<11)
 
@@ -2313,9 +2314,7 @@ void _kgem_submit(struct kgem *kgem)
 		kgem->exec[i].alignment = 0;
 		kgem->exec[i].offset = rq->bo->presumed_offset;
 		kgem->exec[i].flags = 0;
-		kgem->exec[i].rsvd1 = (I915_GEM_DOMAIN_COMMAND |
-				       I915_GEM_DOMAIN_INSTRUCTION |
-				       I915_GEM_DOMAIN_VERTEX);
+		kgem->exec[i].rsvd1 = 0;
 		kgem->exec[i].rsvd2 = 0;
 
 		rq->bo->target_handle = kgem->has_handle_lut ? i : handle;
@@ -3925,10 +3924,9 @@ uint32_t kgem_add_reloc(struct kgem *kgem,
 		kgem->reloc[index].target_handle = bo->target_handle;
 		kgem->reloc[index].presumed_offset = bo->presumed_offset;
 
-		bo->exec->rsvd1 |= read_write_domain >> 16;
 		if (read_write_domain & 0x7fff) {
 			assert(!bo->snoop || kgem->can_blt_cpu);
-			bo->exec->rsvd1 |= (uint64_t)(read_write_domain & 0x7fff) << 32;
+			bo->exec->flags |= LOCAL_EXEC_OBJECT_WRITE;
 			kgem_bo_mark_dirty(bo);
 		}
 


More information about the xorg-commit mailing list