forked from shenki/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
RAS, debugfs: Add debugfs interface for RAS subsystem
Implement a new debugfs interface for RAS susbsystem. A file named daemon_active is added there accordingly. This file is used to track if user space daemon accesses perf/trace interface or not. One can track which daemon opens it via "lsof /path/to/debugfs/ras/daemon_active". Signed-off-by: Chen, Gong <[email protected]> Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Borislav Petkov <[email protected]> Signed-off-by: Tony Luck <[email protected]>
- Loading branch information
Showing
4 changed files
with
85 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
obj-$(CONFIG_RAS) += ras.o | ||
obj-$(CONFIG_RAS) += ras.o debugfs.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
#include <linux/debugfs.h> | ||
|
||
static 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); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,8 +5,22 @@ | |
* Chen, Gong <[email protected]> | ||
*/ | ||
|
||
#include <linux/init.h> | ||
#include <linux/ras.h> | ||
|
||
#define CREATE_TRACE_POINTS | ||
#define TRACE_INCLUDE_PATH ../../include/ras | ||
#include <ras/ras_event.h> | ||
|
||
static int __init ras_init(void) | ||
{ | ||
int rc = 0; | ||
|
||
ras_debugfs_init(); | ||
rc = ras_add_daemon_trace(); | ||
|
||
return rc; | ||
} | ||
subsys_initcall(ras_init); | ||
|
||
EXPORT_TRACEPOINT_SYMBOL_GPL(mc_event); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
#ifndef __RAS_H__ | ||
#define __RAS_H__ | ||
|
||
#ifdef CONFIG_DEBUG_FS | ||
int ras_userspace_consumers(void); | ||
void ras_debugfs_init(void); | ||
int ras_add_daemon_trace(void); | ||
#else | ||
static inline int ras_userspace_consumers(void) { return 0; } | ||
static inline void ras_debugfs_init(void) { return; } | ||
static inline int ras_add_daemon_trace(void) { return 0; } | ||
#endif | ||
|
||
#endif |