diff options
author | Gurchetan Singh <gurchetansingh@chromium.org> | 2017-09-18 15:29:47 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-09-26 20:43:59 -0700 |
commit | ba6bd503a8ac4da5b3f909ded71a3d60451fb372 (patch) | |
tree | 6a93db93c55d0c488b14df3cf0cb6951873bd18b | |
parent | 55525f5735014943e8e2e170ef1ed16bfe4956fe (diff) |
minigbm: add a default (*bo_unmap) implementation
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>
-rw-r--r-- | amdgpu.c | 1 | ||||
-rw-r--r-- | cirrus.c | 1 | ||||
-rw-r--r-- | drv.c | 5 | ||||
-rw-r--r-- | evdi.c | 1 | ||||
-rw-r--r-- | exynos.c | 1 | ||||
-rw-r--r-- | gma500.c | 1 | ||||
-rw-r--r-- | helpers.c | 5 | ||||
-rw-r--r-- | helpers.h | 1 | ||||
-rw-r--r-- | marvell.c | 1 | ||||
-rw-r--r-- | nouveau.c | 1 | ||||
-rw-r--r-- | radeon.c | 1 | ||||
-rw-r--r-- | udl.c | 1 | ||||
-rw-r--r-- | vc4.c | 1 | ||||
-rw-r--r-- | vgem.c | 1 | ||||
-rw-r--r-- | virtio_gpu.c | 1 |
15 files changed, 19 insertions, 4 deletions
@@ -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, }; @@ -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, }; @@ -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); } @@ -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, }; @@ -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 @@ -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, }; @@ -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; @@ -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); @@ -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 @@ -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, }; @@ -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, }; @@ -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, }; @@ -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 @@ -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, }; diff --git a/virtio_gpu.c b/virtio_gpu.c index fe580cd..afdb5a2 100644 --- a/virtio_gpu.c +++ b/virtio_gpu.c @@ -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, }; |