Commit 15366239 authored by Matthew Brost's avatar Matthew Brost
Browse files

drm/xe: Decouple TLB invalidations from GT



Decouple TLB invalidations from the GT by updating the TLB invalidation
layer to accept a `struct xe_tlb_inval` instead of a `struct xe_gt`.
Also, rename *gt_tlb* to *tlb*. The internals of the TLB invalidation
code still operate on a GT, but this is now hidden from the rest of the
driver.

Signed-off-by: default avatarStuart Summers <stuart.summers@intel.com>
Reviewed-by: default avatarStuart Summers <stuart.summers@intel.com>
Signed-off-by: default avatarMatthew Brost <matthew.brost@intel.com>
Link: https://lore.kernel.org/r/20250826182911.392550-7-stuart.summers@intel.com
parent 6d1e452e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -61,8 +61,6 @@ xe-y += xe_bb.o \
	xe_gt_pagefault.o \
	xe_gt_sysfs.o \
	xe_gt_throttle.o \
	xe_gt_tlb_inval.o \
	xe_gt_tlb_inval_job.o \
	xe_gt_topology.o \
	xe_guc.o \
	xe_guc_ads.o \
@@ -119,6 +117,8 @@ xe-y += xe_bb.o \
	xe_sync.o \
	xe_tile.o \
	xe_tile_sysfs.o \
	xe_tlb_inval.o \
	xe_tlb_inval_job.o \
	xe_trace.o \
	xe_trace_bo.o \
	xe_trace_guc.o \
+2 −2
Original line number Diff line number Diff line
@@ -23,13 +23,13 @@
#include "xe_device.h"
#include "xe_gt.h"
#include "xe_gt_printk.h"
#include "xe_gt_tlb_inval.h"
#include "xe_map.h"
#include "xe_mmio.h"
#include "xe_pm.h"
#include "xe_res_cursor.h"
#include "xe_sriov.h"
#include "xe_tile_sriov_vf.h"
#include "xe_tlb_inval.h"
#include "xe_wa.h"
#include "xe_wopcm.h"

@@ -438,7 +438,7 @@ static void ggtt_invalidate_gt_tlb(struct xe_gt *gt)
	if (!gt)
		return;

	err = xe_gt_tlb_inval_ggtt(gt);
	err = xe_tlb_inval_ggtt(&gt->tlb_inval);
	xe_gt_WARN(gt, err, "Failed to invalidate GGTT (%pe)", ERR_PTR(err));
}

+3 −3
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@
#include "xe_gt_sriov_pf.h"
#include "xe_gt_sriov_vf.h"
#include "xe_gt_sysfs.h"
#include "xe_gt_tlb_inval.h"
#include "xe_gt_topology.h"
#include "xe_guc_exec_queue_types.h"
#include "xe_guc_pc.h"
@@ -58,6 +57,7 @@
#include "xe_sa.h"
#include "xe_sched_job.h"
#include "xe_sriov.h"
#include "xe_tlb_inval.h"
#include "xe_tuning.h"
#include "xe_uc.h"
#include "xe_uc_fw.h"
@@ -852,7 +852,7 @@ static int gt_reset(struct xe_gt *gt)

	xe_uc_stop(&gt->uc);

	xe_gt_tlb_inval_reset(gt);
	xe_tlb_inval_reset(&gt->tlb_inval);

	err = do_gt_reset(gt);
	if (err)
@@ -1066,5 +1066,5 @@ void xe_gt_declare_wedged(struct xe_gt *gt)
	xe_gt_assert(gt, gt_to_xe(gt)->wedged.mode);

	xe_uc_declare_wedged(&gt->uc);
	xe_gt_tlb_inval_reset(gt);
	xe_tlb_inval_reset(&gt->tlb_inval);
}
+0 −34
Original line number Diff line number Diff line
/* SPDX-License-Identifier: MIT */
/*
 * Copyright © 2025 Intel Corporation
 */

#ifndef _XE_GT_TLB_INVAL_JOB_H_
#define _XE_GT_TLB_INVAL_JOB_H_

#include <linux/types.h>

struct dma_fence;
struct drm_sched_job;
struct kref;
struct xe_exec_queue;
struct xe_gt;
struct xe_gt_tlb_inval_job;
struct xe_migrate;

struct xe_gt_tlb_inval_job *xe_gt_tlb_inval_job_create(struct xe_exec_queue *q,
						       struct xe_gt *gt,
						       u64 start, u64 end,
						       u32 asid);

int xe_gt_tlb_inval_job_alloc_dep(struct xe_gt_tlb_inval_job *job);

struct dma_fence *xe_gt_tlb_inval_job_push(struct xe_gt_tlb_inval_job *job,
					   struct xe_migrate *m,
					   struct dma_fence *fence);

void xe_gt_tlb_inval_job_get(struct xe_gt_tlb_inval_job *job);

void xe_gt_tlb_inval_job_put(struct xe_gt_tlb_inval_job *job);

#endif
+1 −1
Original line number Diff line number Diff line
@@ -12,12 +12,12 @@
#include "xe_gt_sriov_pf_types.h"
#include "xe_gt_sriov_vf_types.h"
#include "xe_gt_stats_types.h"
#include "xe_gt_tlb_inval_types.h"
#include "xe_hw_engine_types.h"
#include "xe_hw_fence_types.h"
#include "xe_oa_types.h"
#include "xe_reg_sr_types.h"
#include "xe_sa_types.h"
#include "xe_tlb_inval_types.h"
#include "xe_uc_types.h"

struct xe_exec_queue_ops;
Loading