OSDN Git Service

minigbm: add a default (*bo_unmap) implementation
authorGurchetan Singh <gurchetansingh@chromium.org>
Mon, 18 Sep 2017 22:29:47 +0000 (15:29 -0700)
committerchrome-bot <chrome-bot@chromium.org>
Wed, 27 Sep 2017 03:43:59 +0000 (20:43 -0700)
The (*bo_unmap) function is responsible for unmapping the buffer
and cleaning up any data allocated during (*bo_map). Previously,
we called munmap in drv_bo_unmap(), which caused some confusion.
This method is cleaner.

BUG=chromium:764871
TEST=emerge-betty minigbm

Change-Id: I4dc20cd6b15e79bce21d33f03ebc84480c582981
Reviewed-on: https://chromium-review.googlesource.com/671693
Commit-Ready: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
Reviewed-by: Joe Kniss <djmk@google.com>
Reviewed-by: Tomasz Figa <tfiga@chromium.org>
15 files changed:
amdgpu.c
cirrus.c
drv.c
evdi.c
exynos.c
gma500.c
helpers.c
helpers.h
marvell.c
nouveau.c
radeon.c
udl.c
vc4.c
vgem.c
virtio_gpu.c

index ff1336d..da11081 100644 (file)
--- a/amdgpu.c
+++ b/amdgpu.c
@@ -436,6 +436,7 @@ struct backend backend_amdgpu = {
        .bo_destroy = drv_gem_bo_destroy,
        .bo_import = drv_prime_bo_import,
        .bo_map = amdgpu_bo_map,
+       .bo_unmap = drv_bo_munmap,
        .resolve_format = amdgpu_resolve_format,
 };
 
index 4f0e983..d92bab4 100644 (file)
--- a/cirrus.c
+++ b/cirrus.c
@@ -29,4 +29,5 @@ struct backend backend_cirrus = {
        .bo_destroy = drv_dumb_bo_destroy,
        .bo_import = drv_prime_bo_import,
        .bo_map = drv_dumb_bo_map,
+       .bo_unmap = drv_bo_munmap,
 };
diff --git a/drv.c b/drv.c
index 92e9b24..ff99893 100644 (file)
--- a/drv.c
+++ b/drv.c
@@ -429,10 +429,7 @@ int drv_bo_unmap(struct bo *bo, struct map_info *data)
        pthread_mutex_lock(&bo->drv->driver_lock);
 
        if (!--data->refcount) {
-               if (bo->drv->backend->bo_unmap)
-                       ret = bo->drv->backend->bo_unmap(bo, data);
-               else
-                       ret = munmap(data->addr, data->length);
+               ret = bo->drv->backend->bo_unmap(bo, data);
                drmHashDelete(bo->drv->map_table, data->handle);
                free(data);
        }
diff --git a/evdi.c b/evdi.c
index f66fb2d..829d6ea 100644 (file)
--- a/evdi.c
+++ b/evdi.c
@@ -28,4 +28,5 @@ struct backend backend_evdi = {
        .bo_destroy = drv_dumb_bo_destroy,
        .bo_import = drv_prime_bo_import,
        .bo_map = drv_dumb_bo_map,
+       .bo_unmap = drv_bo_munmap,
 };
index 0d935eb..b21cc2b 100644 (file)
--- a/exynos.c
+++ b/exynos.c
@@ -112,6 +112,7 @@ struct backend backend_exynos = {
        .bo_destroy = drv_gem_bo_destroy,
        .bo_import = drv_prime_bo_import,
        .bo_map = drv_dumb_bo_map,
+       .bo_unmap = drv_bo_munmap,
 };
 
 #endif
index 5b08bc3..c3f3c12 100644 (file)
--- a/gma500.c
+++ b/gma500.c
@@ -28,4 +28,5 @@ struct backend backend_gma500 = {
        .bo_destroy = drv_dumb_bo_destroy,
        .bo_import = drv_prime_bo_import,
        .bo_map = drv_dumb_bo_map,
+       .bo_unmap = drv_bo_munmap,
 };
index 0a09b5a..9d72a6c 100644 (file)
--- a/helpers.c
+++ b/helpers.c
@@ -313,6 +313,11 @@ void *drv_dumb_bo_map(struct bo *bo, struct map_info *data, size_t plane, int pr
        return mmap(0, data->length, prot, MAP_SHARED, bo->drv->fd, map_dumb.offset);
 }
 
