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