On 10/13/2023 10:52, Jonathan Cavitt wrote:
Implement GuC-based TLB invalidations and use them on MTL.

Some complexity in the implementation was introduced early on
and will be required for range-based TLB invalidations.
RFC: https://patchwork.freedesktop.org/series/124922/

v2:
- Add missing supporting patches.

v3:
- Split suspend/resume changes and multi-gt support into separate
   patches.
- Only perform GuC TLB invalidation functions when supported.
- Move intel_guc_is_enabled check function to usage location.
- Address comments.

v4:
- Change conditions for GuC-based tlb invalidation support
   to a pci tag that's only active for MTL.
- Address some FIXMEs and formatting issues.
- Move suspend/resume changes to helper functions in intel_gt.h
- Improve comment for ct_handle_event change.
- Use cleaner if-else conditions.
- Address comments.

v5:
- Reintroduce missing change to selftest msleep duration
- Move suspend/resume loops from intel_gt.h to intel_tlb.c,
   making them no longer static inlines.
- Remove superfluous blocking and error checks.
- Move ct_handle_event exception to general case in
   ct_process_request.
- Explain usage of xa_alloc_cyclic_irq.
- Modify explanation of purpose of
   OUTSTANDING_GUC_TIMEOUT_PERIOD macro.
- Explain purpose of performing tlb invalidation twice in
   intel_gt_tlb_resume_all.

v6:
- Add this cover letter.
- Fix explanation of purpose of
   OUTSTANDING_GUC_TIMEOUT_PERIOD macro again.
- s/pci tags/pci flags
- Enable GuC TLB Invalidations separately from adding the
   flags to do so.

v7:
- Eliminate pci terminology from patches.
- Order new device info flag correctly.
- Run gen8_ggtt_invalidate in more cases, specifically when
   GuC-based TLB invalidation is not supported.
- Use intel_uncore_write_fw instead of intel_uncore_write
   during guc_ggtt_invalidate.
- Remove duplicate request message clear in ct_process_request.
- Remove faulty tag from series.

v8:
- Simplify cover letter contents.
- Fix miscellaneous formatting and typos.
- Reorder device info flags and defines.
- Reword commit message.
- Rename TLB invalidation enums and functions.
- Add comments explaining confusing points.
- Add helper function getting expected delay of CT buffer.
- Simplify intel_guc_tlb_invalidation_done by passing computed
   values.
- Remove helper functions for tlb suspend and resume.
- Move tlb suspend and resume paths to uc.
- Split suspend/resume and wedged into two patches.
- Clarify purpose of sleep change in tlb selftest.

v9:
- Explain complexity of GuC TLB invalidations as required for
   range-based TLB invalidations, which will be platformed later.
- Fix CHECKPATCH issues.
- Explain intel_guc_is_ready tlb invalidation skip in
   intel_gt_invalidate_tlb_full.
- Reword comment for unlocked xa_for_each loop in
   intel_guc_submission_reset.
- Report all errors in init_tlb_lookup.
- Remove debug message from fini_tlb_lookup.
- Use standardized interface for
   intel_guc_tlb_invalidation_done
- Remove spurious changes.
- Move wake_up_all_tlb_invalidate on wedge to correct patch.

v10:
- Add lock to tlb_lookup on guc submission reset.
- Add comment about why timeout increased from 10 ms to 20 ms
   by default in gt_tlb selftest.
- Remove spurious changes.

v11:
- Update CT size delay helper to be clearer.
- Reorder some function declarations.
- Clarify some comments.
- Produce error message if attempting to free a busy wait
   during fini_tlb_lookup.
- Revert default sleep back to 10 ms.
- Link to RFC.

v12:
- Add helper for checking if GuC TLB invalidation is
   supported and guc is ready.
- Prevent suspend/resume actions involving GuC TLB
   invalidations if guc is not ready.
- Add path for INTEL_GUC_ACTION_TLB_INVALIDATION_DONE
   to immediately process in ct_process_request after
   it is submitted to ct_handle_event.

v13:
- Readd error check in intel_guc_tlb_invalidation_done
   for invalid length.
- Remove intel_guc_is_ready requirement from
   wake_up_all_tlb_invalidate.
- Align patches 3 and 4 by adding a check for GuC
   TLB invalidation support to the former that was
   added in the latter.

v14:
- Readd intel_guc_is_ready requirement to
   wake_up_all_tlb_invalidate.
Can you please use 're-add'. It took me some time to realise this wasn't a typo for 'read' or 'ready'.

- Move wake_up_all_tlb_invalidate from
   intel_guc_submission_reset to the end of
   __uc_hw_init.
I can see that this change was done. But why? What was the problem with the previous version? How does this move fix it? Because an init specific function is not the correct place for reset specific code.

John.

Reply via email to