tools/perf/util/powerpc-vpadtl.c

Source file repositories/reference/linux-study-clean/tools/perf/util/powerpc-vpadtl.c

File Facts

System
Linux kernel
Corpus path
tools/perf/util/powerpc-vpadtl.c
Extension
.c
Size
17882 bytes
Lines
737
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: implementation source
Status
source implementation candidate

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

struct powerpc_vpadtl {
	struct auxtrace			auxtrace;
	struct auxtrace_queues		queues;
	struct auxtrace_heap		heap;
	u32				auxtrace_type;
	struct perf_session		*session;
	struct machine			*machine;
	u32				pmu_type;
	u64				sample_id;
};

struct boottb_freq {
	u64     boot_tb;
	u64     tb_freq;
	u64     timebase;
	u64     padded[3];
};

struct powerpc_vpadtl_queue {
	struct powerpc_vpadtl	*vpa;
	unsigned int		queue_nr;
	struct auxtrace_buffer	*buffer;
	struct thread		*thread;
	bool			on_heap;
	struct powerpc_vpadtl_entry	*dtl;
	u64			timestamp;
	unsigned long		pkt_len;
	unsigned long		buf_len;
	u64			boot_tb;
	u64			tb_freq;
	unsigned int		tb_buffer;
	unsigned int		size;
	bool			done;
	pid_t			pid;
	pid_t			tid;
	int			cpu;
};

const char *dispatch_reasons[11] = {
	"external_interrupt",
	"firmware_internal_event",
	"H_PROD",
	"decrementer_interrupt",
	"system_reset",
	"firmware_internal_event",
	"conferred_cycles",
	"time_slice",
	"virtual_memory_page_fault",
	"expropriated_adjunct",
	"priv_doorbell"};

const char *preempt_reasons[10] = {
	"unused",
	"firmware_internal_event",
	"H_CEDE",
	"H_CONFER",
	"time_slice",
	"migration_hibernation_page_fault",
	"virtual_memory_page_fault",
	"H_CONFER_ADJUNCT",
	"hcall_adjunct",
	"HDEC_adjunct"};

#define	dtl_entry_size	sizeof(struct powerpc_vpadtl_entry)

/*
 * Function to dump the dispatch trace data when perf report
 * is invoked with -D
 */
static void powerpc_vpadtl_dump(struct powerpc_vpadtl *vpa __maybe_unused,
			 unsigned char *buf, size_t len)
{
	struct powerpc_vpadtl_entry *dtl;
	int pkt_len, pos = 0;
	const char *color = PERF_COLOR_BLUE;

	color_fprintf(stdout, color,
			". ... VPA DTL PMU data: size %zu bytes, entries is %zu\n",
			len, len/dtl_entry_size);

	if (len % dtl_entry_size)
		len = len - (len % dtl_entry_size);

	while (len) {
		pkt_len = dtl_entry_size;
		printf(".");
		color_fprintf(stdout, color, "  %08x: ", pos);
		dtl = (struct powerpc_vpadtl_entry *)buf;
		if (dtl->timebase != 0) {
			printf("dispatch_reason:%s, preempt_reason:%s, "

Annotation

Implementation Notes