mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-25 10:42:21 +03:00
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. Bug 3556250 Change-Id: If6043dec54d6f73d1dc773cf854fa68e25c6556e Signed-off-by: Thierry Reding <treding@nvidia.com> Signed-off-by: Jon Hunter <jonathanh@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2693869 Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com> Reviewed-by: svc_kernel_abi <svc_kernel_abi@nvidia.com> GVS: Gerrit_Virtual_Submit
This commit is contained in:
committed by
Laxman Dewangan
parent
64b7110c1d
commit
7d90780d49
@@ -34,6 +34,11 @@ u64 host1x_get_dma_mask(struct host1x *host1x);
|
||||
* struct host1x_bo_cache - host1x buffer object cache
|
||||
* @mappings: 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 list_head mappings;
|
||||
|
||||
@@ -177,7 +177,7 @@ static unsigned int pin_job(struct host1x *host, struct host1x_job *job)
|
||||
goto unpin;
|
||||
}
|
||||
|
||||
map = host1x_bo_pin(dev, bo, direction, &client->cache);
|
||||
map = host1x_bo_pin(dev, bo, direction, NULL);
|
||||
if (IS_ERR(map)) {
|
||||
err = PTR_ERR(map);
|
||||
goto unpin;
|
||||
@@ -224,7 +224,7 @@ static unsigned int pin_job(struct host1x *host, struct host1x_job *job)
|
||||
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)) {
|
||||
err = PTR_ERR(map);
|
||||
goto unpin;
|
||||
|
||||
Reference in New Issue
Block a user