[igt-dev] [PATCH i-g-t v31 05/32] lib/intel_batchbuffer: add new functions to support rendercopy

Chris Wilson chris at chris-wilson.co.uk
Wed Aug 26 15:48:41 UTC 2020


Quoting Zbigniew Kempczyński (2020-08-20 07:30:03)
> @@ -1364,7 +1367,7 @@ void intel_bb_destroy(struct intel_bb *ibb)
>  */
>  void intel_bb_reset(struct intel_bb *ibb, bool purge_objects_cache)
>  {
> -       uint64_t bb_address;
> +       uint32_t i;
>  
>         if (purge_objects_cache && ibb->refcount > 1)
>                 igt_warn("Cannot purge objects cache on bb, refcount > 1!");
> @@ -1383,10 +1386,20 @@ void intel_bb_reset(struct intel_bb *ibb, bool purge_objects_cache)
>         gem_close(ibb->i915, ibb->handle);
>         ibb->handle = gem_create(ibb->i915, ibb->size);
>  
> -       bb_address = __intel_bb_propose_offset(ibb);
> -       intel_bb_add_object(ibb, ibb->handle, bb_address, false);
> +       ibb->batch_offset = __intel_bb_propose_offset(ibb);
> +       intel_bb_add_object(ibb, ibb->handle, ibb->batch_offset, false);
>         ibb->ptr = ibb->batch;
>         memset(ibb->batch, 0, ibb->size);
> +
> +       if (purge_objects_cache)
> +               return;
> +
> +       /*
> +        * For reset with no purging cache ensure we keep only supports 48bit
(Missing noun)
> +        * address flag (we don't want to relocate).
> +        */
> +       for (i = 0; i < ibb->num_objects; i++)
> +               ibb->objects[i].flags &= EXEC_OBJECT_SUPPORTS_48B_ADDRESS;
>  }

This is confusing me.

We keep only the 48b flag, "because we don't want to relocate".

So, what I think you mean is that if the object supports a large address
and we have assigned a high virtual address, then we want to make sure
we can reuse that high virtual address next time. If we lose the flag,
the kernel will pick a 32b address for us.

Ok, that makes sense. Comment could do with a second pass :)
-Chris


More information about the igt-dev mailing list