xf86-video-intel: 2 commits - src/sna/sna_display.c src/sna/sna_dri2.c

Chris Wilson ickle at kemper.freedesktop.org
Tue Jan 19 00:52:32 PST 2016


 src/sna/sna_display.c |   10 ++++++++++
 src/sna/sna_dri2.c    |   17 +++++++++++++++--
 2 files changed, 25 insertions(+), 2 deletions(-)

New commits:
commit 928050d4e4b0ee958be897d148b60328e9207228
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Jan 19 08:49:18 2016 +0000

    sna/dri2: Catch setting signal=true when we have no drawable
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c
index 63c4932..0e18456 100644
--- a/src/sna/sna_dri2.c
+++ b/src/sna/sna_dri2.c
@@ -1507,6 +1507,7 @@ draw_current_msc(DrawablePtr draw, xf86CrtcPtr crtc, uint64_t msc)
 {
 	struct dri2_window *priv;
 
+	assert(draw);
 	if (draw->type != DRAWABLE_WINDOW)
 		return msc;
 
@@ -1595,6 +1596,8 @@ static void fake_swap_complete(struct sna *sna, ClientPtr client,
 {
 	const struct ust_msc *swap;
 
+	assert(draw);
+
 	swap = sna_crtc_last_swap(crtc);
 	DBG(("%s(type=%d): draw=%ld, pipe=%d, frame=%lld [msc %lld], tv=%d.%06d\n",
 	     __FUNCTION__, type, (long)draw->id, crtc ? sna_crtc_pipe(crtc) : -1,
@@ -1716,6 +1719,8 @@ sna_dri2_client_gone(CallbackListPtr *list, void *closure, void *data)
 
 		event->client = NULL;
 		event->draw = NULL;
+		event->keepalive = 1;
+		assert(!event->signal);
 
 		if (!event->queued)
 			sna_dri2_event_free(event);
@@ -1751,6 +1756,7 @@ sna_dri2_add_event(struct sna *sna,
 	struct dri2_window *priv;
 	struct sna_dri2_event *info, *chain;
 
+	assert(draw != NULL);
 	assert(draw->type == DRAWABLE_WINDOW);
 	DBG(("%s: adding event to window %ld)\n",
 	     __FUNCTION__, (long)draw->id));
@@ -1852,6 +1858,8 @@ void sna_dri2_destroy_window(WindowPtr win)
 
 			info->signal = false;
 			info->draw = NULL;
+			info->keepalive = 1;
+			assert(!info->signal);
 			list_del(&info->link);
 
 			chain = info->chain;
@@ -2636,8 +2644,10 @@ void sna_dri2_vblank_handler(struct drm_event_vblank *event)
 			else
 				__sna_dri2_copy_event(info, info->sync | DRI2_BO);
 
-			info->keepalive++;
-			info->signal = true;
+			if (info->draw) {
+				info->keepalive++;
+				info->signal = true;
+			}
 		}
 
 		if (--info->keepalive) {
@@ -2729,6 +2739,7 @@ sna_dri2_immediate_blit(struct sna *sna,
 			bool signal = chain->signal;
 
 			DBG(("%s: swap elision, unblocking client\n", __FUNCTION__));
+			assert(chain->draw);
 			chain->signal = true;
 			frame_swap_complete(chain, DRI2_EXCHANGE_COMPLETE);
 			chain->signal = signal;
@@ -3072,6 +3083,7 @@ sna_dri2_schedule_flip(ClientPtr client, DrawablePtr draw, xf86CrtcPtr crtc,
 			} else {
 				info->flip_continue = FLIP_COMPLETE;
 				signal = info->signal;
+				assert(info->draw);
 				info->signal = true;
 				goto new_back;
 			}
@@ -3363,6 +3375,7 @@ skip:
 		info->type = SWAP_COMPLETE;
 		info->event_complete = func;
 		info->event_data = data;
+		assert(info->draw);
 		info->signal = true;
 
 		info->front = sna_dri2_reference_buffer(front);
commit d04e3f63f98eab02614119d59f5df6767bbbf11a
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Tue Jan 12 09:28:34 2016 +0000

    sna: Setup the GTT domain on the new cursors
    
    We should not rely on first-fault setting the domain for us.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 60bc42b..8082e9f 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -657,6 +657,7 @@ static uint32_t gem_create(int fd, int size)
 static void *gem_mmap(int fd, int handle, int size)
 {
 	struct drm_i915_gem_mmap_gtt mmap_arg;
+	struct drm_i915_gem_set_domain set_domain;
 	void *ptr;
 
 	VG_CLEAR(mmap_arg);
@@ -668,6 +669,15 @@ static void *gem_mmap(int fd, int handle, int size)
 	if (ptr == MAP_FAILED)
 		return NULL;
 
+	VG_CLEAR(set_domain);
+	set_domain.handle = handle;
+	set_domain.read_domains = I915_GEM_DOMAIN_GTT;
+	set_domain.write_domain = I915_GEM_DOMAIN_GTT;
+	if (drmIoctl(fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &set_domain)) {
+		munmap(ptr, size);
+		return NULL;
+	}
+
 	return ptr;
 }
 


More information about the xorg-commit mailing list