cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

trace_nop.c (2247B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * nop tracer
      4 *
      5 * Copyright (C) 2008 Steven Noonan <steven@uplinklabs.net>
      6 *
      7 */
      8
      9#include <linux/module.h>
     10#include <linux/ftrace.h>
     11
     12#include "trace.h"
     13
     14/* Our two options */
     15enum {
     16	TRACE_NOP_OPT_ACCEPT = 0x1,
     17	TRACE_NOP_OPT_REFUSE = 0x2
     18};
     19
     20/* Options for the tracer (see trace_options file) */
     21static struct tracer_opt nop_opts[] = {
     22	/* Option that will be accepted by set_flag callback */
     23	{ TRACER_OPT(test_nop_accept, TRACE_NOP_OPT_ACCEPT) },
     24	/* Option that will be refused by set_flag callback */
     25	{ TRACER_OPT(test_nop_refuse, TRACE_NOP_OPT_REFUSE) },
     26	{ } /* Always set a last empty entry */
     27};
     28
     29static struct tracer_flags nop_flags = {
     30	/* You can check your flags value here when you want. */
     31	.val = 0, /* By default: all flags disabled */
     32	.opts = nop_opts
     33};
     34
     35static struct trace_array	*ctx_trace;
     36
     37static void start_nop_trace(struct trace_array *tr)
     38{
     39	/* Nothing to do! */
     40}
     41
     42static void stop_nop_trace(struct trace_array *tr)
     43{
     44	/* Nothing to do! */
     45}
     46
     47static int nop_trace_init(struct trace_array *tr)
     48{
     49	ctx_trace = tr;
     50	start_nop_trace(tr);
     51	return 0;
     52}
     53
     54static void nop_trace_reset(struct trace_array *tr)
     55{
     56	stop_nop_trace(tr);
     57}
     58
     59/* It only serves as a signal handler and a callback to
     60 * accept or refuse the setting of a flag.
     61 * If you don't implement it, then the flag setting will be
     62 * automatically accepted.
     63 */
     64static int nop_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set)
     65{
     66	/*
     67	 * Note that you don't need to update nop_flags.val yourself.
     68	 * The tracing Api will do it automatically if you return 0
     69	 */
     70	if (bit == TRACE_NOP_OPT_ACCEPT) {
     71		printk(KERN_DEBUG "nop_test_accept flag set to %d: we accept."
     72			" Now cat trace_options to see the result\n",
     73			set);
     74		return 0;
     75	}
     76
     77	if (bit == TRACE_NOP_OPT_REFUSE) {
     78		printk(KERN_DEBUG "nop_test_refuse flag set to %d: we refuse."
     79			" Now cat trace_options to see the result\n",
     80			set);
     81		return -EINVAL;
     82	}
     83
     84	return 0;
     85}
     86
     87
     88struct tracer nop_trace __read_mostly =
     89{
     90	.name		= "nop",
     91	.init		= nop_trace_init,
     92	.reset		= nop_trace_reset,
     93#ifdef CONFIG_FTRACE_SELFTEST
     94	.selftest	= trace_selftest_startup_nop,
     95#endif
     96	.flags		= &nop_flags,
     97	.set_flag	= nop_set_flag,
     98	.allow_instances = true,
     99};
    100