cregit-Linux how code gets into the kernel

Release 4.14 arch/powerpc/platforms/powernv/opal-tracepoints.c

// SPDX-License-Identifier: GPL-2.0
#include <linux/percpu.h>
#include <linux/jump_label.h>
#include <asm/trace.h>
#include <asm/asm-prototypes.h>

#ifdef HAVE_JUMP_LABEL

struct static_key opal_tracepoint_key = STATIC_KEY_INIT;


int opal_tracepoint_regfunc(void) { static_key_slow_inc(&opal_tracepoint_key); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Anton Blanchard1275.00%150.00%
Steven Rostedt425.00%150.00%
Total16100.00%2100.00%


void opal_tracepoint_unregfunc(void) { static_key_slow_dec(&opal_tracepoint_key); }

Contributors

PersonTokensPropCommitsCommitProp
Anton Blanchard13100.00%1100.00%
Total13100.00%1100.00%

#else /* * We optimise OPAL calls by placing opal_tracepoint_refcount * directly in the TOC so we can check if the opal tracepoints are * enabled via a single load. */ /* NB: reg/unreg are called while guarded with the tracepoints_mutex */ extern long opal_tracepoint_refcount;
int opal_tracepoint_regfunc(void) { opal_tracepoint_refcount++; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Anton Blanchard969.23%150.00%
Steven Rostedt430.77%150.00%
Total13100.00%2100.00%


void opal_tracepoint_unregfunc(void) { opal_tracepoint_refcount--; }

Contributors

PersonTokensPropCommitsCommitProp
Anton Blanchard10100.00%1100.00%
Total10100.00%1100.00%

#endif /* * Since the tracing code might execute OPAL calls we need to guard against * recursion. */ static DEFINE_PER_CPU(unsigned int, opal_trace_depth);
void __trace_opal_entry(unsigned long opcode, unsigned long *args) { unsigned long flags; unsigned int *depth; local_irq_save(flags); depth = this_cpu_ptr(&opal_trace_depth); if (*depth) goto out; (*depth)++; preempt_disable(); trace_opal_entry(opcode, args); (*depth)--; out: local_irq_restore(flags); }

Contributors

PersonTokensPropCommitsCommitProp
Anton Blanchard7197.26%150.00%
Christoph Lameter22.74%150.00%
Total73100.00%2100.00%


void __trace_opal_exit(long opcode, unsigned long retval) { unsigned long flags; unsigned int *depth; local_irq_save(flags); depth = this_cpu_ptr(&opal_trace_depth); if (*depth) goto out; (*depth)++; trace_opal_exit(opcode, retval); preempt_enable(); (*depth)--; out: local_irq_restore(flags); }

Contributors

PersonTokensPropCommitsCommitProp
Anton Blanchard6997.18%150.00%
Christoph Lameter22.82%150.00%
Total71100.00%2100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Anton Blanchard22092.83%116.67%
Steven Rostedt83.38%116.67%
Christoph Lameter41.69%116.67%
Daniel Axtens31.27%116.67%
Greg Kroah-Hartman10.42%116.67%
Zhouyi Zhou10.42%116.67%
Total237100.00%6100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.