Commit 4a43480a authored by Michał Winiarski's avatar Michał Winiarski
Browse files

drm/xe: Move migration support to device-level struct



Upcoming changes will allow users to control VF state and obtain its
migration data with a device-level granularity (not tile/gt).
Change the data structures to reflect that and move the GT-level
migration init to happen after device-level init.

Reviewed-by: default avatarMichal Wajdeczko <michal.wajdeczko@intel.com>
Link: https://patch.msgid.link/20251112132220.516975-3-michal.winiarski@intel.com


Signed-off-by: default avatarMichał Winiarski <michal.winiarski@intel.com>
parent baf12584
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -177,6 +177,7 @@ xe-$(CONFIG_PCI_IOV) += \
	xe_sriov_pf.o \
	xe_sriov_pf_control.o \
	xe_sriov_pf_debugfs.o \
	xe_sriov_pf_migration.o \
	xe_sriov_pf_provision.o \
	xe_sriov_pf_service.o \
	xe_sriov_pf_sysfs.o \
+2 −10
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
#include "xe_guc.h"
#include "xe_guc_ct.h"
#include "xe_sriov.h"
#include "xe_sriov_pf_migration.h"

/* Return: number of dwords saved/restored/required or a negative error code on failure */
static int guc_action_vf_save_restore(struct xe_guc *guc, u32 vfid, u32 opcode,
@@ -115,8 +116,7 @@ static int pf_send_guc_restore_vf_state(struct xe_gt *gt, unsigned int vfid,

static bool pf_migration_supported(struct xe_gt *gt)
{
	xe_gt_assert(gt, IS_SRIOV_PF(gt_to_xe(gt)));
	return gt->sriov.pf.migration.supported;
	return xe_sriov_pf_migration_supported(gt_to_xe(gt));
}

static struct mutex *pf_migration_mutex(struct xe_gt *gt)
@@ -382,12 +382,6 @@ ssize_t xe_gt_sriov_pf_migration_write_guc_state(struct xe_gt *gt, unsigned int
}
#endif /* CONFIG_DEBUG_FS */

static bool pf_check_migration_support(struct xe_gt *gt)
{
	/* XXX: for now this is for feature enabling only */
	return IS_ENABLED(CONFIG_DRM_XE_DEBUG);
}

/**
 * xe_gt_sriov_pf_migration_init() - Initialize support for VF migration.
 * @gt: the &xe_gt
@@ -403,8 +397,6 @@ int xe_gt_sriov_pf_migration_init(struct xe_gt *gt)

	xe_gt_assert(gt, IS_SRIOV_PF(xe));

	gt->sriov.pf.migration.supported = pf_check_migration_support(gt);

	if (!pf_migration_supported(gt))
		return 0;

+0 −3
Original line number Diff line number Diff line
@@ -30,9 +30,6 @@ struct xe_gt_sriov_state_snapshot {
 * Used by the PF driver to maintain non-VF specific per-GT data.
 */
struct xe_gt_sriov_pf_migration {
	/** @supported: indicates whether the feature is supported */
	bool supported;

	/** @snapshot_lock: protects all VFs snapshots */
	struct mutex snapshot_lock;
};
+5 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
#include "xe_sriov.h"
#include "xe_sriov_pf.h"
#include "xe_sriov_pf_helpers.h"
#include "xe_sriov_pf_migration.h"
#include "xe_sriov_pf_service.h"
#include "xe_sriov_pf_sysfs.h"
#include "xe_sriov_printk.h"
@@ -102,6 +103,10 @@ int xe_sriov_pf_init_early(struct xe_device *xe)
	if (err)
		return err;

	err = xe_sriov_pf_migration_init(xe);
	if (err)
		return err;

	xe_guard_init(&xe->sriov.pf.guard_vfs_enabling, "vfs_enabling");

	xe_sriov_pf_service_init(xe);
+41 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: MIT
/*
 * Copyright © 2025 Intel Corporation
 */

#include "xe_sriov.h"
#include "xe_sriov_pf_migration.h"

/**
 * xe_sriov_pf_migration_supported() - Check if SR-IOV VF migration is supported by the device
 * @xe: the &xe_device
 *
 * Return: true if migration is supported, false otherwise
 */
bool xe_sriov_pf_migration_supported(struct xe_device *xe)
{
	xe_assert(xe, IS_SRIOV_PF(xe));

	return xe->sriov.pf.migration.supported;
}

static bool pf_check_migration_support(struct xe_device *xe)
{
	/* XXX: for now this is for feature enabling only */
	return IS_ENABLED(CONFIG_DRM_XE_DEBUG);
}

/**
 * xe_sriov_pf_migration_init() - Initialize support for SR-IOV VF migration.
 * @xe: the &xe_device
 *
 * Return: 0 on success or a negative error code on failure.
 */
int xe_sriov_pf_migration_init(struct xe_device *xe)
{
	xe_assert(xe, IS_SRIOV_PF(xe));

	xe->sriov.pf.migration.supported = pf_check_migration_support(xe);

	return 0;
}
Loading