[Mesa-dev] [PATCH 3/8] i965/bufmgr: Drop the BO_ALLOC_BUSY flag
Lionel Landwerlin
lionel.g.landwerlin at intel.com
Thu Jun 14 13:01:31 UTC 2018
On 13/06/18 21:26, Jason Ekstrand wrote:
> ---
> src/mesa/drivers/dri/i965/brw_bufmgr.c | 46 ++++++--------------------
> src/mesa/drivers/dri/i965/brw_bufmgr.h | 1 -
> 2 files changed, 10 insertions(+), 37 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.c b/src/mesa/drivers/dri/i965/brw_bufmgr.c
> index 58bb559fdee..e9d3daa5985 100644
> --- a/src/mesa/drivers/dri/i965/brw_bufmgr.c
> +++ b/src/mesa/drivers/dri/i965/brw_bufmgr.c
> @@ -448,11 +448,6 @@ int
> brw_bo_busy(struct brw_bo *bo)
> {
> struct brw_bufmgr *bufmgr = bo->bufmgr;
I don't really understand this hunk.
It seems related to this patch and undoes what you added in patch 1.
> -
> - /* If we know it's idle, don't bother with the kernel round trip */
> - if (bo->idle && !bo->external)
> - return false;
> -
> struct drm_i915_gem_busy busy = { .handle = bo->gem_handle };
>
> int ret = drmIoctl(bufmgr->fd, DRM_IOCTL_I915_GEM_BUSY, &busy);
> @@ -506,20 +501,11 @@ bo_alloc_internal(struct brw_bufmgr *bufmgr,
> struct bo_cache_bucket *bucket;
> bool alloc_from_cache;
> uint64_t bo_size;
> - bool busy = false;
> bool zeroed = false;
>
> - if (flags & BO_ALLOC_BUSY)
> - busy = true;
> -
> if (flags & BO_ALLOC_ZEROED)
> zeroed = true;
>
> - /* BUSY does doesn't really jive with ZEROED as we have to wait for it to
> - * be idle before we can memset. Just disallow that combination.
> - */
> - assert(!(busy && zeroed));
> -
> /* Round the allocated size up to a power of two number of pages. */
> bucket = bucket_for_size(bufmgr, size);
>
> @@ -539,29 +525,17 @@ bo_alloc_internal(struct brw_bufmgr *bufmgr,
> retry:
> alloc_from_cache = false;
> if (bucket != NULL && !list_empty(&bucket->head)) {
> - if (busy && !zeroed) {
> - /* Allocate new render-target BOs from the tail (MRU)
> - * of the list, as it will likely be hot in the GPU
> - * cache and in the aperture for us. If the caller
> - * asked us to zero the buffer, we don't want this
> - * because we are going to mmap it.
> - */
> - bo = LIST_ENTRY(struct brw_bo, bucket->head.prev, head);
> - list_del(&bo->head);
> + /* For non-render-target BOs (where we're probably
> + * going to map it first thing in order to fill it
> + * with data), check if the last BO in the cache is
> + * unbusy, and only reuse in that case. Otherwise,
> + * allocating a new buffer is probably faster than
> + * waiting for the GPU to finish.
> + */
> + bo = LIST_ENTRY(struct brw_bo, bucket->head.next, head);
> + if (!brw_bo_busy(bo)) {
> alloc_from_cache = true;
> - } else {
> - /* For non-render-target BOs (where we're probably
> - * going to map it first thing in order to fill it
> - * with data), check if the last BO in the cache is
> - * unbusy, and only reuse in that case. Otherwise,
> - * allocating a new buffer is probably faster than
> - * waiting for the GPU to finish.
> - */
> - bo = LIST_ENTRY(struct brw_bo, bucket->head.next, head);
> - if (!brw_bo_busy(bo)) {
> - alloc_from_cache = true;
> - list_del(&bo->head);
> - }
> + list_del(&bo->head);
> }
>
> if (alloc_from_cache) {
> diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.h b/src/mesa/drivers/dri/i965/brw_bufmgr.h
> index 32fc7a553c9..d3b3aadc0db 100644
> --- a/src/mesa/drivers/dri/i965/brw_bufmgr.h
> +++ b/src/mesa/drivers/dri/i965/brw_bufmgr.h
> @@ -195,7 +195,6 @@ struct brw_bo {
> bool cache_coherent;
> };
>
> -#define BO_ALLOC_BUSY (1<<0)
> #define BO_ALLOC_ZEROED (1<<1)
>
> /**
More information about the mesa-dev
mailing list