162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci#include <linux/debugfs.h> 362306a36Sopenharmony_ci#include <linux/ras.h> 462306a36Sopenharmony_ci#include "debugfs.h" 562306a36Sopenharmony_ci 662306a36Sopenharmony_cistruct dentry *ras_debugfs_dir; 762306a36Sopenharmony_ci 862306a36Sopenharmony_cistatic atomic_t trace_count = ATOMIC_INIT(0); 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ciint ras_userspace_consumers(void) 1162306a36Sopenharmony_ci{ 1262306a36Sopenharmony_ci return atomic_read(&trace_count); 1362306a36Sopenharmony_ci} 1462306a36Sopenharmony_ciEXPORT_SYMBOL_GPL(ras_userspace_consumers); 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cistatic int trace_show(struct seq_file *m, void *v) 1762306a36Sopenharmony_ci{ 1862306a36Sopenharmony_ci return 0; 1962306a36Sopenharmony_ci} 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_cistatic int trace_open(struct inode *inode, struct file *file) 2262306a36Sopenharmony_ci{ 2362306a36Sopenharmony_ci atomic_inc(&trace_count); 2462306a36Sopenharmony_ci return single_open(file, trace_show, NULL); 2562306a36Sopenharmony_ci} 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cistatic int trace_release(struct inode *inode, struct file *file) 2862306a36Sopenharmony_ci{ 2962306a36Sopenharmony_ci atomic_dec(&trace_count); 3062306a36Sopenharmony_ci return single_release(inode, file); 3162306a36Sopenharmony_ci} 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cistatic const struct file_operations trace_fops = { 3462306a36Sopenharmony_ci .open = trace_open, 3562306a36Sopenharmony_ci .read = seq_read, 3662306a36Sopenharmony_ci .llseek = seq_lseek, 3762306a36Sopenharmony_ci .release = trace_release, 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ciint __init ras_add_daemon_trace(void) 4162306a36Sopenharmony_ci{ 4262306a36Sopenharmony_ci struct dentry *fentry; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci if (!ras_debugfs_dir) 4562306a36Sopenharmony_ci return -ENOENT; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci fentry = debugfs_create_file("daemon_active", S_IRUSR, ras_debugfs_dir, 4862306a36Sopenharmony_ci NULL, &trace_fops); 4962306a36Sopenharmony_ci if (IS_ERR(fentry)) 5062306a36Sopenharmony_ci return -ENODEV; 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci return 0; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci} 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_civoid __init ras_debugfs_init(void) 5762306a36Sopenharmony_ci{ 5862306a36Sopenharmony_ci ras_debugfs_dir = debugfs_create_dir("ras", NULL); 5962306a36Sopenharmony_ci} 60