/* SPDX-License-Identifier: GPL-2.0 */
#if !defined(_TRACE_KVM_HV_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_KVM_HV_H

#include <linux/tracepoint.h>
#include "trace_book3s.h"
#include <asm/hvcall.h>
#include <asm/kvm_asm.h>

#undef TRACE_SYSTEM
#define TRACE_SYSTEM kvm_hv

#define kvm_trace_symbol_hcall \
	{H_REMOVE,			"H_REMOVE"}, \
	{H_ENTER,			"H_ENTER"}, \
	{H_READ,			"H_READ"}, \
	{H_CLEAR_MOD,			"H_CLEAR_MOD"}, \
	{H_CLEAR_REF,			"H_CLEAR_REF"}, \
	{H_PROTECT,			"H_PROTECT"}, \
	{H_GET_TCE,			"H_GET_TCE"}, \
	{H_PUT_TCE,			"H_PUT_TCE"}, \
	{H_SET_SPRG0,			"H_SET_SPRG0"}, \
	{H_SET_DABR,			"H_SET_DABR"}, \
	{H_PAGE_INIT,			"H_PAGE_INIT"}, \
	{H_SET_ASR,			"H_SET_ASR"}, \
	{H_ASR_ON,			"H_ASR_ON"}, \
	{H_ASR_OFF,			"H_ASR_OFF"}, \
	{H_LOGICAL_CI_LOAD,		"H_LOGICAL_CI_LOAD"}, \
	{H_LOGICAL_CI_STORE,		"H_LOGICAL_CI_STORE"}, \
	{H_LOGICAL_CACHE_LOAD,		"H_LOGICAL_CACHE_LOAD"}, \
	{H_LOGICAL_CACHE_STORE,		"H_LOGICAL_CACHE_STORE"}, \
	{H_LOGICAL_ICBI,		"H_LOGICAL_ICBI"}, \
	{H_LOGICAL_DCBF,		"H_LOGICAL_DCBF"}, \
	{H_GET_TERM_CHAR,		"H_GET_TERM_CHAR"}, \
	{H_PUT_TERM_CHAR,		"H_PUT_TERM_CHAR"}, \
	{H_REAL_TO_LOGICAL,		"H_REAL_TO_LOGICAL"}, \
	{H_HYPERVISOR_DATA,		"H_HYPERVISOR_DATA"}, \
	{H_EOI,				"H_EOI"}, \
	{H_CPPR,			"H_CPPR"}, \
	{H_IPI,				"H_IPI"}, \
	{H_IPOLL,			"H_IPOLL"}, \
	{H_XIRR,			"H_XIRR"}, \
	{H_PERFMON,			"H_PERFMON"}, \
	{H_MIGRATE_DMA,			"H_MIGRATE_DMA"}, \
	{H_REGISTER_VPA,		"H_REGISTER_VPA"}, \
	{H_CEDE,			"H_CEDE"}, \
	{H_CONFER,			"H_CONFER"}, \
	{H_PROD,			"H_PROD"}, \
	{H_GET_PPP,			"H_GET_PPP"}, \
	{H_SET_PPP,			"H_SET_PPP"}, \
	{H_PURR,			"H_PURR"}, \
	{H_PIC,				"H_PIC"}, \
	{H_REG_CRQ,			"H_REG_CRQ"}, \
	{H_FREE_CRQ,			"H_FREE_CRQ"}, \
	{H_VIO_SIGNAL,			"H_VIO_SIGNAL"}, \
	{H_SEND_CRQ,			"H_SEND_CRQ"}, \
	{H_COPY_RDMA,			"H_COPY_RDMA"}, \
	{H_REGISTER_LOGICAL_LAN,	"H_REGISTER_LOGICAL_LAN"}, \
	{H_FREE_LOGICAL_LAN,		"H_FREE_LOGICAL_LAN"}, \
	{H_ADD_LOGICAL_LAN_BUFFER,	"H_ADD_LOGICAL_LAN_BUFFER"}, \
	{H_SEND_LOGICAL_LAN,		"H_SEND_LOGICAL_LAN"}, \
	{H_BULK_REMOVE,			"H_BULK_REMOVE"}, \
	{H_MULTICAST_CTRL,		"H_MULTICAST_CTRL"}, \
	{H_SET_XDABR,			"H_SET_XDABR"}, \
	{H_STUFF_TCE,			"H_STUFF_TCE"}, \
	{H_PUT_TCE_INDIRECT,		"H_PUT_TCE_INDIRECT"}, \
	{H_CHANGE_LOGICAL_LAN_MAC,	"H_CHANGE_LOGICAL_LAN_MAC"}, \
	{H_VTERM_PARTNER_INFO,		"H_VTERM_PARTNER_INFO"}, \
	{H_REGISTER_VTERM,		"H_REGISTER_VTERM"}, \
	{H_FREE_VTERM,			"H_FREE_VTERM"}, \
	{H_RESET_EVENTS,		"H_RESET_EVENTS"}, \
	{H_ALLOC_RESOURCE,		"H_ALLOC_RESOURCE"}, \
	{H_FREE_RESOURCE,		"H_FREE_RESOURCE"}, \
	{H_MODIFY_QP,			"H_MODIFY_QP"}, \
	{H_QUERY_QP,			"H_QUERY_QP"}, \
	{H_REREGISTER_PMR,		"H_REREGISTER_PMR"}, \
	{H_REGISTER_SMR,		"H_REGISTER_SMR"}, \
	{H_QUERY_MR,			"H_QUERY_MR"}, \
	{H_QUERY_MW,			"H_QUERY_MW"}, \
	{H_QUERY_HCA,			"H_QUERY_HCA"}, \
	{H_QUERY_PORT,			"H_QUERY_PORT"}, \
	{H_MODIFY_PORT,			"H_MODIFY_PORT"}, \
	{H_DEFINE_AQP1,			"H_DEFINE_AQP1"}, \
	{H_GET_TRACE_BUFFER,		"H_GET_TRACE_BUFFER"}, \
	{H_DEFINE_AQP0,			"H_DEFINE_AQP0"}, \
	{H_RESIZE_MR,			"H_RESIZE_MR"}, \
	{H_ATTACH_MCQP,			"H_ATTACH_MCQP"}, \
	{H_DETACH_MCQP,			"H_DETACH_MCQP"}, \
	{H_CREATE_RPT,			"H_CREATE_RPT"}, \
	{H_REMOVE_RPT,			"H_REMOVE_RPT"}, \
	{H_REGISTER_RPAGES,		"H_REGISTER_RPAGES"}, \
	{H_DISABLE_AND_GET,		"H_DISABLE_AND_GET"}, \
	{H_ERROR_DATA,			"H_ERROR_DATA"}, \
	{H_GET_HCA_INFO,		"H_GET_HCA_INFO"}, \
	{H_GET_PERF_COUNT,		"H_GET_PERF_COUNT"}, \
	{H_MANAGE_TRACE,		"H_MANAGE_TRACE"}, \
	{H_FREE_LOGICAL_LAN_BUFFER,	"H_FREE_LOGICAL_LAN_BUFFER"}, \
	{H_QUERY_INT_STATE,		"H_QUERY_INT_STATE"}, \
	{H_POLL_PENDING,		"H_POLL_PENDING"}, \
	{H_ILLAN_ATTRIBUTES,		"H_ILLAN_ATTRIBUTES"}, \
	{H_MODIFY_HEA_QP,		"H_MODIFY_HEA_QP"}, \
	{H_QUERY_HEA_QP,		"H_QUERY_HEA_QP"}, \
	{H_QUERY_HEA,			"H_QUERY_HEA"}, \
	{H_QUERY_HEA_PORT,		"H_QUERY_HEA_PORT"}, \
	{H_MODIFY_HEA_PORT,		"H_MODIFY_HEA_PORT"}, \
	{H_REG_BCMC,			"H_REG_BCMC"}, \
	{H_DEREG_BCMC,			"H_DEREG_BCMC"}, \
	{H_REGISTER_HEA_RPAGES,		"H_REGISTER_HEA_RPAGES"}, \
	{H_DISABLE_AND_GET_HEA,		"H_DISABLE_AND_GET_HEA"}, \
	{H_GET_HEA_INFO,		"H_GET_HEA_INFO"}, \
	{H_ALLOC_HEA_RESOURCE,		"H_ALLOC_HEA_RESOURCE"}, \
	{H_ADD_CONN,			"H_ADD_CONN"}, \
	{H_DEL_CONN,			"H_DEL_CONN"}, \
	{H_JOIN,			"H_JOIN"}, \
	{H_VASI_STATE,			"H_VASI_STATE"}, \
	{H_ENABLE_CRQ,			"H_ENABLE_CRQ"}, \
	{H_GET_EM_PARMS,		"H_GET_EM_PARMS"}, \
	{H_SET_MPP,			"H_SET_MPP"}, \
	{H_GET_MPP,			"H_GET_MPP"}, \
	{H_HOME_NODE_ASSOCIATIVITY,	"H_HOME_NODE_ASSOCIATIVITY"}, \
	{H_BEST_ENERGY,			"H_BEST_ENERGY"}, \
	{H_XIRR_X,			"H_XIRR_X"}, \
	{H_RANDOM,			"H_RANDOM"}, \
	{H_COP,				"H_COP"}, \
	{H_GET_MPP_X,			"H_GET_MPP_X"}, \
	{H_SET_MODE,			"H_SET_MODE"}, \
	{H_RTAS,			"H_RTAS"}

