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