]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe: Move migration support to device-level struct
authorMichał Winiarski <michal.winiarski@intel.com>
Wed, 12 Nov 2025 13:21:58 +0000 (14:21 +0100)
committerMichał Winiarski <michal.winiarski@intel.com>
Thu, 13 Nov 2025 10:48:18 +0000 (11:48 +0100)
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: Michal Wajdeczko <michal.wajdeczko@intel.com>
Link: https://patch.msgid.link/20251112132220.516975-3-michal.winiarski@intel.com
Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
drivers/gpu/drm/xe/Makefile
drivers/gpu/drm/xe/xe_gt_sriov_pf_migration.c
drivers/gpu/drm/xe/xe_gt_sriov_pf_migration_types.h
drivers/gpu/drm/xe/xe_sriov_pf.c
drivers/gpu/drm/xe/xe_sriov_pf_migration.c [new file with mode: 0644]
drivers/gpu/drm/xe/xe_sriov_pf_migration.h [new file with mode: 0644]
drivers/gpu/drm/xe/xe_sriov_pf_migration_types.h [new file with mode: 0644]
drivers/gpu/drm/xe/xe_sriov_pf_types.h

index 8aa85c93b3d6fa6ba7292b5cbb4e5cc7820637c1..5507a356b7b8ad9d3ce3cd6f326e6fcf9f795d25 100644 (file)
@@ -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 \
index a5bf327ef88895169856da81e86f93129e4f0c66..ca28f45aaf481cf980909d9ae9ad9f9e02821fb6 100644 (file)
@@ -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;
 
index 1f3110b6d44faa562de964d6c6f7736ef31f6844..9d672feac5f04d565b1c47ad5721eb686aefb004 100644 (file)
@@ -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;
 };
index 59b32b3c8acc2b9110e378896c5feda767b2b21b..7c779d63179f644cfa129b753620a3442767fb19 100644 (file)
@@ -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);
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 (file)
index 0000000..8c523c3
--- /dev/null
@@ -0,0 +1,41 @@
+// 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;
+}
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 (file)
index 0000000..d2b4a24
--- /dev/null
@@ -0,0 +1,16 @@
+/* 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;
+
+int xe_sriov_pf_migration_init(struct xe_device *xe);
+bool xe_sriov_pf_migration_supported(struct xe_device *xe);
+
+#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 (file)
index 0000000..43ca60b
--- /dev/null
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+
+#ifndef _XE_SRIOV_PF_MIGRATION_TYPES_H_
+#define _XE_SRIOV_PF_MIGRATION_TYPES_H_
+
+#include <linux/types.h>
+
+/**
+ * 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;
+};
+
+#endif
index 2fb5f426d58895f6bc2ee534f80bd52b8118a987..335672c24482eb3e6007b009707894d41d161425 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/types.h>
 
 #include "xe_guard.h"
+#include "xe_sriov_pf_migration_types.h"
 #include "xe_sriov_pf_provision_types.h"
 #include "xe_sriov_pf_service_types.h"
 
@@ -48,6 +49,9 @@ struct xe_device_pf {
        /** @provision: device level provisioning data. */
        struct xe_sriov_pf_provision provision;
 
+       /** @migration: device level migration data. */
+       struct xe_sriov_pf_migration migration;
+
        /** @service: device level service data. */
        struct xe_sriov_pf_service service;