/* 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_GET_CPU_CHARACTERISTICS,	"H_GET_CPU_CHARACTERISTICS"}, \
	{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_GET_ENERGY_SCALE_INFO,	"H_GET_ENERGY_SCALE_INFO"}, \
	{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_REGISTER_PROC_TBL,		"H_REGISTER_PROC_TBL"}, \
	{H_QUERY_VAS_CAPABILITIES,	"H_QUERY_VAS_CAPABILITIES"}, \
	{H_INT_GET_SOURCE_INFO,		"H_INT_GET_SOURCE_INFO"}, \
	{H_INT_SET_SOURCE_CONFIG,	"H_INT_SET_SOURCE_CONFIG"}, \
	{H_INT_GET_QUEUE_INFO,		"H_INT_GET_QUEUE_INFO"}, \
	{H_INT_SET_QUEUE_CONFIG,	"H_INT_SET_QUEUE_CONFIG"}, \
	{H_INT_ESB,			"H_INT_ESB"}, \
	{H_INT_RESET,			"H_INT_RESET"}, \
	{H_RPT_INVALIDATE,		"H_RPT_INVALIDATE"}, \
	{H_RTAS,			"H_RTAS"}, \
	{H_LOGICAL_MEMOP,		"H_LOGICAL_MEMOP"}, \
	{H_CAS,				"H_CAS"}, \
	{H_UPDATE_DT,			"H_UPDATE_DT"}, \
	{H_GET_PERF_COUNTER_INFO,	"H_GET_PERF_COUNTER_INFO"}, \
	{H_SET_PARTITION_TABLE,		"H_SET_PARTITION_TABLE"}, \
	{H_ENTER_NESTED,		"H_ENTER_NESTED"}, \
	{H_TLB_INVALIDATE,		"H_TLB_INVALIDATE"}, \
	{H_COPY_TOFROM_GUEST,		"H_COPY_TOFROM_GUEST"}


#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 kvm_vcpu *vcpu, int where),

	TP_ARGS(vcpu, 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 = vcpu->vcpu_id;
		__entry->n_runnable  = vcpu->arch.vcore->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>
