// SPDX-License-Identifier: GPL-2.0-only
#include <linux/debugfs.h>
#include <linux/ras.h>
#include "debugfs.h"

struct dentry *ras_debugfs_dir;

static atomic_t trace_count = ATOMIC_INIT(0);

int ras_userspace_consumers(void)
{
	return atomic_read(&trace_count);
}
EXPORT_SYMBOL_GPL(ras_userspace_consumers);

static int trace_show(struct seq_file *m, void *v)
{
	return atomic_read(&trace_count);
}

static int trace_open(struct inode *inode, struct file *file)
{
	atomic_inc(&trace_count);
	return single_open(file, trace_show, NULL);
}

static int trace_release(struct inode *inode, struct file *file)
{
	atomic_dec(&trace_count);
	return single_release(inode, file);
}

static const struct file_operations trace_fops = {
	.open    = trace_open,
	.read    = seq_read,
	.llseek  = seq_lseek,
	.release = trace_release,
};

int __init ras_add_daemon_trace(void)
{
	struct dentry *fentry;

	if (!ras_debugfs_dir)
		return -ENOENT;

	fentry = debugfs_create_file("daemon_active", S_IRUSR, ras_debugfs_dir,
				     NULL, &trace_fops);
	if (!fentry)
		return -ENODEV;

	return 0;

}

void __init ras_debugfs_init(void)
{
	ras_debugfs_dir = debugfs_create_dir("ras", NULL);
}
