Skip to content

Commit 13bc67a

Browse files
superm1bp3tk0v
authored andcommitted
platform/x86/amd: hfi: Add debugfs support
Add a dump of the class and capabilities table to debugfs to assist with debugging scheduler issues. Signed-off-by: Mario Limonciello <[email protected]> Signed-off-by: Borislav Petkov (AMD) <[email protected]> Reviewed-by: Gautham R. Shenoy <[email protected]> Acked-by: Ilpo Järvinen <[email protected]> Link: https://lore.kernel.org/[email protected]
1 parent 216fe0d commit 13bc67a

File tree

1 file changed

+35
-0
lines changed
  • drivers/platform/x86/amd/hfi

1 file changed

+35
-0
lines changed

drivers/platform/x86/amd/hfi/hfi.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <linux/acpi.h>
1414
#include <linux/cpu.h>
1515
#include <linux/cpumask.h>
16+
#include <linux/debugfs.h>
1617
#include <linux/gfp.h>
1718
#include <linux/init.h>
1819
#include <linux/io.h>
@@ -73,6 +74,8 @@ struct amd_hfi_data {
7374
void __iomem *pcc_comm_addr;
7475
struct acpi_subtable_header *pcct_entry;
7576
struct amd_shmem_info *shmem;
77+
78+
struct dentry *dbgfs_dir;
7679
};
7780

7881
/**
@@ -238,6 +241,13 @@ static int amd_hfi_alloc_class_data(struct platform_device *pdev)
238241
return 0;
239242
}
240243

244+
static void amd_hfi_remove(struct platform_device *pdev)
245+
{
246+
struct amd_hfi_data *dev = platform_get_drvdata(pdev);
247+
248+
debugfs_remove_recursive(dev->dbgfs_dir);
249+
}
250+
241251
static int amd_set_hfi_ipcc_score(struct amd_hfi_cpuinfo *hfi_cpuinfo, int cpu)
242252
{
243253
for (int i = 0; i < hfi_cpuinfo->nr_class; i++)
@@ -393,6 +403,26 @@ static int amd_hfi_metadata_parser(struct platform_device *pdev,
393403
return ret;
394404
}
395405

406+
static int class_capabilities_show(struct seq_file *s, void *unused)
407+
{
408+
u32 cpu, idx;
409+
410+
seq_puts(s, "CPU #\tWLC\tPerf\tEff\n");
411+
for_each_possible_cpu(cpu) {
412+
struct amd_hfi_cpuinfo *hfi_cpuinfo = per_cpu_ptr(&amd_hfi_cpuinfo, cpu);
413+
414+
seq_printf(s, "%d", cpu);
415+
for (idx = 0; idx < hfi_cpuinfo->nr_class; idx++) {
416+
seq_printf(s, "\t%u\t%u\t%u\n", idx,
417+
hfi_cpuinfo->amd_hfi_classes[idx].perf,
418+
hfi_cpuinfo->amd_hfi_classes[idx].eff);
419+
}
420+
}
421+
422+
return 0;
423+
}
424+
DEFINE_SHOW_ATTRIBUTE(class_capabilities);
425+
396426
static int amd_hfi_pm_resume(struct device *dev)
397427
{
398428
int ret, cpu;
@@ -469,6 +499,10 @@ static int amd_hfi_probe(struct platform_device *pdev)
469499

470500
schedule_work(&sched_amd_hfi_itmt_work);
471501

502+
amd_hfi_data->dbgfs_dir = debugfs_create_dir("amd_hfi", arch_debugfs_dir);
503+
debugfs_create_file("class_capabilities", 0644, amd_hfi_data->dbgfs_dir, pdev,
504+
&class_capabilities_fops);
505+
472506
return 0;
473507
}
474508

@@ -480,6 +514,7 @@ static struct platform_driver amd_hfi_driver = {
480514
.acpi_match_table = ACPI_PTR(amd_hfi_platform_match),
481515
},
482516
.probe = amd_hfi_probe,
517+
.remove = amd_hfi_remove,
483518
};
484519

485520
static int __init amd_hfi_init(void)

0 commit comments

Comments
 (0)