gpu: host1x: Do not use mapping cache for job submissions
authorThierry Reding <treding@nvidia.com>
Thu, 24 Mar 2022 10:30:25 +0000 (11:30 +0100)
committerThierry Reding <treding@nvidia.com>
Wed, 6 Apr 2022 13:12:36 +0000 (15:12 +0200)
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: Jon Hunter <jonathanh@nvidia.com>
Tested-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/gpu/host1x/job.c
include/linux/host1x.h

index 5e8c183167b7d087404ac39a4aa0d06c4d8195a4..b2761aa03b95cc1270d47d01f80bec80317d2512 100644 (file)
@@ -175,7 +175,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;
@@ -222,7 +222,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;
index 00278853eadf074b61a005a76b84cc93cd3e5429..c0bf4e581fe9dc0e28457e9bf7a448b7d1256366 100644 (file)
@@ -31,6 +31,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;