Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Wajdeczko <michal.wajdeczko@intel.com>
To: Matthew Brost <matthew.brost@intel.com>,
	<intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH v3 05/36] Revert "drm/xe/vf: Fixup CTB send buffer messages after migration"
Date: Tue, 30 Sep 2025 17:27:17 +0200	[thread overview]
Message-ID: <f582fff5-84bb-4fd8-b246-79545450cc62@intel.com> (raw)
In-Reply-To: <20250929025542.1486303-6-matthew.brost@intel.com>



On 9/29/2025 4:55 AM, Matthew Brost wrote:
> This reverts commit cef88d1265cac7d415606af73ba58926fd3cd8b7.
> 
> Due to change in the VF migration recovery design this code
> is not needed any more.
> 
> v3:
>  - Add commit message (Michal / Lucas)
> 
> Signed-off-by: Matthew Brost <matthew.brost@intel.com>

Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com>

> ---
>  drivers/gpu/drm/xe/xe_guc_ct.c   | 183 -------------------------------
>  drivers/gpu/drm/xe/xe_guc_ct.h   |   2 -
>  drivers/gpu/drm/xe/xe_map.h      |  18 ---
>  drivers/gpu/drm/xe/xe_sriov_vf.c |   2 -
>  4 files changed, 205 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
> index 18f6327bf552..47079ab9922c 100644
> --- a/drivers/gpu/drm/xe/xe_guc_ct.c
> +++ b/drivers/gpu/drm/xe/xe_guc_ct.c
> @@ -25,7 +25,6 @@
>  #include "xe_gt_printk.h"
>  #include "xe_gt_sriov_pf_control.h"
>  #include "xe_gt_sriov_pf_monitor.h"
> -#include "xe_gt_sriov_printk.h"
>  #include "xe_guc.h"
>  #include "xe_guc_log.h"
>  #include "xe_guc_relay.h"
> @@ -93,8 +92,6 @@ struct g2h_fence {
>  	bool done;
>  };
>  
> -#define make_u64(hi, lo) ((u64)((u64)(u32)(hi) << 32 | (u32)(lo)))
> -
>  static void g2h_fence_init(struct g2h_fence *g2h_fence, u32 *response_buffer)
>  {
>  	memset(g2h_fence, 0, sizeof(*g2h_fence));
> @@ -1793,186 +1790,6 @@ static void g2h_worker_func(struct work_struct *w)
>  	receive_g2h(ct);
>  }
>  
> -static void xe_fixup_u64_in_cmds(struct xe_device *xe, struct iosys_map *cmds,
> -				 u32 size, u32 idx, s64 shift)
> -{
> -	u32 hi, lo;
> -	u64 offset;
> -
> -	lo = xe_map_rd_ring_u32(xe, cmds, idx, size);
> -	hi = xe_map_rd_ring_u32(xe, cmds, idx + 1, size);
> -	offset = make_u64(hi, lo);
> -	offset += shift;
> -	lo = lower_32_bits(offset);
> -	hi = upper_32_bits(offset);
> -	xe_map_wr_ring_u32(xe, cmds, idx, size, lo);
> -	xe_map_wr_ring_u32(xe, cmds, idx + 1, size, hi);
> -}
> -
> -/*
> - * Shift any GGTT addresses within a single message left within CTB from
> - * before post-migration recovery.
> - * @ct: pointer to CT struct of the target GuC
> - * @cmds: iomap buffer containing CT messages
> - * @head: start of the target message within the buffer
> - * @len: length of the target message
> - * @size: size of the commands buffer
> - * @shift: the address shift to be added to each GGTT reference
> - * Return: true if the message was fixed or needed no fixups, false on failure
> - */
> -static bool ct_fixup_ggtt_in_message(struct xe_guc_ct *ct,
> -				     struct iosys_map *cmds, u32 head,
> -				     u32 len, u32 size, s64 shift)
> -{
> -	struct xe_gt *gt = ct_to_gt(ct);
> -	struct xe_device *xe = ct_to_xe(ct);
> -	u32 msg[GUC_HXG_MSG_MIN_LEN];
> -	u32 action, i, n;
> -
> -	xe_gt_assert(gt, len >= GUC_HXG_MSG_MIN_LEN);
> -
> -	msg[0] = xe_map_rd_ring_u32(xe, cmds, head, size);
> -	action = FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, msg[0]);
> -
> -	xe_gt_sriov_dbg_verbose(gt, "fixing H2G %#x\n", action);
> -
> -	switch (action) {
> -	case XE_GUC_ACTION_REGISTER_CONTEXT:
> -		if (len != XE_GUC_REGISTER_CONTEXT_MSG_LEN)
> -			goto err_len;
> -		xe_fixup_u64_in_cmds(xe, cmds, size, head +
> -				     XE_GUC_REGISTER_CONTEXT_DATA_5_WQ_DESC_ADDR_LOWER,
> -				     shift);
> -		xe_fixup_u64_in_cmds(xe, cmds, size, head +
> -				     XE_GUC_REGISTER_CONTEXT_DATA_7_WQ_BUF_BASE_LOWER,
> -				     shift);
> -		xe_fixup_u64_in_cmds(xe, cmds, size, head +
> -				     XE_GUC_REGISTER_CONTEXT_DATA_10_HW_LRC_ADDR, shift);
> -		break;
> -	case XE_GUC_ACTION_REGISTER_CONTEXT_MULTI_LRC:
> -		if (len < XE_GUC_REGISTER_CONTEXT_MULTI_LRC_MSG_MIN_LEN)
> -			goto err_len;
> -		n = xe_map_rd_ring_u32(xe, cmds, head +
> -				       XE_GUC_REGISTER_CONTEXT_MULTI_LRC_DATA_10_NUM_CTXS, size);
> -		if (len != XE_GUC_REGISTER_CONTEXT_MULTI_LRC_MSG_MIN_LEN + 2 * n)
> -			goto err_len;
> -		xe_fixup_u64_in_cmds(xe, cmds, size, head +
> -				     XE_GUC_REGISTER_CONTEXT_MULTI_LRC_DATA_5_WQ_DESC_ADDR_LOWER,
> -				     shift);
> -		xe_fixup_u64_in_cmds(xe, cmds, size, head +
> -				     XE_GUC_REGISTER_CONTEXT_MULTI_LRC_DATA_7_WQ_BUF_BASE_LOWER,
> -				     shift);
> -		for (i = 0; i < n; i++)
> -			xe_fixup_u64_in_cmds(xe, cmds, size, head +
> -					     XE_GUC_REGISTER_CONTEXT_MULTI_LRC_DATA_11_HW_LRC_ADDR
> -					     + 2 * i, shift);
> -		break;
> -	default:
> -		break;
> -	}
> -	return true;
> -
> -err_len:
> -	xe_gt_err(gt, "Skipped G2G %#x message fixups, unexpected length (%u)\n", action, len);
> -	return false;
> -}
> -
> -/*
> - * Apply fixups to the next outgoing CT message within given CTB
> - * @ct: the &xe_guc_ct struct instance representing the target GuC
> - * @h2g: the &guc_ctb struct instance of the target buffer
> - * @shift: shift to be added to all GGTT addresses within the CTB
> - * @mhead: pointer to an integer storing message start position; the
> - *   position is changed to next message before this function return
> - * @avail: size of the area available for parsing, that is length
> - *   of all remaining messages stored within the CTB
> - * Return: size of the area available for parsing after one message
> - *   has been parsed, that is length remaining from the updated mhead
> - */
> -static int ct_fixup_ggtt_in_buffer(struct xe_guc_ct *ct, struct guc_ctb *h2g,
> -				   s64 shift, u32 *mhead, s32 avail)
> -{
> -	struct xe_gt *gt = ct_to_gt(ct);
> -	struct xe_device *xe = ct_to_xe(ct);
> -	u32 msg[GUC_HXG_MSG_MIN_LEN];
> -	u32 size = h2g->info.size;
> -	u32 head = *mhead;
> -	u32 len;
> -
> -	xe_gt_assert(gt, avail >= (s32)GUC_CTB_MSG_MIN_LEN);
> -
> -	/* Read header */
> -	msg[0] = xe_map_rd_ring_u32(xe, &h2g->cmds, head, size);
> -	len = FIELD_GET(GUC_CTB_MSG_0_NUM_DWORDS, msg[0]) + GUC_CTB_MSG_MIN_LEN;
> -
> -	if (unlikely(len > (u32)avail)) {
> -		xe_gt_err(gt, "H2G channel broken on read, avail=%d, len=%d, fixups skipped\n",
> -			  avail, len);
> -		return 0;
> -	}
> -
> -	head = (head + GUC_CTB_MSG_MIN_LEN) % size;
> -	if (!ct_fixup_ggtt_in_message(ct, &h2g->cmds, head, msg_len_to_hxg_len(len), size, shift))
> -		return 0;
> -	*mhead = (head + msg_len_to_hxg_len(len)) % size;
> -
> -	return avail - len;
> -}
> -
> -/**
> - * xe_guc_ct_fixup_messages_with_ggtt - Fixup any pending H2G CTB messages
> - * @ct: pointer to CT struct of the target GuC
> - * @ggtt_shift: shift to be added to all GGTT addresses within the CTB
> - *
> - * Messages in GuC to Host CTB are owned by GuC and any fixups in them
> - * are made by GuC. But content of the Host to GuC CTB is owned by the
> - * KMD, so fixups to GGTT references in any pending messages need to be
> - * applied here.
> - * This function updates GGTT offsets in payloads of pending H2G CTB
> - * messages (messages which were not consumed by GuC before the VF got
> - * paused).
> - */
> -void xe_guc_ct_fixup_messages_with_ggtt(struct xe_guc_ct *ct, s64 ggtt_shift)
> -{
> -	struct guc_ctb *h2g = &ct->ctbs.h2g;
> -	struct xe_guc *guc = ct_to_guc(ct);
> -	struct xe_gt *gt = guc_to_gt(guc);
> -	u32 head, tail, size;
> -	s32 avail;
> -
> -	if (unlikely(h2g->info.broken))
> -		return;
> -
> -	h2g->info.head = desc_read(ct_to_xe(ct), h2g, head);
> -	head = h2g->info.head;
> -	tail = READ_ONCE(h2g->info.tail);
> -	size = h2g->info.size;
> -
> -	if (unlikely(head > size))
> -		goto corrupted;
> -
> -	if (unlikely(tail >= size))
> -		goto corrupted;
> -
> -	avail = tail - head;
> -
> -	/* beware of buffer wrap case */
> -	if (unlikely(avail < 0))
> -		avail += size;
> -	xe_gt_dbg(gt, "available %d (%u:%u:%u)\n", avail, head, tail, size);
> -	xe_gt_assert(gt, avail >= 0);
> -
> -	while (avail > 0)
> -		avail = ct_fixup_ggtt_in_buffer(ct, h2g, ggtt_shift, &head, avail);
> -
> -	return;
> -
> -corrupted:
> -	xe_gt_err(gt, "Corrupted H2G descriptor head=%u tail=%u size=%u, fixups not applied\n",
> -		  head, tail, size);
> -	h2g->info.broken = true;
> -}
> -
>  static struct xe_guc_ct_snapshot *guc_ct_snapshot_alloc(struct xe_guc_ct *ct, bool atomic,
>  							bool want_ctb)
>  {
> diff --git a/drivers/gpu/drm/xe/xe_guc_ct.h b/drivers/gpu/drm/xe/xe_guc_ct.h
> index cf41210ab30a..d6c81325a76c 100644
> --- a/drivers/gpu/drm/xe/xe_guc_ct.h
> +++ b/drivers/gpu/drm/xe/xe_guc_ct.h
> @@ -24,8 +24,6 @@ void xe_guc_ct_snapshot_print(struct xe_guc_ct_snapshot *snapshot, struct drm_pr
>  void xe_guc_ct_snapshot_free(struct xe_guc_ct_snapshot *snapshot);
>  void xe_guc_ct_print(struct xe_guc_ct *ct, struct drm_printer *p, bool want_ctb);
>  
> -void xe_guc_ct_fixup_messages_with_ggtt(struct xe_guc_ct *ct, s64 ggtt_shift);
> -
>  static inline bool xe_guc_ct_initialized(struct xe_guc_ct *ct)
>  {
>  	return ct->state != XE_GUC_CT_STATE_NOT_INITIALIZED;
> diff --git a/drivers/gpu/drm/xe/xe_map.h b/drivers/gpu/drm/xe/xe_map.h
> index 8d67f6ba2d95..f62e0c8b67ab 100644
> --- a/drivers/gpu/drm/xe/xe_map.h
> +++ b/drivers/gpu/drm/xe/xe_map.h
> @@ -78,24 +78,6 @@ static inline void xe_map_write32(struct xe_device *xe, struct iosys_map *map,
>  	iosys_map_wr(map__, offset__, type__, val__);			\
>  })
>  
> -#define xe_map_rd_array(xe__, map__, index__, type__) \
> -	xe_map_rd(xe__, map__, (index__) * sizeof(type__), type__)
> -
> -#define xe_map_wr_array(xe__, map__, index__, type__, val__) \
> -	xe_map_wr(xe__, map__, (index__) * sizeof(type__), type__, val__)
> -
> -#define xe_map_rd_array_u32(xe__, map__, index__) \
> -	xe_map_rd_array(xe__, map__, index__, u32)
> -
> -#define xe_map_wr_array_u32(xe__, map__, index__, val__) \
> -	xe_map_wr_array(xe__, map__, index__, u32, val__)
> -
> -#define xe_map_rd_ring_u32(xe__, map__, index__, size__) \
> -	xe_map_rd_array_u32(xe__, map__, (index__) % (size__))
> -
> -#define xe_map_wr_ring_u32(xe__, map__, index__, size__, val__) \
> -	xe_map_wr_array_u32(xe__, map__, (index__) % (size__), val__)
> -
>  #define xe_map_rd_field(xe__, map__, struct_offset__, struct_type__, field__) ({	\
>  	struct xe_device *__xe = xe__;					\
>  	xe_device_assert_mem_access(__xe);				\
> diff --git a/drivers/gpu/drm/xe/xe_sriov_vf.c b/drivers/gpu/drm/xe/xe_sriov_vf.c
> index 0581b881b628..da064a1e7419 100644
> --- a/drivers/gpu/drm/xe/xe_sriov_vf.c
> +++ b/drivers/gpu/drm/xe/xe_sriov_vf.c
> @@ -12,7 +12,6 @@
>  #include "xe_gt_sriov_printk.h"
>  #include "xe_gt_sriov_vf.h"
>  #include "xe_guc.h"
> -#include "xe_guc_ct.h"
>  #include "xe_guc_submit.h"
>  #include "xe_irq.h"
>  #include "xe_lrc.h"
> @@ -340,7 +339,6 @@ static int gt_vf_post_migration_fixups(struct xe_gt *gt)
>  		err = xe_guc_contexts_hwsp_rebase(&gt->uc.guc, buf);
>  		if (err)
>  			goto out;
> -		xe_guc_ct_fixup_messages_with_ggtt(&gt->uc.guc.ct, shift);
>  	}
>  
>  out:


  reply	other threads:[~2025-09-30 15:27 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-29  2:55 [PATCH v3 00/36] VF migration redesign Matthew Brost
2025-09-29  2:55 ` [PATCH v3 01/36] drm/xe: Add NULL checks to scratch LRC allocation Matthew Brost
2025-09-30  2:06   ` Lis, Tomasz
2025-09-30 22:53     ` Matthew Brost
2025-09-29  2:55 ` [PATCH v3 02/36] drm/xe/vf: Lock querying GGTT config during driver init Matthew Brost
2025-09-29  7:42   ` Michal Wajdeczko
2025-09-29 12:15     ` Matthew Brost
2025-09-30  0:42       ` Lis, Tomasz
2025-09-30 10:25         ` Michal Wajdeczko
2025-09-29  8:13   ` Ville Syrjälä
2025-09-30 13:22     ` Lis, Tomasz
2025-09-29  2:55 ` [PATCH v3 03/36] Revert "drm/xe/vf: Rebase exec queue parallel commands during migration recovery" Matthew Brost
2025-09-30 15:22   ` Michal Wajdeczko
2025-09-29  2:55 ` [PATCH v3 04/36] Revert "drm/xe/vf: Post migration, repopulate ring area for pending request" Matthew Brost
2025-09-30 15:24   ` Michal Wajdeczko
2025-09-29  2:55 ` [PATCH v3 05/36] Revert "drm/xe/vf: Fixup CTB send buffer messages after migration" Matthew Brost
2025-09-30 15:27   ` Michal Wajdeczko [this message]
2025-09-29  2:55 ` [PATCH v3 06/36] drm/xe: Save off position in ring in which a job was programmed Matthew Brost
2025-09-29  2:55 ` [PATCH v3 07/36] drm/xe/guc: Track pending-enable source in submission state Matthew Brost
2025-09-29  2:55 ` [PATCH v3 08/36] drm/xe: Track LR jobs in DRM scheduler pending list Matthew Brost
2025-09-29  2:55 ` [PATCH v3 09/36] drm/xe: Don't change LRC ring head on job resubmission Matthew Brost
2025-09-30  2:38   ` Lis, Tomasz
2025-09-29  2:55 ` [PATCH v3 10/36] drm/xe: Make LRC W/A scratch buffer usage consistent Matthew Brost
2025-09-29  2:55 ` [PATCH v3 11/36] drm/xe/guc: Document GuC submission backend Matthew Brost
2025-09-30  3:28   ` Lis, Tomasz
2025-09-30  6:30     ` Matthew Brost
2025-09-29  2:55 ` [PATCH v3 12/36] drm/xe/vf: Add xe_gt_recovery_inprogress helper Matthew Brost
2025-09-29  8:04   ` Michal Wajdeczko
2025-09-29  8:52     ` Matthew Brost
2025-09-29  2:55 ` [PATCH v3 13/36] drm/xe/vf: Make VF recovery run on per-GT worker Matthew Brost
2025-09-30 14:47   ` Lis, Tomasz
2025-09-29  2:55 ` [PATCH v3 14/36] drm/xe/vf: Abort H2G sends during VF post-migration recovery Matthew Brost
2025-09-29  8:17   ` Michal Wajdeczko
2025-09-29  2:55 ` [PATCH v3 15/36] drm/xe/vf: Remove memory allocations from VF post migration recovery Matthew Brost
2025-09-30 15:00   ` Lis, Tomasz
2025-09-29  2:55 ` [PATCH v3 16/36] drm/xe/vf: Close multi-GT GGTT shift race Matthew Brost
2025-09-29  8:44   ` Michal Wajdeczko
2025-09-29 12:31     ` Matthew Brost
2025-09-29  2:55 ` [PATCH v3 17/36] drm/xe/vf: Teardown VF post migration worker on driver unload Matthew Brost
2025-09-30 16:24   ` Lis, Tomasz
2025-09-29  2:55 ` [PATCH v3 18/36] drm/xe/vf: Don't allow GT reset to be queued during VF post migration recovery Matthew Brost
2025-09-29  9:17   ` Michal Wajdeczko
2025-09-29 12:50     ` Matthew Brost
2025-09-29  2:55 ` [PATCH v3 19/36] drm/xe/vf: Wakeup in GuC backend on " Matthew Brost
2025-09-29  2:55 ` [PATCH v3 20/36] drm/xe/vf: Avoid indefinite blocking in preempt rebind worker for VFs supporting migration Matthew Brost
2025-10-01 13:45   ` Lis, Tomasz
2025-10-01 13:56     ` Lis, Tomasz
2025-09-29  2:55 ` [PATCH v3 21/36] drm/xe/vf: Extra debug on GGTT shift Matthew Brost
2025-09-29  2:55 ` [PATCH v3 22/36] drm/xe/vf: Use GUC_HXG_TYPE_EVENT for GuC context register Matthew Brost
2025-09-29  2:55 ` [PATCH v3 23/36] drm/xe/vf: Flush and stop CTs in VF post migration recovery Matthew Brost
2025-09-29 21:31   ` Michal Wajdeczko
2025-09-29  2:55 ` [PATCH v3 24/36] drm/xe/vf: Reset TLB invalidations during " Matthew Brost
2025-10-01 13:53   ` Lis, Tomasz
2025-09-29  2:55 ` [PATCH v3 25/36] drm/xe/vf: Kickstart after resfix in " Matthew Brost
2025-09-29  2:55 ` [PATCH v3 26/36] drm/xe/vf: Start CTs before resfix " Matthew Brost
2025-09-29 21:49   ` Michal Wajdeczko
2025-09-30  6:26     ` Matthew Brost
2025-09-29  2:55 ` [PATCH v3 27/36] drm/xe/vf: Abort VF post migration recovery on failure Matthew Brost
2025-10-01 14:06   ` Lis, Tomasz
2025-09-29  2:55 ` [PATCH v3 28/36] drm/xe/vf: Replay GuC submission state on pause / unpause Matthew Brost
2025-10-01 14:37   ` Lis, Tomasz
2025-09-29  2:55 ` [PATCH v3 29/36] drm/xe: Move queue init before LRC creation Matthew Brost
2025-10-02  0:44   ` Lis, Tomasz
2025-10-02  7:36     ` Matthew Brost
2025-10-02 14:54       ` Lis, Tomasz
2025-09-29  2:55 ` [PATCH v3 30/36] drm/xe/vf: Add debug prints for GuC replaying state during VF recovery Matthew Brost
2025-10-02  1:02   ` Lis, Tomasz
2025-09-29  2:55 ` [PATCH v3 31/36] drm/xe/vf: Workaround for race condition in GuC firmware during VF pause Matthew Brost
2025-10-02  1:09   ` Lis, Tomasz
2025-10-02  6:12     ` Matthew Brost
2025-09-29  2:55 ` [PATCH v3 32/36] drm/xe: Use PPGTT addresses for TLB invalidation to avoid GGTT fixups Matthew Brost
2025-10-02  1:25   ` Lis, Tomasz
2025-09-29  2:55 ` [PATCH v3 33/36] drm/xe/vf: Use primary GT ordered work queue on media GT on PTL VF Matthew Brost
2025-09-29  2:55 ` [PATCH v3 34/36] drm/xe/vf: Ensure media GT VF recovery runs after primary GT on PTL Matthew Brost
2025-09-29  2:55 ` [PATCH v3 35/36] drm/xe/vf: Rebase CCS save/restore BB GGTT addresses Matthew Brost
2025-09-29  2:55 ` [PATCH v3 36/36] drm/xe/guc: Increase wait timeout to 2sec after BUSY reply from GuC Matthew Brost
2025-09-29 15:17   ` K V P, Satyanarayana
2025-09-30 12:39     ` Matthew Brost
2025-09-30 13:38       ` Michal Wajdeczko
2025-09-30 14:39         ` Matthew Brost
2025-09-29  3:06 ` ✗ CI.checkpatch: warning for VF migration redesign (rev3) Patchwork
2025-09-29  3:08 ` ✓ CI.KUnit: success " Patchwork
2025-09-29  6:28 ` ✗ Xe.CI.Full: failure " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f582fff5-84bb-4fd8-b246-79545450cc62@intel.com \
    --to=michal.wajdeczko@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=matthew.brost@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox