When trying to get the vmap address of an imported buffer, we must
call into the appropriate helper function, to allow the exporter to
establish the vmap, instead of trying to vmap the buffer on our own.

Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
---
 drivers/gpu/drm/etnaviv/etnaviv_gem.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c 
b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
index b22712fdd31e..ce458d8473fe 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
@@ -14,6 +14,7 @@
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */

+#include <linux/dma-buf.h>
 #include <linux/spinlock.h>
 #include <linux/shmem_fs.h>

@@ -357,8 +358,14 @@ void *etnaviv_gem_vaddr(struct drm_gem_object *obj)
 {
        struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);

+       if (etnaviv_obj->vaddr)
+               return etnaviv_obj->vaddr;
+
        mutex_lock(&etnaviv_obj->lock);
-       if (!etnaviv_obj->vaddr) {
+       if (etnaviv_obj->base.import_attach) {
+               etnaviv_obj->vaddr =
+                       dma_buf_vmap(etnaviv_obj->base.import_attach->dmabuf);
+       } else {
                struct page **pages = etnaviv_gem_get_pages(etnaviv_obj);

                if (IS_ERR(pages)) {
-- 
2.7.0.rc3

Reply via email to