On Sat, Nov 22, 2025 at 07:10:12PM +0100, Michal Wajdeczko wrote: > > > On 11/11/2025 2:04 AM, Michał Winiarski wrote: > > 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 pre-requisites. > > typo: prerequisites
Ok. > > > > > Signed-off-by: Michał Winiarski <[email protected]> > > --- > > drivers/gpu/drm/xe/xe_gt_sriov_pf_migration.c | 12 +++++++ > > drivers/gpu/drm/xe/xe_sriov_pf_migration.c | 32 ++++++++++++++++--- > > drivers/gpu/drm/xe/xe_sriov_pf_migration.h | 1 + > > .../gpu/drm/xe/xe_sriov_pf_migration_types.h | 4 +-- > > 4 files changed, 42 insertions(+), 7 deletions(-) > > > > diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_migration.c > > b/drivers/gpu/drm/xe/xe_gt_sriov_pf_migration.c > > index 6ad948e96fd45..0a0c3145e1274 100644 > > --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_migration.c > > +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_migration.c > > @@ -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" > > @@ -1008,6 +1009,15 @@ 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 (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) > > + return; > > maybe instead of blindly ignoring all checks in the debug mode, let them go > and just in xe_sriov_pf_migration_disable() don't set disabled=true or > ignore .disabled flag in xe_sriov_pf_migration_supported() ? > > then we could still experiment in debug mode without any restrictions, > but have some logs about missing official prerequisites Yeah - makes sense. Thanks, -Michał > > > + > > + 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 > > @@ -1024,6 +1034,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; > > > > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_migration.c > > b/drivers/gpu/drm/xe/xe_sriov_pf_migration.c > > index d6c24bea759af..7dd7625e5aeed 100644 > > --- a/drivers/gpu/drm/xe/xe_sriov_pf_migration.c > > +++ b/drivers/gpu/drm/xe/xe_sriov_pf_migration.c > > @@ -46,13 +46,34 @@ bool xe_sriov_pf_migration_supported(struct xe_device > > *xe) > > { > > xe_assert(xe, IS_SRIOV_PF(xe)); > > > > - return xe->sriov.pf.migration.supported; > > + return !xe->sriov.pf.migration.disabled; > > 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_sriov_pf_migration_disable() - ... > > > + * @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, > > ...) > > +{ > > + 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 disabled: %pV\n", &vaf); > > "migration %s: %pV\n", > IS_ENABLED(CONFIG_DRM_XE_DEBUG) ? > "missing prerequisite" : "disabled" > > > + va_end(va_args); > > + > > + xe->sriov.pf.migration.disabled = true; > > +} > > + > > +static void pf_migration_check_support(struct xe_device *xe) > > { > > - /* XXX: for now this is for feature enabling only */ > > - return IS_ENABLED(CONFIG_DRM_XE_DEBUG); > > + 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 +98,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; > > > > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_migration.h > > b/drivers/gpu/drm/xe/xe_sriov_pf_migration.h > > index b806298a0bb62..f8f408df84813 100644 > > --- a/drivers/gpu/drm/xe/xe_sriov_pf_migration.h > > +++ b/drivers/gpu/drm/xe/xe_sriov_pf_migration.h > > @@ -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 * > > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_migration_types.h > > b/drivers/gpu/drm/xe/xe_sriov_pf_migration_types.h > > index 363d673ee1dd5..7d9a8a278d915 100644 > > --- a/drivers/gpu/drm/xe/xe_sriov_pf_migration_types.h > > +++ b/drivers/gpu/drm/xe/xe_sriov_pf_migration_types.h > > @@ -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; > > }; > > > > /** >
