On Sun, Oct 12, 2025 at 08:58:42PM +0200, Michal Wajdeczko wrote:
> 
> 
> On 10/11/2025 9:38 PM, Michał Winiarski wrote:
> > 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.
> > 
> > Signed-off-by: Michał Winiarski <[email protected]>
> > ---
> >  drivers/gpu/drm/xe/Makefile                   |  1 +
> >  drivers/gpu/drm/xe/xe_gt_sriov_pf_migration.c | 12 +-----
> >  .../drm/xe/xe_gt_sriov_pf_migration_types.h   |  3 --
> >  drivers/gpu/drm/xe/xe_sriov_pf.c              |  5 +++
> >  drivers/gpu/drm/xe/xe_sriov_pf_migration.c    | 43 +++++++++++++++++++
> >  drivers/gpu/drm/xe/xe_sriov_pf_migration.h    | 27 ++++++++++++
> >  .../gpu/drm/xe/xe_sriov_pf_migration_types.h  |  0
> >  drivers/gpu/drm/xe/xe_sriov_pf_types.h        |  5 +++
> >  8 files changed, 83 insertions(+), 13 deletions(-)
> >  create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_migration.c
> >  create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_migration.h
> >  create mode 100644 drivers/gpu/drm/xe/xe_sriov_pf_migration_types.h
> > 
> > diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> > index 84321fad32658..71f685a315dca 100644
> > --- a/drivers/gpu/drm/xe/Makefile
> > +++ b/drivers/gpu/drm/xe/Makefile
> > @@ -176,6 +176,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_service.o \
> >     xe_tile_sriov_pf_debugfs.o
> >  
> > 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 a5bf327ef8889..ca28f45aaf481 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_migration.c
> > +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_migration.c
> > @@ -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;
> >  
> > diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_migration_types.h 
> > b/drivers/gpu/drm/xe/xe_gt_sriov_pf_migration_types.h
> > index 1f3110b6d44fa..9d672feac5f04 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_migration_types.h
> > +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_migration_types.h
> > @@ -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;
> >  };
> > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf.c 
> > b/drivers/gpu/drm/xe/xe_sriov_pf.c
> > index bc1ab9ee31d92..95743c7af8050 100644
> > --- a/drivers/gpu/drm/xe/xe_sriov_pf.c
> > +++ b/drivers/gpu/drm/xe/xe_sriov_pf.c
> > @@ -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_printk.h"
> >  
> > @@ -101,6 +102,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_sriov_pf_service_init(xe);
> >  
> >     return 0;
> > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_migration.c 
> > b/drivers/gpu/drm/xe/xe_sriov_pf_migration.c
> > new file mode 100644
> > index 0000000000000..cf6a210d5597a
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_sriov_pf_migration.c
> > @@ -0,0 +1,43 @@
> > +// 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 &struct xe_device
> 
> nit: this will render better:
> 
>       @xe: the struct &xe_device
> 
> but in other places we just use:
> 
>       @xe: the &xe_device

Indeed - I'll change it (here and in other instances though the series).

> 
> > + *
> > + * 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)
> > +{
> > +   xe_assert(xe, IS_SRIOV_PF(xe));
> 
> we don't need this here for now

Ok.

> 
> > +
> > +   /* 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 &struct 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;
> > +}
> > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_migration.h 
> > b/drivers/gpu/drm/xe/xe_sriov_pf_migration.h
> > new file mode 100644
> > index 0000000000000..d3058b6682192
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_sriov_pf_migration.h
> > @@ -0,0 +1,27 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2025 Intel Corporation
> > + */
> > +
> > +#ifndef _XE_SRIOV_PF_MIGRATION_H_
> > +#define _XE_SRIOV_PF_MIGRATION_H_
> > +
> > +#include <linux/types.h>
> > +
> > +struct xe_device;
> > +
> > +#ifdef CONFIG_PCI_IOV
> > +int xe_sriov_pf_migration_init(struct xe_device *xe);
> > +bool xe_sriov_pf_migration_supported(struct xe_device *xe);
> > +#else
> > +static inline int xe_sriov_pf_migration_init(struct xe_device *xe)
> > +{
> > +   return 0;
> > +}
> > +static inline bool xe_sriov_pf_migration_supported(struct xe_device *xe)
> > +{
> > +   return false;
> > +}
> > +#endif
> > +
> > +#endif
> > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_migration_types.h 
> > b/drivers/gpu/drm/xe/xe_sriov_pf_migration_types.h
> > new file mode 100644
> > index 0000000000000..e69de29bb2d1d
> > diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_types.h 
> > b/drivers/gpu/drm/xe/xe_sriov_pf_types.h
> > index 956a88f9f213d..2d2fcc0a2f258 100644
> > --- a/drivers/gpu/drm/xe/xe_sriov_pf_types.h
> > +++ b/drivers/gpu/drm/xe/xe_sriov_pf_types.h
> > @@ -32,6 +32,11 @@ struct xe_device_pf {
> >     /** @driver_max_vfs: Maximum number of VFs supported by the driver. */
> >     u16 driver_max_vfs;
> >  
> 
> I guess you need to document @migration too to make it work

Ok.

> 
> > +   struct {
> > +           /** @migration.supported: indicates whether VF migration 
> > feature is supported */
> > +           bool supported;
> > +   } migration;
> 
> also can you move that closer to other sub-component "service" below ?

Will do.

> 
> > +
> >     /** @master_lock: protects all VFs configurations across GTs */
> >     struct mutex master_lock;
> >  
> 
> but otherwise LGTM, so with above fixed,
> 
>       Reviewed-by: Michal Wajdeczko <[email protected]>
> 


Thanks,
-Michał

Reply via email to