#define kvm_trace_symbol_kvmret \
	{RESUME_GUEST,			"RESUME_GUEST"}, \
	{RESUME_GUEST_NV,		"RESUME_GUEST_NV"}, \
	{RESUME_HOST,			"RESUME_HOST"}, \
	{RESUME_HOST_NV,		"RESUME_HOST_NV"}

#define kvm_trace_symbol_hcall_rc \
	{H_SUCCESS,			"H_SUCCESS"}, \
	{H_BUSY,			"H_BUSY"}, \
	{H_CLOSED,			"H_CLOSED"}, \
	{H_NOT_AVAILABLE,		"H_NOT_AVAILABLE"}, \
	{H_CONSTRAINED,			"H_CONSTRAINED"}, \
	{H_PARTIAL,			"H_PARTIAL"}, \
	{H_IN_PROGRESS,			"H_IN_PROGRESS"}, \
	{H_PAGE_REGISTERED,		"H_PAGE_REGISTERED"}, \
	{H_PARTIAL_STORE,		"H_PARTIAL_STORE"}, \
	{H_PENDING,			"H_PENDING"}, \
	{H_CONTINUE,			"H_CONTINUE"}, \
	{H_LONG_BUSY_START_RANGE,	"H_LONG_BUSY_START_RANGE"}, \
	{H_LONG_BUSY_ORDER_1_MSEC,	"H_LONG_BUSY_ORDER_1_MSEC"}, \
	{H_LONG_BUSY_ORDER_10_MSEC,	"H_LONG_BUSY_ORDER_10_MSEC"}, \
	{H_LONG_BUSY_ORDER_100_MSEC,	"H_LONG_BUSY_ORDER_100_MSEC"}, \
	{H_LONG_BUSY_ORDER_1_SEC,	"H_LONG_BUSY_ORDER_1_SEC"}, \
	{H_LONG_BUSY_ORDER_10_SEC,	"H_LONG_BUSY_ORDER_10_SEC"}, \
	{H_LONG_BUSY_ORDER_100_SEC,	"H_LONG_BUSY_ORDER_100_SEC"}, \
	{H_LONG_BUSY_END_RANGE,		"H_LONG_BUSY_END_RANGE"}, \
	{H_TOO_HARD,			"H_TOO_HARD"}, \
	{H_HARDWARE,			"H_HARDWARE"}, \
	{H_FUNCTION,			"H_FUNCTION"}, \
	{H_PRIVILEGE,			"H_PRIVILEGE"}, \
	{H_PARAMETER,			"H_PARAMETER"}, \
	{H_BAD_MODE,			"H_BAD_MODE"}, \
	{H_PTEG_FULL,			"H_PTEG_FULL"}, \
	{H_NOT_FOUND,			"H_NOT_FOUND"}, \
	{H_RESERVED_DABR,		"H_RESERVED_DABR"}, \
	{H_NO_MEM,			"H_NO_MEM"}, \
	{H_AUTHORITY,			"H_AUTHORITY"}, \
	{H_PERMISSION,			"H_PERMISSION"}, \
	{H_DROPPED,			"H_DROPPED"}, \
	{H_SOURCE_PARM,			"H_SOURCE_PARM"}, \
	{H_DEST_PARM,			"H_DEST_PARM"}, \
	{H_REMOTE_PARM,			"H_REMOTE_PARM"}, \
	{H_RESOURCE,			"H_RESOURCE"}, \
	{H_ADAPTER_PARM,		"H_ADAPTER_PARM"}, \
	{H_RH_PARM,			"H_RH_PARM"}, \
	{H_RCQ_PARM,			"H_RCQ_PARM"}, \
	{H_SCQ_PARM,			"H_SCQ_PARM"}, \
	{H_EQ_PARM,			"H_EQ_PARM"}, \
	{H_RT_PARM,			"H_RT_PARM"}, \
	{H_ST_PARM,			"H_ST_PARM"}, \
	{H_SIGT_PARM,			"H_SIGT_PARM"}, \
	{H_TOKEN_PARM,			"H_TOKEN_PARM"}, \
	{H_MLENGTH_PARM,		"H_MLENGTH_PARM"}, \
	{H_MEM_PARM,			"H_MEM_PARM"}, \
	{H_MEM_ACCESS_PARM,		"H_MEM_ACCESS_PARM"}, \
	{H_ATTR_PARM,			"H_ATTR_PARM"}, \
	{H_PORT_PARM,			"H_PORT_PARM"}, \
	{H_MCG_PARM,			"H_MCG_PARM"}, \
	{H_VL_PARM,			"H_VL_PARM"}, \
	{H_TSIZE_PARM,			"H_TSIZE_PARM"}, \
	{H_TRACE_PARM,			"H_TRACE_PARM"}, \
	{H_MASK_PARM,			"H_MASK_PARM"}, \
	{H_MCG_FULL,			"H_MCG_FULL"}, \
	{H_ALIAS_EXIST,			"H_ALIAS_EXIST"}, \
	{H_P_COUNTER,			"H_P_COUNTER"}, \
	{H_TABLE_FULL,			"H_TABLE_FULL"}, \
	{H_ALT_TABLE,			"H_ALT_TABLE"}, \
	{H_MR_CONDITION,		"H_MR_CONDITION"}, \
	{H_NOT_ENOUGH_RESOURCES,	"H_NOT_ENOUGH_RESOURCES"}, \
	{H_R_STATE,			"H_R_STATE"}, \
	{H_RESCINDED,			"H_RESCINDED"}, \
	{H_P2,				"H_P2"}, \
	{H_P3,				"H_P3"}, \
	{H_P4,				"H_P4"}, \
	{H_P5,				"H_P5"}, \
	{H_P6,				"H_P6"}, \
	{H_P7,				"H_P7"}, \
	{H_P8,				"H_P8"}, \
	{H_P9,				"H_P9"}, \
	{H_TOO_BIG,			"H_TOO_BIG"}, \
	{H_OVERLAP,			"H_OVERLAP"}, \
	{H_INTERRUPT,			"H_INTERRUPT"}, \
	{H_BAD_DATA,			"H_BAD_DATA"}, \
	{H_NOT_ACTIVE,			"H_NOT_ACTIVE"}, \
	{H_SG_LIST,			"H_SG_LIST"}, \
	{H_OP_MODE,			"H_OP_MODE"}, \
	{H_COP_HW,			"H_COP_HW"}, \
	{H_UNSUPPORTED_FLAG_START,	"H_UNSUPPORTED_FLAG_START"}, \
	{H_UNSUPPORTED_FLAG_END,	"H_UNSUPPORTED_FLAG_END"}, \
	{H_MULTI_THREADS_ACTIVE,	"H_MULTI_THREADS_ACTIVE"}, \
	{H_OUTSTANDING_COP_OPS,		"H_OUTSTANDING_COP_OPS"}

TRACE_EVENT(kvm_guest_enter,
	TP_PROTO(struct kvm_vcpu *vcpu),
	TP_ARGS(vcpu),

	TP_STRUCT__entry(
		__field(int,		vcpu_id)
		__field(unsigned long,	pc)
		__field(unsigned long,  pending_exceptions)
		__field(u8,		ceded)
	),

	TP_fast_assign(
		__entry->vcpu_id	= vcpu->vcpu_id;
		__entry->pc		= kvmppc_get_pc(vcpu);
		__entry->ceded		= vcpu->arch.ceded;
		__entry->pending_exceptions  = vcpu->arch.pending_exceptions;
	),

	TP_printk("VCPU %d: pc=0x%lx pexcp=0x%lx ceded=%d",
			__entry->vcpu_id,
			__entry->pc,
			__entry->pending_exceptions, __entry->ceded)
);

TRACE_EVENT(kvm_guest_exit,
	TP_PROTO(struct kvm_vcpu *vcpu),
	TP_ARGS(vcpu),

	TP_STRUCT__entry(
		__field(int,		vcpu_id)
		__field(int,		trap)
		__field(unsigned long,	pc)
		__field(unsigned long,	msr)
		__field(u8,		ceded)
	),

	TP_fast_assign(
		__entry->vcpu_id = vcpu->vcpu_id;
		__entry->trap	 = vcpu->arch.trap;
		__entry->ceded	 = vcpu->arch.ceded;
		__entry->pc	 = kvmppc_get_pc(vcpu);
		__entry->msr	 = vcpu->arch.shregs.msr;
	),

	TP_printk("VCPU %d: trap=%s pc=0x%lx msr=0x%lx, ceded=%d",
		__entry->vcpu_id,
		__print_symbolic(__entry->trap, kvm_trace_symbol_exit),
		__entry->pc, __entry->msr, __entry->ceded
	)
);

TRACE_EVENT(kvm_page_fault_enter,
	TP_PROTO(struct kvm_vcpu *vcpu, unsigned long *hptep,
		 struct kvm_memory_slot *memslot, unsigned long ea,
		 unsigned long dsisr),

	TP_ARGS(vcpu, hptep, memslot, ea, dsisr),

	TP_STRUCT__entry(
		__field(int,		vcpu_id)
		__field(unsigned long,	hpte_v)
		__field(unsigned long,	hpte_r)
		__field(unsigned long,	gpte_r)
		__field(unsigned long,	ea)
		__field(u64,		base_gfn)
		__field(u32,		slot_flags)
		__field(u32,		dsisr)
	),

	TP_fast_assign(
		__entry->vcpu_id  = vcpu->vcpu_id;
		__entry->hpte_v	  = hptep[0];
		__entry->hpte_r	  = hptep[1];
		__entry->gpte_r	  = hptep[2];
		__entry->ea	  = ea;
		__entry->dsisr	  = dsisr;
		__entry->base_gfn = memslot ? memslot->base_gfn : -1UL;
		__entry->slot_flags = memslot ? memslot->flags : 0;
	),

	TP_printk("VCPU %d: hpte=0x%lx:0x%lx guest=0x%lx ea=0x%lx,%x slot=0x%llx,0x%x",
		   __entry->vcpu_id,
		   __entry->hpte_v, __entry->hpte_r, __entry->gpte_r,
		   __entry->ea, __entry->dsisr,
		   __entry->base_gfn, __entry->slot_flags)
);

TRACE_EVENT(kvm_page_fault_exit,
	TP_PROTO(struct kvm_vcpu *vcpu, unsigned long *hptep, long ret),

	TP_ARGS(vcpu, hptep, ret),

	TP_STRUCT__entry(
		__field(int,		vcpu_id)
		__field(unsigned long,	hpte_v)
		__field(unsigned long,	hpte_r)
		__field(long,		ret)
	),

	TP_fast_assign(
		__entry->vcpu_id  = vcpu->vcpu_id;
		__entry->hpte_v	= hptep[0];
		__entry->hpte_r	= hptep[1];
		__entry->ret = ret;
	),

	TP_printk("VCPU %d: hpte=0x%lx:0x%lx ret=0x%lx",
		   __entry->vcpu_id,
		   __entry->hpte_v, __entry->hpte_r, __entry->ret)
);

TRACE_EVENT(kvm_hcall_enter,
	TP_PROTO(struct kvm_vcpu *vcpu),

	TP_ARGS(vcpu),

	TP_STRUCT__entry(
		__field(int,		vcpu_id)
		__field(unsigned long,	req)
		__field(unsigned long,	gpr4)
		__field(unsigned long,	gpr5)
		__field(unsigned long,	gpr6)
		__field(unsigned long,	gpr7)
	),

	TP_fast_assign(
		__entry->vcpu_id  = vcpu->vcpu_id;
		__entry->req   = kvmppc_get_gpr(vcpu, 3);
		__entry->gpr4  = kvmppc_get_gpr(vcpu, 4);
		__entry->gpr5  = kvmppc_get_gpr(vcpu, 5);
		__entry->gpr6  = kvmppc_get_gpr(vcpu, 6);
		__entry->gpr7  = kvmppc_get_gpr(vcpu, 7);
	),

	TP_printk("VCPU %d: hcall=%s GPR4-7=0x%lx,0x%lx,0x%lx,0x%lx",
		   __entry->vcpu_id,
		   __print_symbolic(__entry->req, kvm_trace_symbol_hcall),
		   __entry->gpr4, __entry->gpr5, __entry->gpr6, __entry->gpr7)
);

TRACE_EVENT(kvm_hcall_exit,
	TP_PROTO(struct kvm_vcpu *vcpu, int ret),

	TP_ARGS(vcpu, ret),

	TP_STRUCT__entry(
		__field(int,		vcpu_id)
		__field(unsigned long,	ret)
		__field(unsigned long,	hcall_rc)
	),

	TP_fast_assign(
		__entry->vcpu_id  = vcpu->vcpu_id;
		__entry->ret	  = ret;
		__entry->hcall_rc = kvmppc_get_gpr(vcpu, 3);
	),

	TP_printk("VCPU %d: ret=%s hcall_rc=%s",
		   __entry->vcpu_id,
		   __print_symbolic(__entry->ret, kvm_trace_symbol_kvmret),
		   __print_symbolic(__entry->ret & RESUME_FLAG_HOST ?
					H_TOO_HARD : __entry->hcall_rc,
					kvm_trace_symbol_hcall_rc))
);

TRACE_EVENT(kvmppc_run_core,
	TP_PROTO(struct kvmppc_vcore *vc, int where),

	TP_ARGS(vc, where),

	TP_STRUCT__entry(
		__field(int,	n_runnable)
		__field(int,	runner_vcpu)
		__field(int,	where)
		__field(pid_t,	tgid)
	),

	TP_fast_assign(
		__entry->runner_vcpu	= vc->runner->vcpu_id;
		__entry->n_runnable	= vc->n_runnable;
		__entry->where		= where;
		__entry->tgid		= current->tgid;
	),

	TP_printk("%s runner_vcpu==%d runnable=%d tgid=%d",
		    __entry->where ? "Exit" : "Enter",
		    __entry->runner_vcpu, __entry->n_runnable, __entry->tgid)
);

TRACE_EVENT(kvmppc_vcore_blocked,
	TP_PROTO(struct kvmppc_vcore *vc, int where),

	TP_ARGS(vc, where),

	TP_STRUCT__entry(
		__field(int,	n_runnable)
		__field(int,	runner_vcpu)
		__field(int,	where)
		__field(pid_t,	tgid)
	),

	TP_fast_assign(
		__entry->runner_vcpu = vc->runner->vcpu_id;
		__entry->n_runnable  = vc->n_runnable;
		__entry->where       = where;
		__entry->tgid	     = current->tgid;
	),

	TP_printk("%s runner_vcpu=%d runnable=%d tgid=%d",
		   __entry->where ? "Exit" : "Enter",
		   __entry->runner_vcpu, __entry->n_runnable, __entry->tgid)
);

TRACE_EVENT(kvmppc_vcore_wakeup,
	TP_PROTO(int do_sleep, __u64 ns),

	TP_ARGS(do_sleep, ns),

	TP_STRUCT__entry(
		__field(__u64,  ns)
		__field(int,    waited)
		__field(pid_t,  tgid)
	),

	TP_fast_assign(
		__entry->ns     = ns;
		__entry->waited = do_sleep;
		__entry->tgid   = current->tgid;
	),

	TP_printk("%s time %llu ns, tgid=%d",
		__entry->waited ? "wait" : "poll",
		__entry->ns, __entry->tgid)
);

TRACE_EVENT(kvmppc_run_vcpu_enter,
	TP_PROTO(struct kvm_vcpu *vcpu),

	TP_ARGS(vcpu),

	TP_STRUCT__entry(
		__field(int,		vcpu_id)
		__field(pid_t,		tgid)
	),

	TP_fast_assign(
		__entry->vcpu_id  = vcpu->vcpu_id;
		__entry->tgid	  = current->tgid;
	),

	TP_printk("VCPU %d: tgid=%d", __entry->vcpu_id, __entry->tgid)
);

TRACE_EVENT(kvmppc_run_vcpu_exit,
	TP_PROTO(struct kvm_vcpu *vcpu),

	TP_ARGS(vcpu),

	TP_STRUCT__entry(
		__field(int,		vcpu_id)
		__field(int,		exit)
		__field(int,		ret)
	),

	TP_fast_assign(
		__entry->vcpu_id  = vcpu->vcpu_id;
		__entry->exit     = vcpu->run->exit_reason;
		__entry->ret      = vcpu->arch.ret;
	),

	TP_printk("VCPU %d: exit=%d, ret=%d",
			__entry->vcpu_id, __entry->exit, __entry->ret)
);

#endif /* _TRACE_KVM_HV_H */

/* This part must be outside protection */

#undef TRACE_INCLUDE_PATH
#undef TRACE_INCLUDE_FILE

#define TRACE_INCLUDE_PATH .
#define TRACE_INCLUDE_FILE trace_hv

#include <trace/define_trace.h>
