Introduce utility functions to print IRQ affinity settings (smp_affinity and effective_affinity) via the proc filesystem. Specifically, add: - print_proc_irq_smp_affinity() and print_proc_irq_effective_affinity() to print the current affinity states. These helpers will be used in subsequent patches to print affinity settings for debugging in the KVM IRQ test when timeouts occur. Signed-off-by: Josh Hilke --- .../testing/selftests/kvm/include/proc_util.h | 4 +++ tools/testing/selftests/kvm/lib/proc_util.c | 30 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/tools/testing/selftests/kvm/include/proc_util.h b/tools/testing/selftests/kvm/include/proc_util.h index e381c7818275..e0e8f29c570c 100644 --- a/tools/testing/selftests/kvm/include/proc_util.h +++ b/tools/testing/selftests/kvm/include/proc_util.h @@ -8,4 +8,8 @@ unsigned int vfio_msix_to_host_irq(const char *vfio_device_bdf, int msix); FILE *open_proc_irq_smp_affinity_list(unsigned int irq); void write_proc_irq_smp_affinity_list(FILE *fp, unsigned int irq, int irq_cpu); + +void print_proc_irq_smp_affinity(unsigned int irq); +void print_proc_irq_effective_affinity(unsigned int irq); + #endif /* SELFTEST_KVM_PROC_UTIL_H */ diff --git a/tools/testing/selftests/kvm/lib/proc_util.c b/tools/testing/selftests/kvm/lib/proc_util.c index 938c90d94f4d..24a8de92e229 100644 --- a/tools/testing/selftests/kvm/lib/proc_util.c +++ b/tools/testing/selftests/kvm/lib/proc_util.c @@ -58,3 +58,33 @@ void write_proc_irq_smp_affinity_list(FILE *fp, unsigned int irq, int irq_cpu) TEST_ASSERT(ret > 0, "Failed to affinitize IRQ-%u to CPU %d", irq, irq_cpu); fflush(fp); } + +static void print_proc_irq_file(unsigned int irq, const char *file) +{ + char path[PATH_MAX]; + char buf[256]; + FILE *fp; + + snprintf(path, sizeof(path), "/proc/irq/%u/%s", irq, file); + fp = fopen(path, "r"); + if (!fp) { + printf(" Failed to open %s\n", path); + return; + } + + if (fgets(buf, sizeof(buf), fp)) { + buf[strcspn(buf, "\n")] = 0; + printf(" %s: %s\n", path, buf); + } + fclose(fp); +} + +void print_proc_irq_smp_affinity(unsigned int irq) +{ + print_proc_irq_file(irq, "smp_affinity"); +} + +void print_proc_irq_effective_affinity(unsigned int irq) +{ + print_proc_irq_file(irq, "effective_affinity"); +} -- 2.54.0.1032.g2f8565e1d1-goog