From: Lucas Stach Date: Thu, 6 Jan 2022 20:38:43 +0000 (+0100) Subject: etnaviv: drm: don't cache mmap offset X-Git-Tag: upstream/22.3.5~6654 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5711329cbc037346ed759333294cb198e86bd772;p=platform%2Fupstream%2Fmesa.git etnaviv: drm: don't cache mmap offset The mmap offset is the only information we currently get from DRM_ETNAVIV_GEM_INFO and there is no point in storing this offset after the mapping has been established. Reduce the shared mutable state on the etna_bo by inlining fetching the offset into etna_bo_map. Signed-off-by: Lucas Stach Reviewed-by: Christian Gmeiner Part-of: --- diff --git a/src/etnaviv/drm/etnaviv_bo.c b/src/etnaviv/drm/etnaviv_bo.c index fc91990..b0a3dfa 100644 --- a/src/etnaviv/drm/etnaviv_bo.c +++ b/src/etnaviv/drm/etnaviv_bo.c @@ -220,26 +220,6 @@ struct etna_bo *etna_bo_ref(struct etna_bo *bo) return bo; } -/* get buffer info */ -static int get_buffer_info(struct etna_bo *bo) -{ - int ret; - struct drm_etnaviv_gem_info req = { - .handle = bo->handle, - }; - - ret = drmCommandWriteRead(bo->dev->fd, DRM_ETNAVIV_GEM_INFO, - &req, sizeof(req)); - if (ret) { - return ret; - } - - /* really all we need for now is mmap offset */ - bo->offset = req.offset; - - return 0; -} - /* import a buffer object from DRI2 name */ struct etna_bo *etna_bo_from_name(struct etna_device *dev, uint32_t name) @@ -407,12 +387,18 @@ uint32_t etna_bo_gpu_va(struct etna_bo *bo) void *etna_bo_map(struct etna_bo *bo) { if (!bo->map) { - if (!bo->offset) { - get_buffer_info(bo); - } + int ret; + struct drm_etnaviv_gem_info req = { + .handle = bo->handle, + }; + + ret = drmCommandWriteRead(bo->dev->fd, DRM_ETNAVIV_GEM_INFO, + &req, sizeof(req)); + if (ret) + return NULL; bo->map = os_mmap(0, bo->size, PROT_READ | PROT_WRITE, - MAP_SHARED, bo->dev->fd, bo->offset); + MAP_SHARED, bo->dev->fd, req.offset); if (bo->map == MAP_FAILED) { ERROR_MSG("mmap failed: %s", strerror(errno)); bo->map = NULL; diff --git a/src/etnaviv/drm/etnaviv_priv.h b/src/etnaviv/drm/etnaviv_priv.h index 3cd380f..d9233a1 100644 --- a/src/etnaviv/drm/etnaviv_priv.h +++ b/src/etnaviv/drm/etnaviv_priv.h @@ -109,7 +109,6 @@ struct etna_bo { uint32_t handle; uint32_t flags; uint32_t name; /* flink global handle (DRI2 name) */ - uint64_t offset; /* offset to mmap() */ uint32_t va; /* GPU virtual address */ int refcnt;