mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 12:21:22 -05:00
drm/xe/pf: Enable SR-IOV VF migration
All of the necessary building blocks are now in place to support SR-IOV VF migration. Flip the enable/disable logic to match VF code and disable the feature only for platforms that don't meet the necessary prerequisites. To allow more testing and experiments, on DEBUG builds any missing prerequisites will be ignored. Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com> Link: https://patch.msgid.link/20251127093934.1462188-2-michal.winiarski@intel.com Signed-off-by: Michał Winiarski <michal.winiarski@intel.com> (cherry picked from commit 01c724aa7bf84e9d081a56e0cbf1d282678ce144) Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
This commit is contained in:
committed by
Thomas Hellström
parent
50a59230fa
commit
73834d03a5
@@ -17,6 +17,7 @@
|
||||
#include "xe_gt_sriov_pf_helpers.h"
|
||||
#include "xe_gt_sriov_pf_migration.h"
|
||||
#include "xe_gt_sriov_printk.h"
|
||||
#include "xe_guc.h"
|
||||
#include "xe_guc_buf.h"
|
||||
#include "xe_guc_ct.h"
|
||||
#include "xe_migrate.h"
|
||||
@@ -1023,6 +1024,12 @@ static void action_ring_cleanup(void *arg)
|
||||
ptr_ring_cleanup(r, destroy_pf_packet);
|
||||
}
|
||||
|
||||
static void pf_gt_migration_check_support(struct xe_gt *gt)
|
||||
{
|
||||
if (GUC_FIRMWARE_VER(>->uc.guc) < MAKE_GUC_VER(70, 54, 0))
|
||||
xe_sriov_pf_migration_disable(gt_to_xe(gt), "requires GuC version >= 70.54.0");
|
||||
}
|
||||
|
||||
/**
|
||||
* xe_gt_sriov_pf_migration_init() - Initialize support for VF migration.
|
||||
* @gt: the &xe_gt
|
||||
@@ -1039,6 +1046,8 @@ int xe_gt_sriov_pf_migration_init(struct xe_gt *gt)
|
||||
|
||||
xe_gt_assert(gt, IS_SRIOV_PF(xe));
|
||||
|
||||
pf_gt_migration_check_support(gt);
|
||||
|
||||
if (!pf_migration_supported(gt))
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -46,13 +46,37 @@ bool xe_sriov_pf_migration_supported(struct xe_device *xe)
|
||||
{
|
||||
xe_assert(xe, IS_SRIOV_PF(xe));
|
||||
|
||||
return xe->sriov.pf.migration.supported;
|
||||
return IS_ENABLED(CONFIG_DRM_XE_DEBUG) || !xe->sriov.pf.migration.disabled;
|
||||
}
|
||||
|
||||
static bool pf_check_migration_support(struct xe_device *xe)
|
||||
/**
|
||||
* xe_sriov_pf_migration_disable() - Turn off SR-IOV VF migration support on PF.
|
||||
* @xe: the &xe_device instance.
|
||||
* @fmt: format string for the log message, to be combined with following VAs.
|
||||
*/
|
||||
void xe_sriov_pf_migration_disable(struct xe_device *xe, const char *fmt, ...)
|
||||
{
|
||||
/* XXX: for now this is for feature enabling only */
|
||||
return IS_ENABLED(CONFIG_DRM_XE_DEBUG);
|
||||
struct va_format vaf;
|
||||
va_list va_args;
|
||||
|
||||
xe_assert(xe, IS_SRIOV_PF(xe));
|
||||
|
||||
va_start(va_args, fmt);
|
||||
vaf.fmt = fmt;
|
||||
vaf.va = &va_args;
|
||||
xe_sriov_notice(xe, "migration %s: %pV\n",
|
||||
IS_ENABLED(CONFIG_DRM_XE_DEBUG) ?
|
||||
"missing prerequisite" : "disabled",
|
||||
&vaf);
|
||||
va_end(va_args);
|
||||
|
||||
xe->sriov.pf.migration.disabled = true;
|
||||
}
|
||||
|
||||
static void pf_migration_check_support(struct xe_device *xe)
|
||||
{
|
||||
if (!xe_device_has_memirq(xe))
|
||||
xe_sriov_pf_migration_disable(xe, "requires memory-based IRQ support");
|
||||
}
|
||||
|
||||
static void pf_migration_cleanup(void *arg)
|
||||
@@ -77,7 +101,8 @@ 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);
|
||||
pf_migration_check_support(xe);
|
||||
|
||||
if (!xe_sriov_pf_migration_supported(xe))
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ struct xe_sriov_packet;
|
||||
|
||||
int xe_sriov_pf_migration_init(struct xe_device *xe);
|
||||
bool xe_sriov_pf_migration_supported(struct xe_device *xe);
|
||||
void xe_sriov_pf_migration_disable(struct xe_device *xe, const char *fmt, ...);
|
||||
int xe_sriov_pf_migration_restore_produce(struct xe_device *xe, unsigned int vfid,
|
||||
struct xe_sriov_packet *data);
|
||||
struct xe_sriov_packet *
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
* struct xe_sriov_pf_migration - Xe device level VF migration data
|
||||
*/
|
||||
struct xe_sriov_pf_migration {
|
||||
/** @supported: indicates whether VF migration feature is supported */
|
||||
bool supported;
|
||||
/** @disabled: indicates whether VF migration feature is disabled */
|
||||
bool disabled;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user