#define pr_fmt(fmt) …
#include <linux/atomic.h>
#include <linux/bsearch.h>
#include <linux/bug.h>
#include <linux/debugfs.h>
#include <linux/init.h>
#include <linux/kallsyms.h>
#include <linux/sched.h>
#include <linux/seq_file.h>
#include <linux/slab.h>
#include <linux/sort.h>
#include <linux/string.h>
#include <linux/uaccess.h>
#include "kcsan.h"
atomic_long_t kcsan_counters[KCSAN_COUNTER_COUNT];
static const char *const counter_names[] = …;
static_assert(…);
static struct { … } report_filterlist = …;
static DEFINE_SPINLOCK(report_filterlist_lock);
static noinline void microbenchmark(unsigned long iters)
{ … }
static int cmp_filterlist_addrs(const void *rhs, const void *lhs)
{ … }
bool kcsan_skip_report_debugfs(unsigned long func_addr)
{ … }
static void set_report_filterlist_whitelist(bool whitelist)
{ … }
static ssize_t insert_report_filterlist(const char *func)
{ … }
static int show_info(struct seq_file *file, void *v)
{ … }
static int debugfs_open(struct inode *inode, struct file *file)
{ … }
static ssize_t
debugfs_write(struct file *file, const char __user *buf, size_t count, loff_t *off)
{ … }
static const struct file_operations debugfs_ops = …;
static int __init kcsan_debugfs_init(void)
{ … }
late_initcall(kcsan_debugfs_init);