On Wed, 10 Dec 2025, Sebastian Brzezinka <[email protected]> wrote:
> CONFIG_RANDSTRUCT may reorder structure fields, which makes positional
> initializers unsafe. The i915 GT debugfs tables were using positional
> initializers for `struct intel_gt_debugfs_file`, and on configs where
> the layout differs (e.g., presence/absence of the `.eval` callback),
> this can lead to fields being initialized incorrectly and trigger
> randstruct warnings such as:
> ```
> drivers/gpu/drm/i915/gt/intel_gt_debugfs.c:75:51: note: randstruct:
> casting between randomized structure pointer types (constructor)
> ```
>
> Switch all the GT debugfs file arrays to designated initializers. This
> binds each value to the intended member regardless of structure
> reordering or optional members and removes the warning while preserving
> the intended initialization.
>
> No functional change, only initialization style is updated.
>
> Signed-off-by: Sebastian Brzezinka <[email protected]>
> ---
> drivers/gpu/drm/i915/gt/intel_gt_debugfs.c | 4 +--
> .../drm/i915/gt/intel_gt_engines_debugfs.c | 2 +-
> drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c | 15 ++++++-----
> drivers/gpu/drm/i915/gt/intel_sseu_debugfs.c | 4 +--
> .../gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.c | 2 +-
> .../gpu/drm/i915/gt/uc/intel_guc_debugfs.c | 26 ++++++++++++++-----
> .../drm/i915/gt/uc/intel_guc_log_debugfs.c | 9 ++++---
> .../gpu/drm/i915/gt/uc/intel_huc_debugfs.c | 2 +-
> drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.c | 2 +-
> 9 files changed, 41 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> index bd9abbd6d3d4..b7542da1ec0c 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c
> @@ -75,8 +75,8 @@ DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(steering);
> static void gt_debugfs_register(struct intel_gt *gt, struct dentry *root)
> {
> static const struct intel_gt_debugfs_file files[] = {
> - { "reset", &reset_fops, NULL },
> - { "steering", &steering_fops },
> + { .name = "reset", .fops = &reset_fops, .eval = NULL },
You don't need to explicitly initialize .eval to NULL with designated
initializers.
> + { .name = "steering", .fops = &steering_fops },
Like, you're not doing it here either.
Same applies below.
BR,
Jani.
> };
>
> intel_gt_debugfs_register_files(root, files, ARRAY_SIZE(files), gt);
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.c
> b/drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.c
> index 3aa1d014c14d..ae6c78dfe452 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.c
> @@ -29,7 +29,7 @@ DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(engines);
> void intel_gt_engines_debugfs_register(struct intel_gt *gt, struct dentry
> *root)
> {
> static const struct intel_gt_debugfs_file files[] = {
> - { "engines", &engines_fops },
> + { .name = "engines", .fops = &engines_fops },
> };
>
> intel_gt_debugfs_register_files(root, files, ARRAY_SIZE(files), gt);
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c
> b/drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c
> index 96411f357f5d..29d7eb1ff9dc 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c
> @@ -588,13 +588,14 @@ DEFINE_SIMPLE_ATTRIBUTE(perf_limit_reasons_fops,
> perf_limit_reasons_get,
> void intel_gt_pm_debugfs_register(struct intel_gt *gt, struct dentry *root)
> {
> static const struct intel_gt_debugfs_file files[] = {
> - { "drpc", &drpc_fops, NULL },
> - { "frequency", &frequency_fops, NULL },
> - { "forcewake", &fw_domains_fops, NULL },
> - { "forcewake_user", &forcewake_user_fops, NULL},
> - { "llc", &llc_fops, llc_eval },
> - { "rps_boost", &rps_boost_fops, rps_eval },
> - { "perf_limit_reasons", &perf_limit_reasons_fops,
> perf_limit_reasons_eval },
> + { .name = "drpc", .fops = &drpc_fops, .eval = NULL },
> + { .name = "frequency", .fops = &frequency_fops, .eval = NULL },
> + { .name = "forcewake", .fops = &fw_domains_fops, .eval = NULL },
> + { .name = "forcewake_user", .fops = &forcewake_user_fops, .eval
> = NULL},
> + { .name = "llc", .fops = &llc_fops, .eval = llc_eval },
> + { .name = "rps_boost", .fops = &rps_boost_fops, .eval =
> rps_eval },
> + { .name = "perf_limit_reasons", .fops =
> &perf_limit_reasons_fops,
> + .eval = perf_limit_reasons_eval },
> };
>
> intel_gt_debugfs_register_files(root, files, ARRAY_SIZE(files), gt);
> diff --git a/drivers/gpu/drm/i915/gt/intel_sseu_debugfs.c
> b/drivers/gpu/drm/i915/gt/intel_sseu_debugfs.c
> index 1dc8205bc64d..40dc275e7098 100644
> --- a/drivers/gpu/drm/i915/gt/intel_sseu_debugfs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_sseu_debugfs.c
> @@ -293,8 +293,8 @@ DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(sseu_topology);
> void intel_sseu_debugfs_register(struct intel_gt *gt, struct dentry *root)
> {
> static const struct intel_gt_debugfs_file files[] = {
> - { "sseu_status", &sseu_status_fops, NULL },
> - { "sseu_topology", &sseu_topology_fops, NULL },
> + { .name = "sseu_status", .fops = &sseu_status_fops, .eval =
> NULL },
> + { .name = "sseu_topology", .fops = &sseu_topology_fops, .eval =
> NULL },
> };
>
> intel_gt_debugfs_register_files(root, files, ARRAY_SIZE(files), gt);
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.c
> b/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.c
> index 5baacd822a1c..d9d3ed3991b1 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.c
> @@ -29,7 +29,7 @@ DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(gsc_info);
> void intel_gsc_uc_debugfs_register(struct intel_gsc_uc *gsc_uc, struct
> dentry *root)
> {
> static const struct intel_gt_debugfs_file files[] = {
> - { "gsc_info", &gsc_info_fops, NULL },
> + { .name = "gsc_info", .fops = &gsc_info_fops, .eval = NULL },
> };
>
> if (!intel_gsc_uc_is_supported(gsc_uc))
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.c
> b/drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.c
> index 7269eb0bbedf..43d83e54d8d7 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.c
> @@ -132,12 +132,26 @@
> DEFINE_SIMPLE_ATTRIBUTE(guc_sched_disable_gucid_threshold_fops,
> void intel_guc_debugfs_register(struct intel_guc *guc, struct dentry *root)
> {
> static const struct intel_gt_debugfs_file files[] = {
> - { "guc_info", &guc_info_fops, NULL },
> - { "guc_registered_contexts", &guc_registered_contexts_fops,
> NULL },
> - { "guc_slpc_info", &guc_slpc_info_fops,
> &intel_eval_slpc_support},
> - { "guc_sched_disable_delay_ms",
> &guc_sched_disable_delay_ms_fops, NULL },
> - { "guc_sched_disable_gucid_threshold",
> &guc_sched_disable_gucid_threshold_fops,
> - NULL },
> + { .name = "guc_info",
> + .fops = &guc_info_fops,
> + .eval = NULL
> + },
> + { .name = "guc_registered_contexts",
> + .fops = &guc_registered_contexts_fops,
> + .eval = NULL
> + },
> + { .name = "guc_slpc_info",
> + .fops = &guc_slpc_info_fops,
> + .eval = &intel_eval_slpc_support
> + },
> + { .name = "guc_sched_disable_delay_ms",
> + .fops = &guc_sched_disable_delay_ms_fops,
> + .eval = NULL
> + },
> + { .name = "guc_sched_disable_gucid_threshold",
> + .fops = &guc_sched_disable_gucid_threshold_fops,
> + .eval = NULL
> + },
> };
>
> if (!intel_guc_is_supported(guc))
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c
> b/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c
> index ddfbe334689f..28cbf79fa34d 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c
> @@ -162,10 +162,11 @@ void intel_guc_log_debugfs_register(struct
> intel_guc_log *log,
> struct dentry *root)
> {
> static const struct intel_gt_debugfs_file files[] = {
> - { "guc_log_dump", &guc_log_dump_fops, NULL },
> - { "guc_load_err_log_dump", &guc_load_err_log_dump_fops, NULL },
> - { "guc_log_level", &guc_log_level_fops, NULL },
> - { "guc_log_relay", &guc_log_relay_fops, NULL },
> + { .name = "guc_log_dump", .fops = &guc_log_dump_fops, .eval =
> NULL },
> + { .name = "guc_load_err_log_dump", .fops =
> &guc_load_err_log_dump_fops,
> + .eval = NULL },
> + { .name = "guc_log_level", .fops = &guc_log_level_fops, .eval =
> NULL },
> + { .name = "guc_log_relay", .fops = &guc_log_relay_fops, .eval =
> NULL },
> };
>
> if (!intel_guc_is_supported(log_to_guc(log)))
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.c
> b/drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.c
> index 15998963b863..94a7428b444b 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.c
> @@ -26,7 +26,7 @@ DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(huc_info);
> void intel_huc_debugfs_register(struct intel_huc *huc, struct dentry *root)
> {
> static const struct intel_gt_debugfs_file files[] = {
> - { "huc_info", &huc_info_fops, NULL },
> + { .name = "huc_info", .fops = &huc_info_fops, .eval = NULL },
> };
>
> if (!intel_huc_is_supported(huc))
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.c
> b/drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.c
> index 6d541c866edb..45a4e3c99783 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.c
> @@ -40,7 +40,7 @@ DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(uc_usage);
> void intel_uc_debugfs_register(struct intel_uc *uc, struct dentry *gt_root)
> {
> static const struct intel_gt_debugfs_file files[] = {
> - { "usage", &uc_usage_fops, NULL },
> + { .name = "usage", .fops = &uc_usage_fops, .eval = NULL },
> };
> struct dentry *root;
--
Jani Nikula, Intel