Mesa (master): gallium/winsys/kms: Look up the GEM handle after importing a prime FD

Emil Velikov evelikov at kemper.freedesktop.org
Wed Aug 24 13:39:39 UTC 2016


Module: Mesa
Branch: master
Commit: 577f85e2bba093084d5d2af6047aeb328d708d9b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=577f85e2bba093084d5d2af6047aeb328d708d9b

Author: Tomasz Figa <tfiga at chromium.org>
Date:   Tue Aug  2 19:46:28 2016 +0900

gallium/winsys/kms: Look up the GEM handle after importing a prime FD

drmPrimeHandleToFD() will return the same GEM handle every time the same
buffer is imported, even from a different prime FD. Since GEM handles
are not reference counted, we need to make sure that each GEM handle is
referenced only by one display target struct, by looking it up in
kms_sw->bo_list first and bumping the refcount of the found dt on hit
and falling back to creating a new dt only on miss.

v2: Split into separate function.
    Use helper function for lookup.

v3 [Emil Velikov]:
    Rename kms_sw_displaytarget_{lookup,find_and_ref} (Jordan)

Signed-off-by: Tomasz Figa <tfiga at chromium.org>
CC: <mesa-stable at lists.freedesktop.org>
Reviewed-by: Hans de Goede <hdegoede at redhat.com> (v2)
Signed-off-by: Emil Velikov <emil.velikov at collabora.com>

---

 src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c b/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
index 36ed049..07eca99 100644
--- a/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
+++ b/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c
@@ -244,6 +244,10 @@ kms_sw_displaytarget_add_from_prime(struct kms_sw_winsys *kms_sw, int fd,
    if (ret)
       return NULL;
 
+   kms_sw_dt = kms_sw_displaytarget_find_and_ref(kms_sw, handle);
+   if (kms_sw_dt)
+      return kms_sw_dt;
+
    kms_sw_dt = CALLOC_STRUCT(kms_sw_displaytarget);
    if (!kms_sw_dt)
       return NULL;




More information about the mesa-commit mailing list