+int drv_bo_munmap(struct bo *bo, struct map_info *data)
+{
+       return munmap(data->addr, data->length);
+}
+
 uintptr_t drv_get_reference_count(struct driver *drv, struct bo *bo, size_t plane)
 {
        void *count;
index dc1a7c0..b580643 100644 (file)
--- a/helpers.h
+++ b/helpers.h
@@ -17,6 +17,7 @@ int drv_dumb_bo_destroy(struct bo *bo);
 int drv_gem_bo_destroy(struct bo *bo);
 int drv_prime_bo_import(struct bo *bo, struct drv_import_fd_data *data);
 void *drv_dumb_bo_map(struct bo *bo, struct map_info *data, size_t plane, int prot);
+int drv_bo_munmap(struct bo *bo, struct map_info *data);
 uintptr_t drv_get_reference_count(struct driver *drv, struct bo *bo, size_t plane);
 void drv_increment_reference_count(struct driver *drv, struct bo *bo, size_t plane);
 void drv_decrement_reference_count(struct driver *drv, struct bo *bo, size_t plane);
index 8114ac7..455b033 100644 (file)
--- a/marvell.c
+++ b/marvell.c
@@ -31,6 +31,7 @@ struct backend backend_marvell = {
        .bo_destroy = drv_dumb_bo_destroy,
        .bo_import = drv_prime_bo_import,
        .bo_map = drv_dumb_bo_map,
+       .bo_unmap = drv_bo_munmap,
 };
 
 #endif
index 7cdab3a..e8a02e3 100644 (file)
--- a/nouveau.c
+++ b/nouveau.c
@@ -28,4 +28,5 @@ struct backend backend_nouveau = {
        .bo_destroy = drv_dumb_bo_destroy,
        .bo_import = drv_prime_bo_import,
        .bo_map = drv_dumb_bo_map,
+       .bo_unmap = drv_bo_munmap,
 };
index baf42ed..3af0be1 100644 (file)
--- a/radeon.c
+++ b/radeon.c
@@ -28,4 +28,5 @@ struct backend backend_radeon = {
        .bo_destroy = drv_dumb_bo_destroy,
        .bo_import = drv_prime_bo_import,
        .bo_map = drv_dumb_bo_map,
+       .bo_unmap = drv_bo_munmap,
 };
diff --git a/udl.c b/udl.c
index eb15fbe..dc3c4eb 100644 (file)
--- a/udl.c
+++ b/udl.c
@@ -28,4 +28,5 @@ struct backend backend_udl = {
        .bo_destroy = drv_dumb_bo_destroy,
        .bo_import = drv_prime_bo_import,
        .bo_map = drv_dumb_bo_map,
+       .bo_unmap = drv_bo_munmap,
 };
diff --git a/vc4.c b/vc4.c
index c797bd9..6dca979 100644 (file)
--- a/vc4.c
+++ b/vc4.c
@@ -87,6 +87,7 @@ struct backend backend_vc4 = {
        .bo_import = drv_prime_bo_import,
        .bo_destroy = drv_gem_bo_destroy,
        .bo_map = vc4_bo_map,
+       .bo_unmap = drv_bo_munmap,
 };
 
 #endif
diff --git a/vgem.c b/vgem.c
index 4e6eefb..0152b47 100644 (file)
--- a/vgem.c
+++ b/vgem.c
@@ -67,5 +67,6 @@ struct backend backend_vgem = {
        .bo_destroy = drv_dumb_bo_destroy,
        .bo_import = drv_prime_bo_import,
        .bo_map = drv_dumb_bo_map,
+       .bo_unmap = drv_bo_munmap,
        .resolve_format = vgem_resolve_format,
 };
index fe580cd..afdb5a2 100644 (file)
@@ -67,5 +67,6 @@ struct backend backend_virtio_gpu = {
        .bo_destroy = drv_dumb_bo_destroy,
        .bo_import = drv_prime_bo_import,
        .bo_map = drv_dumb_bo_map,
+       .bo_unmap = drv_bo_munmap,
        .resolve_format = virtio_gpu_resolve_format,
 };