Commit 3e9c4584 authored by Thierry Reding's avatar Thierry Reding

gpu: host1x: Do not use mapping cache for job submissions

Buffer mappings used in job submissions are usually small and not
rapidly reused as opposed to framebuffers (which are usually large and
rapidly reused, for example when page-flipping between double-buffered
framebuffers). Avoid going through the mapping cache for these buffers
since the cache would also lead to leaks if nobody is ever releasing
the cache's last reference. For DRM/KMS these last references are
dropped when the framebuffers are removed and therefore no longer
needed.

While at it, also add a note about the need to explicitly remove the
final reference to the mapping in the cache.
Reviewed-by: default avatarJon Hunter <jonathanh@nvidia.com>
Tested-by: default avatarJon Hunter <jonathanh@nvidia.com>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent fe696ccb
...@@ -175,7 +175,7 @@ static unsigned int pin_job(struct host1x *host, struct host1x_job *job) ...@@ -175,7 +175,7 @@ static unsigned int pin_job(struct host1x *host, struct host1x_job *job)
goto unpin; goto unpin;
} }
map = host1x_bo_pin(dev, bo, direction, &client->cache); map = host1x_bo_pin(dev, bo, direction, NULL);
if (IS_ERR(map)) { if (IS_ERR(map)) {
err = PTR_ERR(map); err = PTR_ERR(map);
goto unpin; goto unpin;
...@@ -222,7 +222,7 @@ static unsigned int pin_job(struct host1x *host, struct host1x_job *job) ...@@ -222,7 +222,7 @@ static unsigned int pin_job(struct host1x *host, struct host1x_job *job)
goto unpin; goto unpin;
} }
map = host1x_bo_pin(host->dev, g->bo, DMA_TO_DEVICE, &host->cache); map = host1x_bo_pin(host->dev, g->bo, DMA_TO_DEVICE, NULL);
if (IS_ERR(map)) { if (IS_ERR(map)) {
err = PTR_ERR(map); err = PTR_ERR(map);
goto unpin; goto unpin;
......
...@@ -31,6 +31,11 @@ u64 host1x_get_dma_mask(struct host1x *host1x); ...@@ -31,6 +31,11 @@ u64 host1x_get_dma_mask(struct host1x *host1x);
* struct host1x_bo_cache - host1x buffer object cache * struct host1x_bo_cache - host1x buffer object cache
* @mappings: list of mappings * @mappings: list of mappings
* @lock: synchronizes accesses to the list of mappings * @lock: synchronizes accesses to the list of mappings
*
* Note that entries are not periodically evicted from this cache and instead need to be
* explicitly released. This is used primarily for DRM/KMS where the cache's reference is
* released when the last reference to a buffer object represented by a mapping in this
* cache is dropped.
*/ */
struct host1x_bo_cache { struct host1x_bo_cache {
struct list_head mappings; struct list_head mappings;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment