arch/x86/kvm/trace.h

Source file repositories/reference/linux-study-clean/arch/x86/kvm/trace.h

File Facts

System
Linux kernel
Corpus path
arch/x86/kvm/trace.h
Extension
.h
Size
49081 bytes
Lines
1977
Domain
Architecture Layer
Bucket
arch/x86
Inferred role
Architecture Layer: implementation source
Status
source implementation candidate

Why This File Exists

CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.

Dependency Surface

Detected Declarations

Annotated Snippet

#if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_KVM_H

#include <linux/tracepoint.h>
#include <asm/vmx.h>
#include <asm/svm.h>
#include <asm/clocksource.h>
#include <asm/pvclock-abi.h>

#undef TRACE_SYSTEM
#define TRACE_SYSTEM kvm

#ifdef CREATE_TRACE_POINTS
#define tracing_kvm_rip_read(vcpu) ({					\
	typeof(vcpu) __vcpu = vcpu;					\
	__vcpu->arch.guest_state_protected ? 0 : kvm_rip_read(__vcpu);	\
	})
#endif

/*
 * Tracepoint for guest mode entry.
 */
TRACE_EVENT(kvm_entry,
	TP_PROTO(struct kvm_vcpu *vcpu, bool force_immediate_exit),
	TP_ARGS(vcpu, force_immediate_exit),

	TP_STRUCT__entry(
		__field(	unsigned int,	vcpu_id		)
		__field(	unsigned long,	rip		)
		__field(	bool,		immediate_exit	)
		__field(	u32,		intr_info	)
		__field(	u32,		error_code	)
	),

	TP_fast_assign(
		__entry->vcpu_id        = vcpu->vcpu_id;
		__entry->rip		= tracing_kvm_rip_read(vcpu);
		__entry->immediate_exit	= force_immediate_exit;

		kvm_x86_call(get_entry_info)(vcpu, &__entry->intr_info,
					     &__entry->error_code);
	),

	TP_printk("vcpu %u, rip 0x%lx intr_info 0x%08x error_code 0x%08x%s",
		  __entry->vcpu_id, __entry->rip,
		  __entry->intr_info, __entry->error_code,
		  __entry->immediate_exit ? "[immediate exit]" : "")
);

/*
 * Tracepoint for hypercall.
 */
TRACE_EVENT(kvm_hypercall,
	TP_PROTO(unsigned long nr, unsigned long a0, unsigned long a1,
		 unsigned long a2, unsigned long a3),
	TP_ARGS(nr, a0, a1, a2, a3),

	TP_STRUCT__entry(
		__field(	unsigned long, 	nr		)
		__field(	unsigned long,	a0		)
		__field(	unsigned long,	a1		)
		__field(	unsigned long,	a2		)
		__field(	unsigned long,	a3		)
	),

	TP_fast_assign(
		__entry->nr		= nr;
		__entry->a0		= a0;
		__entry->a1		= a1;
		__entry->a2		= a2;
		__entry->a3		= a3;
	),

	TP_printk("nr 0x%lx a0 0x%lx a1 0x%lx a2 0x%lx a3 0x%lx",
		 __entry->nr, __entry->a0, __entry->a1,  __entry->a2,
		 __entry->a3)
);

/*
 * Tracepoint for hypercall.
 */
TRACE_EVENT(kvm_hv_hypercall,
	TP_PROTO(__u16 code, bool fast,  __u16 var_cnt, __u16 rep_cnt,
		 __u16 rep_idx, __u64 ingpa, __u64 outgpa),
	TP_ARGS(code, fast, var_cnt, rep_cnt, rep_idx, ingpa, outgpa),

	TP_STRUCT__entry(
		__field(	__u16,		rep_cnt		)
		__field(	__u16,		rep_idx		)
		__field(	__u64,		ingpa		)

Annotation

Implementation Notes