mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
VF migration sends a marker to the GUC before resource fixups begin, and repeats the marker with the RESFIX_DONE notification. This prevents the GUC from submitting jobs during double migration events. To reliably test double migration, a second migration must be triggered while fixups from the first migration are still in progress. Since fixups complete quickly, reproducing this scenario is difficult. Introduce debugfs controls to add delays in the post-fixup phase, creating a deterministic window for subsequent migrations. New debugfs entries: /sys/kernel/debug/dri/BDF/ ├── tile0 │ ├─gt0 │ │ ├──vf │ │ │ ├── resfix_stoppers resfix_stoppers: Predefined checkpoints that allow the migration process to pause at specific stages. The stages are given below. VF_MIGRATION_WAIT_RESFIX_START - BIT(0) VF_MIGRATION_WAIT_FIXUPS - BIT(1) VF_MIGRATION_WAIT_RESTART_JOBS - BIT(2) VF_MIGRATION_WAIT_RESFIX_DONE - BIT(3) Each state will pause with a 1-second delay per iteration, continuing until its corresponding bit is cleared. Signed-off-by: Satyanarayana K V P <satyanarayana.k.v.p@intel.com> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com> Cc: Matthew Brost <matthew.brost@intel.com> Cc: Tomasz Lis <tomasz.lis@intel.com> Acked-by: Adam Miszczak <adam.miszczak@linux.intel.com> Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> Link: https://patch.msgid.link/20251201095011.21453-10-satyanarayana.k.v.p@intel.com
85 lines
2.1 KiB
C
85 lines
2.1 KiB
C
// SPDX-License-Identifier: MIT
|
|
/*
|
|
* Copyright © 2023-2024 Intel Corporation
|
|
*/
|
|
|
|
#include <linux/debugfs.h>
|
|
|
|
#include <drm/drm_debugfs.h>
|
|
|
|
#include "xe_gt_debugfs.h"
|
|
#include "xe_gt_sriov_vf.h"
|
|
#include "xe_gt_sriov_vf_debugfs.h"
|
|
#include "xe_gt_types.h"
|
|
#include "xe_sriov.h"
|
|
|
|
/*
|
|
* /sys/kernel/debug/dri/0/
|
|
* ├── gt0
|
|
* │ ├── vf
|
|
* │ │ ├── self_config
|
|
* │ │ ├── abi_versions
|
|
* │ │ ├── runtime_regs
|
|
*/
|
|
|
|
static const struct drm_info_list vf_info[] = {
|
|
{
|
|
"self_config",
|
|
.show = xe_gt_debugfs_simple_show,
|
|
.data = xe_gt_sriov_vf_print_config,
|
|
},
|
|
{
|
|
"abi_versions",
|
|
.show = xe_gt_debugfs_simple_show,
|
|
.data = xe_gt_sriov_vf_print_version,
|
|
},
|
|
#if IS_ENABLED(CONFIG_DRM_XE_DEBUG) || IS_ENABLED(CONFIG_DRM_XE_DEBUG_SRIOV)
|
|
{
|
|
"runtime_regs",
|
|
.show = xe_gt_debugfs_simple_show,
|
|
.data = xe_gt_sriov_vf_print_runtime,
|
|
},
|
|
#endif
|
|
};
|
|
|
|
/**
|
|
* xe_gt_sriov_vf_debugfs_register - Register SR-IOV VF specific entries in GT debugfs.
|
|
* @gt: the &xe_gt to register
|
|
* @root: the &dentry that represents the GT directory
|
|
*
|
|
* Register SR-IOV VF entries that are GT related and must be shown under GT debugfs.
|
|
*/
|
|
void xe_gt_sriov_vf_debugfs_register(struct xe_gt *gt, struct dentry *root)
|
|
{
|
|
struct xe_device *xe = gt_to_xe(gt);
|
|
struct drm_minor *minor = xe->drm.primary;
|
|
struct dentry *vfdentry;
|
|
|
|
xe_assert(xe, IS_SRIOV_VF(xe));
|
|
xe_assert(xe, root->d_inode->i_private == gt);
|
|
|
|
/*
|
|
* /sys/kernel/debug/dri/0/
|
|
* ├── gt0
|
|
* │ ├── vf
|
|
*/
|
|
vfdentry = debugfs_create_dir("vf", root);
|
|
if (IS_ERR(vfdentry))
|
|
return;
|
|
vfdentry->d_inode->i_private = gt;
|
|
|
|
drm_debugfs_create_files(vf_info, ARRAY_SIZE(vf_info), vfdentry, minor);
|
|
|
|
/*
|
|
* /sys/kernel/debug/dri/BDF/
|
|
* ├── tile0
|
|
* ├── gt0
|
|
* ├── vf
|
|
* ├── resfix_stoppers
|
|
*/
|
|
if (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) {
|
|
debugfs_create_x8("resfix_stoppers", 0600, vfdentry,
|
|
>->sriov.vf.migration.debug.resfix_stoppers);
|
|
}
|
|
}
|