[Intel-gfx] [PATCH v7 2/2] drm/i915: use pat_index instead of cache_level

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Thu May 11 12:02:50 UTC 2023


On 09/05/2023 18:12, Yang, Fei wrote:
>  > On 09/05/2023 00:48, fei.yang at intel.com wrote:
>  >> From: Fei Yang <fei.yang at intel.com>
>  >>
>  >> Currently the KMD is using enum i915_cache_level to set caching 
> policy for
>  >> buffer objects. This is flaky because the PAT index which really 
> controls
>  >> the caching behavior in PTE has far more levels than what's defined 
> in the
>  >> enum. In addition, the PAT index is platform dependent, having to 
> translate
>  >> between i915_cache_level and PAT index is not reliable, and makes 
> the code
>  >> more complicated.
>  >>
>  >> From UMD's perspective there is also a necessity to set caching 
> policy for
>  >> performance fine tuning. It's much easier for the UMD to directly 
> use PAT
>  >> index because the behavior of each PAT index is clearly defined in 
> Bspec.
>  >> Having the abstracted i915_cache_level sitting in between would only 
> cause
>  >> more ambiguity. PAT is expected to work much like MOCS already works 
> today,
>  >> and by design userspace is expected to select the index that exactly
>  >> matches the desired behavior described in the hardware specification.
>  >>
>  >> For these reasons this patch replaces i915_cache_level with PAT 
> index. Also
>  >> note, the cache_level is not completely removed yet, because the KMD 
> still
>  >> has the need of creating buffer objects with simple cache settings 
> such as
>  >> cached, uncached, or writethrough. For kernel objects, cache_level 
> is used
>  >> for simplicity and backward compatibility. For Pre-gen12 platforms 
> PAT can
>  >> have 1:1 mapping to i915_cache_level, so these two are 
> interchangeable. see
>  >> the use of LEGACY_CACHELEVEL.
>  >>
>  >> One consequence of this change is that gen8_pte_encode is no longer 
> working
>  >> for gen12 platforms due to the fact that gen12 platforms has 
> different PAT
>  >> definitions. In the meantime the mtl_pte_encode introduced 
> specfically for
>  >> MTL becomes generic for all gen12 platforms. This patch renames the MTL
>  >> PTE encode function into gen12_pte_encode and apply it to all gen12. 
> Even
>  >> though this change looks unrelated, but separating them would 
> temporarily
>  >> break gen12 PTE encoding, thus squash them in one patch.
>  >>
>  >> Special note: this patch changes the way caching behavior is 
> controlled in
>  >> the sense that some objects are left to be managed by userspace. For 
> such
>  >> objects we need to be careful not to change the userspace settings.There
>  >> are kerneldoc and comments added around obj->cache_coherent, 
> cache_dirty,
>  >> and how to bypass the checkings by i915_gem_object_has_cache_level. For
>  >> full understanding, these changes need to be looked at together with the
>  >> two follow-up patches, one disables the {set|get}_caching ioctl's 
> and the
>  >> other adds set_pat extension to the GEM_CREATE uAPI.
>  >>
>  >> Bspec: 63019
>  >>
>  >> Cc: Chris Wilson <chris.p.wilson at linux.intel.com>
>  >> Signed-off-by: Fei Yang <fei.yang at intel.com>
>  >> Reviewed-by: Andi Shyti <andi.shyti at linux.intel.com>
>  >> Reviewed-by: Matt Roper <matthew.d.roper at intel.com>

[snip]

>  >> +                                          node.start,
>  >> +                                          i915_gem_get_pat_index(i915,
>  >> +                                                                 
> I915_CACHE_NONE), 0);
>  >>                        wmb(); /* flush modifications to the GGTT 
> (insert_page) */
>  >>                } else {
>  >>                        page_base += offset & PAGE_MASK;
>  >> @@ -1142,6 +1148,19 @@ int i915_gem_init(struct drm_i915_private 
> *dev_priv)
>  >>        unsigned int i;
>  >>        int ret;
>  >>
>  >> +     /*
>  >> +      * In the proccess of replacing cache_level with pat_index a 
> tricky
>  >> +      * dependency is created on the definition of the enum 
> i915_cache_level.
>  >> +      * in case this enum is changed, PTE encode would be broken.
>  >
>  >_I_n
> 
> Sorry, what does this mean?

Start of sentence, capital 'i'.

[snip]

>  > With a pinky promise to improve this all in the near future I won't
>  > grumble to loudly. :) I haven't read all the details, I leave that to
>  > other reviewers, and also assuming some final tweaks as indicated above
>  > please.
> 
> Thanks for all the suggestions, really appreciated.
> May I add your Acked-by?

I can't make myself do it since I really don't like the design that 
much. That's why I said I will not grumble too loudly.

Jira for follow up clean since we both agreed something more elegant is 
possible would be appreciated though.

Regards,

Tvrtko


More information about the dri-devel mailing list