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>
This commit is contained in:
Gurchetan Singh 2017-09-18 15:29:47 -07:00 committed by chrome-bot
parent 55525f5735
commit ba6bd503a8
15 changed files with 19 additions and 4 deletions

View file

@ -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,
};

View file

@ -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,
};

5
drv.c
View file

@ -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);
}

1
evdi.c
View file

@ -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,
};

View file

@ -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

View file

@ -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,
};

View file

@ -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;

View file

@ -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);

View file

@ -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

View file

@ -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,
};

View file

@ -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,
};

1
udl.c
View file

@ -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,
};

1
vc4.c
View file

@ -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

1
vgem.c
View file

@ -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,
};

View 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,
};