Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136/* SPDX-License-Identifier: GPL-2.0 */#ifndef __PERF_UTIL_C2C_H#define __PERF_UTIL_C2C_H
#include <stdbool.h>#include <stdint.h>#include <linux/types.h>#include "hist.h"#include "mem-events.h"#include "stat.h"
struct sort_entry;
struct c2c_hists { struct hists hists; struct perf_hpp_list list; struct c2c_stats stats;};
struct compute_stats { struct stats lcl_hitm; struct stats rmt_hitm; struct stats lcl_peer; struct stats rmt_peer; struct stats load;};
struct c2c_hist_entry { struct c2c_hists *hists; struct evsel *evsel; struct c2c_stats stats; unsigned long *cpuset; unsigned long *nodeset; struct c2c_stats *node_stats; unsigned int cacheline_idx;
struct compute_stats cstats;
unsigned long paddr; unsigned long paddr_cnt; bool paddr_zero; char *nodestr;
/* * must be at the end, * because of its callchain dynamic entry */ struct hist_entry he;};
#define C2C_HEADER_MAX 2
struct c2c_header { struct { const char *text; int span; } line[C2C_HEADER_MAX];};
struct c2c_dimension { struct c2c_header header; const char *name; int width; struct sort_entry *se;
int64_t (*cmp)(struct perf_hpp_fmt *fmt, struct hist_entry *left, struct hist_entry *right); int (*entry)(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp, struct hist_entry *he); int (*color)(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp, struct hist_entry *he);};
struct c2c_fmt { struct perf_hpp_fmt fmt; struct c2c_dimension *dim;};
#define SYMBOL_WIDTH 30
#define HEADER_LOW(__h) \ { \ .line[1] = { \ .text = __h, \ }, \ }
#define HEADER_BOTH(__h0, __h1) \ { \ .line[0] = { \ .text = __h0, \ }, \ .line[1] = { \ .text = __h1, \ }, \ }
void c2c_fmt_free(struct perf_hpp_fmt *fmt);bool c2c_fmt_equal(struct perf_hpp_fmt *a, struct perf_hpp_fmt *b);
/* * Build the function-view hierarchy. Returns -EOPNOTSUPP when @cl_sort lacks * iaddr. On success, *@hists remains valid until the next * c2c_function__build() or c2c_function__reset(). On failure, *@hists is * NULL. */int c2c_function__build(struct c2c_hists *cl_hists, const char *cl_sort, bool symbol_full, struct hists **hists);void c2c_function__reset(void);/* Valid only between a successful build and c2c_function__reset(). */struct hist_entry *c2c_function__find_cacheline(struct hist_entry *he);
/* Inputs and TUI callback supplied by the c2c command. */struct c2c_function_view_args { /* Source cacheline histograms used by the common model. */ struct c2c_hists *cl_hists; /* --coalesce field list, used to require iaddr. */ const char *cl_sort; /* Do not cap long symbol names. */ bool symbol_full; /* Open the cacheline detail view for @he. */ int (*browse_cacheline)(struct hist_entry *he);};
#ifdef HAVE_SLANG_SUPPORTint perf_c2c__browse_function_view(struct c2c_function_view_args *args);#elsestatic inline intperf_c2c__browse_function_view(struct c2c_function_view_args *args __maybe_unused){ return 0;}#endif
#endif /* __PERF_UTIL_C2C_H */