diff options
author | Gurchetan Singh <gurchetansingh@chromium.org> | 2017-11-14 18:20:27 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-11-16 10:46:57 -0800 |
commit | ee43c301c21976fb82538261c4e4288ffc754777 (patch) | |
tree | ccf45cdc8da5ecb926333e659f68930f39063942 | |
parent | cfedbcc8d475fca39ac0a0d4bc6e4881937e2875 (diff) |
minigbm: use struct vma for (*bo_map)/(*bo_unmap) callbacks
This sets better expectations for what we expect from the
backends.
BUG=chromium:764871
TEST=mmap_test
Change-Id: I7fb815b58fae8e9fbd73bf7c0263c7db44488844
Reviewed-on: https://chromium-review.googlesource.com/770519
Commit-Ready: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
Reviewed-by: Joe Kniss <djmk@google.com>
Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
-rw-r--r-- | amdgpu.c | 4 | ||||
-rw-r--r-- | drv.c | 4 | ||||
-rw-r--r-- | drv_priv.h | 4 | ||||
-rw-r--r-- | helpers.c | 12 | ||||
-rw-r--r-- | helpers.h | 4 | ||||
-rw-r--r-- | i915.c | 8 | ||||
-rw-r--r-- | mediatek.c | 19 | ||||
-rw-r--r-- | rockchip.c | 19 | ||||
-rw-r--r-- | tegra.c | 18 | ||||
-rw-r--r-- | vc4.c | 4 |
10 files changed, 48 insertions, 48 deletions
@@ -406,7 +406,7 @@ static int amdgpu_bo_create(struct bo *bo, uint32_t width, uint32_t height, uint return ret; } -static void *amdgpu_bo_map(struct bo *bo, struct mapping *mapping, size_t plane, uint32_t map_flags) +static void *amdgpu_bo_map(struct bo *bo, struct vma *vma, size_t plane, uint32_t map_flags) { int ret; union drm_amdgpu_gem_mmap gem_map; @@ -420,7 +420,7 @@ static void *amdgpu_bo_map(struct bo *bo, struct mapping *mapping, size_t plane, return MAP_FAILED; } - mapping->vma->length = bo->total_size; + vma->length = bo->total_size; return mmap(0, bo->total_size, drv_get_prot(map_flags), MAP_SHARED, bo->drv->fd, gem_map.out.addr_ptr); @@ -413,7 +413,7 @@ void *drv_bo_map(struct bo *bo, uint32_t x, uint32_t y, uint32_t width, uint32_t } mapping.vma = calloc(1, sizeof(*mapping.vma)); - addr = bo->drv->backend->bo_map(bo, &mapping, plane, map_flags); + addr = bo->drv->backend->bo_map(bo, mapping.vma, plane, map_flags); if (addr == MAP_FAILED) { *map_data = NULL; free(mapping.vma); @@ -448,7 +448,7 @@ int drv_bo_unmap(struct bo *bo, struct mapping *mapping) pthread_mutex_lock(&bo->drv->driver_lock); if (!--mapping->vma->refcount) { - ret = bo->drv->backend->bo_unmap(bo, mapping); + ret = bo->drv->backend->bo_unmap(bo, mapping->vma); free(mapping->vma); } @@ -75,8 +75,8 @@ struct backend { uint32_t format, const uint64_t *modifiers, uint32_t count); int (*bo_destroy)(struct bo *bo); int (*bo_import)(struct bo *bo, struct drv_import_fd_data *data); - void *(*bo_map)(struct bo *bo, struct mapping *mapping, size_t plane, uint32_t map_flags); - int (*bo_unmap)(struct bo *bo, struct mapping *mapping); + void *(*bo_map)(struct bo *bo, struct vma *vma, size_t plane, uint32_t map_flags); + int (*bo_unmap)(struct bo *bo, struct vma *vma); int (*bo_invalidate)(struct bo *bo, struct mapping *mapping); int (*bo_flush)(struct bo *bo, struct mapping *mapping); uint32_t (*resolve_format)(uint32_t format, uint64_t use_flags); @@ -309,7 +309,7 @@ int drv_prime_bo_import(struct bo *bo, struct drv_import_fd_data *data) return 0; } -void *drv_dumb_bo_map(struct bo *bo, struct mapping *mapping, size_t plane, uint32_t map_flags) +void *drv_dumb_bo_map(struct bo *bo, struct vma *vma, size_t plane, uint32_t map_flags) { int ret; size_t i; @@ -326,15 +326,15 @@ void *drv_dumb_bo_map(struct bo *bo, struct mapping *mapping, size_t plane, uint for (i = 0; i < bo->num_planes; i++) if (bo->handles[i].u32 == bo->handles[plane].u32) - mapping->vma->length += bo->sizes[i]; + vma->length += bo->sizes[i]; - return mmap(0, mapping->vma->length, drv_get_prot(map_flags), MAP_SHARED, bo->drv->fd, + return mmap(0, vma->length, drv_get_prot(map_flags), MAP_SHARED, bo->drv->fd, map_dumb.offset); } -int drv_bo_munmap(struct bo *bo, struct mapping *mapping) +int drv_bo_munmap(struct bo *bo, struct vma *vma) { - return munmap(mapping->vma->addr, mapping->vma->length); + return munmap(vma->addr, vma->length); } int drv_mapping_destroy(struct bo *bo) @@ -359,7 +359,7 @@ int drv_mapping_destroy(struct bo *bo) } if (!--mapping->vma->refcount) { - ret = bo->drv->backend->bo_unmap(bo, mapping); + ret = bo->drv->backend->bo_unmap(bo, mapping->vma); if (ret) { fprintf(stderr, "drv: munmap failed"); return ret; @@ -18,8 +18,8 @@ int drv_dumb_bo_create(struct bo *bo, uint32_t width, uint32_t height, uint32_t 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 mapping *mapping, size_t plane, uint32_t map_flags); -int drv_bo_munmap(struct bo *bo, struct mapping *mapping); +void *drv_dumb_bo_map(struct bo *bo, struct vma *vma, size_t plane, uint32_t map_flags); +int drv_bo_munmap(struct bo *bo, struct vma *vma); int drv_mapping_destroy(struct bo *bo); int drv_get_prot(uint32_t map_flags); uintptr_t drv_get_reference_count(struct driver *drv, struct bo *bo, size_t plane); @@ -404,7 +404,9 @@ static int i915_bo_create_with_modifiers(struct bo *bo, uint32_t width, uint32_t uint32_t format, const uint64_t *modifiers, uint32_t count) { static const uint64_t modifier_order[] = { - I915_FORMAT_MOD_Y_TILED, I915_FORMAT_MOD_X_TILED, DRM_FORMAT_MOD_LINEAR, + I915_FORMAT_MOD_Y_TILED, + I915_FORMAT_MOD_X_TILED, + DRM_FORMAT_MOD_LINEAR, }; uint64_t modifier; @@ -445,7 +447,7 @@ static int i915_bo_import(struct bo *bo, struct drv_import_fd_data *data) return 0; } -static void *i915_bo_map(struct bo *bo, struct mapping *mapping, size_t plane, uint32_t map_flags) +static void *i915_bo_map(struct bo *bo, struct vma *vma, size_t plane, uint32_t map_flags) { int ret; void *addr; @@ -489,7 +491,7 @@ static void *i915_bo_map(struct bo *bo, struct mapping *mapping, size_t plane, u return addr; } - mapping->vma->length = bo->total_size; + vma->length = bo->total_size; return addr; } @@ -78,8 +78,7 @@ static int mediatek_bo_create(struct bo *bo, uint32_t width, uint32_t height, ui return 0; } -static void *mediatek_bo_map(struct bo *bo, struct mapping *mapping, size_t plane, - uint32_t map_flags) +static void *mediatek_bo_map(struct bo *bo, struct vma *vma, size_t plane, uint32_t map_flags) { int ret; struct drm_mtk_gem_map_off gem_map; @@ -97,31 +96,31 @@ static void *mediatek_bo_map(struct bo *bo, struct mapping *mapping, size_t plan void *addr = mmap(0, bo->total_size, drv_get_prot(map_flags), MAP_SHARED, bo->drv->fd, gem_map.offset); - mapping->vma->length = bo->total_size; + vma->length = bo->total_size; if (bo->use_flags & BO_USE_RENDERSCRIPT) { priv = calloc(1, sizeof(*priv)); priv->cached_addr = calloc(1, bo->total_size); priv->gem_addr = addr; memcpy(priv->cached_addr, priv->gem_addr, bo->total_size); - mapping->vma->priv = priv; + vma->priv = priv; addr = priv->cached_addr; } return addr; } -static int mediatek_bo_unmap(struct bo *bo, struct mapping *mapping) +static int mediatek_bo_unmap(struct bo *bo, struct vma *vma) { - if (mapping->vma->priv) { - struct mediatek_private_map_data *priv = mapping->vma->priv; - mapping->vma->addr = priv->gem_addr; + if (vma->priv) { + struct mediatek_private_map_data *priv = vma->priv; + vma->addr = priv->gem_addr; free(priv->cached_addr); free(priv); - mapping->vma->priv = NULL; + vma->priv = NULL; } - return munmap(mapping->vma->addr, mapping->vma->length); + return munmap(vma->addr, vma->length); } static int mediatek_bo_flush(struct bo *bo, struct mapping *mapping) @@ -239,8 +239,7 @@ static int rockchip_bo_create(struct bo *bo, uint32_t width, uint32_t height, ui ARRAY_SIZE(modifiers)); } -static void *rockchip_bo_map(struct bo *bo, struct mapping *mapping, size_t plane, - uint32_t map_flags) +static void *rockchip_bo_map(struct bo *bo, struct vma *vma, size_t plane, uint32_t map_flags) { int ret; struct drm_rockchip_gem_map_off gem_map; @@ -263,31 +262,31 @@ static void *rockchip_bo_map(struct bo *bo, struct mapping *mapping, size_t plan void *addr = mmap(0, bo->total_size, drv_get_prot(map_flags), MAP_SHARED, bo->drv->fd, gem_map.offset); - mapping->vma->length = bo->total_size; + vma->length = bo->total_size; if (bo->use_flags & BO_USE_RENDERSCRIPT) { priv = calloc(1, sizeof(*priv)); priv->cached_addr = calloc(1, bo->total_size); priv->gem_addr = addr; memcpy(priv->cached_addr, priv->gem_addr, bo->total_size); - mapping->vma->priv = priv; + vma->priv = priv; addr = priv->cached_addr; } return addr; } -static int rockchip_bo_unmap(struct bo *bo, struct mapping *mapping) +static int rockchip_bo_unmap(struct bo *bo, struct vma *vma) { - if (mapping->vma->priv) { - struct rockchip_private_map_data *priv = mapping->vma->priv; - mapping->vma->addr = priv->gem_addr; + if (vma->priv) { + struct rockchip_private_map_data *priv = vma->priv; + vma->addr = priv->gem_addr; free(priv->cached_addr); free(priv); - mapping->vma->priv = NULL; + vma->priv = NULL; } - return munmap(mapping->vma->addr, mapping->vma->length); + return munmap(vma->addr, vma->length); } static int rockchip_bo_flush(struct bo *bo, struct mapping *mapping) @@ -300,7 +300,7 @@ static int tegra_bo_import(struct bo *bo, struct drv_import_fd_data *data) return 0; } -static void *tegra_bo_map(struct bo *bo, struct mapping *mapping, size_t plane, uint32_t map_flags) +static void *tegra_bo_map(struct bo *bo, struct vma *vma, size_t plane, uint32_t map_flags) { int ret; struct drm_tegra_gem_mmap gem_map; @@ -317,12 +317,12 @@ static void *tegra_bo_map(struct bo *bo, struct mapping *mapping, size_t plane, void *addr = mmap(0, bo->total_size, drv_get_prot(map_flags), MAP_SHARED, bo->drv->fd, gem_map.offset); - mapping->vma->length = bo->total_size; + vma->length = bo->total_size; if ((bo->tiling & 0xFF) == NV_MEM_KIND_C32_2CRA && addr != MAP_FAILED) { priv = calloc(1, sizeof(*priv)); priv->untiled = calloc(1, bo->total_size); priv->tiled = addr; - mapping->vma->priv = priv; + vma->priv = priv; transfer_tiled_memory(bo, priv->tiled, priv->untiled, TEGRA_READ_TILED_BUFFER); addr = priv->untiled; } @@ -330,17 +330,17 @@ static void *tegra_bo_map(struct bo *bo, struct mapping *mapping, size_t plane, return addr; } -static int tegra_bo_unmap(struct bo *bo, struct mapping *mapping) +static int tegra_bo_unmap(struct bo *bo, struct vma *vma) { - if (mapping->vma->priv) { - struct tegra_private_map_data *priv = mapping->vma->priv; - mapping->vma->addr = priv->tiled; + if (vma->priv) { + struct tegra_private_map_data *priv = vma->priv; + vma->addr = priv->tiled; free(priv->untiled); free(priv); - mapping->vma->priv = NULL; + vma->priv = NULL; } - return munmap(mapping->vma->addr, mapping->vma->length); + return munmap(vma->addr, vma->length); } static int tegra_bo_flush(struct bo *bo, struct mapping *mapping) @@ -62,7 +62,7 @@ static int vc4_bo_create(struct bo *bo, uint32_t width, uint32_t height, uint32_ return 0; } -static void *vc4_bo_map(struct bo *bo, struct mapping *mapping, size_t plane, uint32_t map_flags) +static void *vc4_bo_map(struct bo *bo, struct vma *vma, size_t plane, uint32_t map_flags) { int ret; struct drm_vc4_mmap_bo bo_map; @@ -76,7 +76,7 @@ static void *vc4_bo_map(struct bo *bo, struct mapping *mapping, size_t plane, ui return MAP_FAILED; } - mapping->vma->length = bo->total_size; + vma->length = bo->total_size; return mmap(0, bo->total_size, drv_get_prot(map_flags), MAP_SHARED, bo->drv->fd, bo_map.offset); } |