Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #if !defined(_TRACE_KVM_HV_H) || defined(TRACE_HEADER_MULTI_READ)
0003 #define _TRACE_KVM_HV_H
0004 
0005 #include <linux/tracepoint.h>
0006 #include "trace_book3s.h"
0007 #include <asm/hvcall.h>
0008 #include <asm/kvm_asm.h>
0009 
0010 #undef TRACE_SYSTEM
0011 #define TRACE_SYSTEM kvm_hv
0012 
0013 #define kvm_trace_symbol_hcall \
0014     {H_REMOVE,          "H_REMOVE"}, \
0015     {H_ENTER,           "H_ENTER"}, \
0016     {H_READ,            "H_READ"}, \
0017     {H_CLEAR_MOD,           "H_CLEAR_MOD"}, \
0018     {H_CLEAR_REF,           "H_CLEAR_REF"}, \
0019     {H_PROTECT,         "H_PROTECT"}, \
0020     {H_GET_TCE,         "H_GET_TCE"}, \
0021     {H_PUT_TCE,         "H_PUT_TCE"}, \
0022     {H_SET_SPRG0,           "H_SET_SPRG0"}, \
0023     {H_SET_DABR,            "H_SET_DABR"}, \
0024     {H_PAGE_INIT,           "H_PAGE_INIT"}, \
0025     {H_SET_ASR,         "H_SET_ASR"}, \
0026     {H_ASR_ON,          "H_ASR_ON"}, \
0027     {H_ASR_OFF,         "H_ASR_OFF"}, \
0028     {H_LOGICAL_CI_LOAD,     "H_LOGICAL_CI_LOAD"}, \
0029     {H_LOGICAL_CI_STORE,        "H_LOGICAL_CI_STORE"}, \
0030     {H_LOGICAL_CACHE_LOAD,      "H_LOGICAL_CACHE_LOAD"}, \
0031     {H_LOGICAL_CACHE_STORE,     "H_LOGICAL_CACHE_STORE"}, \
0032     {H_LOGICAL_ICBI,        "H_LOGICAL_ICBI"}, \
0033     {H_LOGICAL_DCBF,        "H_LOGICAL_DCBF"}, \
0034     {H_GET_TERM_CHAR,       "H_GET_TERM_CHAR"}, \
0035     {H_PUT_TERM_CHAR,       "H_PUT_TERM_CHAR"}, \
0036     {H_REAL_TO_LOGICAL,     "H_REAL_TO_LOGICAL"}, \
0037     {H_HYPERVISOR_DATA,     "H_HYPERVISOR_DATA"}, \
0038     {H_EOI,             "H_EOI"}, \
0039     {H_CPPR,            "H_CPPR"}, \
0040     {H_IPI,             "H_IPI"}, \
0041     {H_IPOLL,           "H_IPOLL"}, \
0042     {H_XIRR,            "H_XIRR"}, \
0043     {H_PERFMON,         "H_PERFMON"}, \
0044     {H_MIGRATE_DMA,         "H_MIGRATE_DMA"}, \
0045     {H_REGISTER_VPA,        "H_REGISTER_VPA"}, \
0046     {H_CEDE,            "H_CEDE"}, \
0047     {H_CONFER,          "H_CONFER"}, \
0048     {H_PROD,            "H_PROD"}, \
0049     {H_GET_PPP,         "H_GET_PPP"}, \
0050     {H_SET_PPP,         "H_SET_PPP"}, \
0051     {H_PURR,            "H_PURR"}, \
0052     {H_PIC,             "H_PIC"}, \
0053     {H_REG_CRQ,         "H_REG_CRQ"}, \
0054     {H_FREE_CRQ,            "H_FREE_CRQ"}, \
0055     {H_VIO_SIGNAL,          "H_VIO_SIGNAL"}, \
0056     {H_SEND_CRQ,            "H_SEND_CRQ"}, \
0057     {H_COPY_RDMA,           "H_COPY_RDMA"}, \
0058     {H_REGISTER_LOGICAL_LAN,    "H_REGISTER_LOGICAL_LAN"}, \
0059     {H_FREE_LOGICAL_LAN,        "H_FREE_LOGICAL_LAN"}, \
0060     {H_ADD_LOGICAL_LAN_BUFFER,  "H_ADD_LOGICAL_LAN_BUFFER"}, \
0061     {H_SEND_LOGICAL_LAN,        "H_SEND_LOGICAL_LAN"}, \
0062     {H_BULK_REMOVE,         "H_BULK_REMOVE"}, \
0063     {H_MULTICAST_CTRL,      "H_MULTICAST_CTRL"}, \
0064     {H_SET_XDABR,           "H_SET_XDABR"}, \
0065     {H_STUFF_TCE,           "H_STUFF_TCE"}, \
0066     {H_PUT_TCE_INDIRECT,        "H_PUT_TCE_INDIRECT"}, \
0067     {H_CHANGE_LOGICAL_LAN_MAC,  "H_CHANGE_LOGICAL_LAN_MAC"}, \
0068     {H_VTERM_PARTNER_INFO,      "H_VTERM_PARTNER_INFO"}, \
0069     {H_REGISTER_VTERM,      "H_REGISTER_VTERM"}, \
0070     {H_FREE_VTERM,          "H_FREE_VTERM"}, \
0071     {H_RESET_EVENTS,        "H_RESET_EVENTS"}, \
0072     {H_ALLOC_RESOURCE,      "H_ALLOC_RESOURCE"}, \
0073     {H_FREE_RESOURCE,       "H_FREE_RESOURCE"}, \
0074     {H_MODIFY_QP,           "H_MODIFY_QP"}, \
0075     {H_QUERY_QP,            "H_QUERY_QP"}, \
0076     {H_REREGISTER_PMR,      "H_REREGISTER_PMR"}, \
0077     {H_REGISTER_SMR,        "H_REGISTER_SMR"}, \
0078     {H_QUERY_MR,            "H_QUERY_MR"}, \
0079     {H_QUERY_MW,            "H_QUERY_MW"}, \
0080     {H_QUERY_HCA,           "H_QUERY_HCA"}, \
0081     {H_QUERY_PORT,          "H_QUERY_PORT"}, \
0082     {H_MODIFY_PORT,         "H_MODIFY_PORT"}, \
0083     {H_DEFINE_AQP1,         "H_DEFINE_AQP1"}, \
0084     {H_GET_TRACE_BUFFER,        "H_GET_TRACE_BUFFER"}, \
0085     {H_DEFINE_AQP0,         "H_DEFINE_AQP0"}, \
0086     {H_RESIZE_MR,           "H_RESIZE_MR"}, \
0087     {H_ATTACH_MCQP,         "H_ATTACH_MCQP"}, \
0088     {H_DETACH_MCQP,         "H_DETACH_MCQP"}, \
0089     {H_CREATE_RPT,          "H_CREATE_RPT"}, \
0090     {H_REMOVE_RPT,          "H_REMOVE_RPT"}, \
0091     {H_REGISTER_RPAGES,     "H_REGISTER_RPAGES"}, \
0092     {H_DISABLE_AND_GET,     "H_DISABLE_AND_GET"}, \
0093     {H_ERROR_DATA,          "H_ERROR_DATA"}, \
0094     {H_GET_HCA_INFO,        "H_GET_HCA_INFO"}, \
0095     {H_GET_PERF_COUNT,      "H_GET_PERF_COUNT"}, \
0096     {H_MANAGE_TRACE,        "H_MANAGE_TRACE"}, \
0097     {H_GET_CPU_CHARACTERISTICS, "H_GET_CPU_CHARACTERISTICS"}, \
0098     {H_FREE_LOGICAL_LAN_BUFFER, "H_FREE_LOGICAL_LAN_BUFFER"}, \
0099     {H_QUERY_INT_STATE,     "H_QUERY_INT_STATE"}, \
0100     {H_POLL_PENDING,        "H_POLL_PENDING"}, \
0101     {H_ILLAN_ATTRIBUTES,        "H_ILLAN_ATTRIBUTES"}, \
0102     {H_MODIFY_HEA_QP,       "H_MODIFY_HEA_QP"}, \
0103     {H_QUERY_HEA_QP,        "H_QUERY_HEA_QP"}, \
0104     {H_QUERY_HEA,           "H_QUERY_HEA"}, \
0105     {H_QUERY_HEA_PORT,      "H_QUERY_HEA_PORT"}, \
0106     {H_MODIFY_HEA_PORT,     "H_MODIFY_HEA_PORT"}, \
0107     {H_REG_BCMC,            "H_REG_BCMC"}, \
0108     {H_DEREG_BCMC,          "H_DEREG_BCMC"}, \
0109     {H_REGISTER_HEA_RPAGES,     "H_REGISTER_HEA_RPAGES"}, \
0110     {H_DISABLE_AND_GET_HEA,     "H_DISABLE_AND_GET_HEA"}, \
0111     {H_GET_HEA_INFO,        "H_GET_HEA_INFO"}, \
0112     {H_ALLOC_HEA_RESOURCE,      "H_ALLOC_HEA_RESOURCE"}, \
0113     {H_ADD_CONN,            "H_ADD_CONN"}, \
0114     {H_DEL_CONN,            "H_DEL_CONN"}, \
0115     {H_JOIN,            "H_JOIN"}, \
0116     {H_VASI_STATE,          "H_VASI_STATE"}, \
0117     {H_ENABLE_CRQ,          "H_ENABLE_CRQ"}, \
0118     {H_GET_EM_PARMS,        "H_GET_EM_PARMS"}, \
0119     {H_GET_ENERGY_SCALE_INFO,   "H_GET_ENERGY_SCALE_INFO"}, \
0120     {H_SET_MPP,         "H_SET_MPP"}, \
0121     {H_GET_MPP,         "H_GET_MPP"}, \
0122     {H_HOME_NODE_ASSOCIATIVITY, "H_HOME_NODE_ASSOCIATIVITY"}, \
0123     {H_BEST_ENERGY,         "H_BEST_ENERGY"}, \
0124     {H_XIRR_X,          "H_XIRR_X"}, \
0125     {H_RANDOM,          "H_RANDOM"}, \
0126     {H_COP,             "H_COP"}, \
0127     {H_GET_MPP_X,           "H_GET_MPP_X"}, \
0128     {H_SET_MODE,            "H_SET_MODE"}, \
0129     {H_REGISTER_PROC_TBL,       "H_REGISTER_PROC_TBL"}, \
0130     {H_QUERY_VAS_CAPABILITIES,  "H_QUERY_VAS_CAPABILITIES"}, \
0131     {H_INT_GET_SOURCE_INFO,     "H_INT_GET_SOURCE_INFO"}, \
0132     {H_INT_SET_SOURCE_CONFIG,   "H_INT_SET_SOURCE_CONFIG"}, \
0133     {H_INT_GET_QUEUE_INFO,      "H_INT_GET_QUEUE_INFO"}, \
0134     {H_INT_SET_QUEUE_CONFIG,    "H_INT_SET_QUEUE_CONFIG"}, \
0135     {H_INT_ESB,         "H_INT_ESB"}, \
0136     {H_INT_RESET,           "H_INT_RESET"}, \
0137     {H_RPT_INVALIDATE,      "H_RPT_INVALIDATE"}, \
0138     {H_RTAS,            "H_RTAS"}, \
0139     {H_LOGICAL_MEMOP,       "H_LOGICAL_MEMOP"}, \
0140     {H_CAS,             "H_CAS"}, \
0141     {H_UPDATE_DT,           "H_UPDATE_DT"}, \
0142     {H_GET_PERF_COUNTER_INFO,   "H_GET_PERF_COUNTER_INFO"}, \
0143     {H_SET_PARTITION_TABLE,     "H_SET_PARTITION_TABLE"}, \
0144     {H_ENTER_NESTED,        "H_ENTER_NESTED"}, \
0145     {H_TLB_INVALIDATE,      "H_TLB_INVALIDATE"}, \
0146     {H_COPY_TOFROM_GUEST,       "H_COPY_TOFROM_GUEST"}
0147 
0148 
0149 #define kvm_trace_symbol_kvmret \
0150     {RESUME_GUEST,          "RESUME_GUEST"}, \
0151     {RESUME_GUEST_NV,       "RESUME_GUEST_NV"}, \
0152     {RESUME_HOST,           "RESUME_HOST"}, \
0153     {RESUME_HOST_NV,        "RESUME_HOST_NV"}
0154 
0155 #define kvm_trace_symbol_hcall_rc \
0156     {H_SUCCESS,         "H_SUCCESS"}, \
0157     {H_BUSY,            "H_BUSY"}, \
0158     {H_CLOSED,          "H_CLOSED"}, \
0159     {H_NOT_AVAILABLE,       "H_NOT_AVAILABLE"}, \
0160     {H_CONSTRAINED,         "H_CONSTRAINED"}, \
0161     {H_PARTIAL,         "H_PARTIAL"}, \
0162     {H_IN_PROGRESS,         "H_IN_PROGRESS"}, \
0163     {H_PAGE_REGISTERED,     "H_PAGE_REGISTERED"}, \
0164     {H_PARTIAL_STORE,       "H_PARTIAL_STORE"}, \
0165     {H_PENDING,         "H_PENDING"}, \
0166     {H_CONTINUE,            "H_CONTINUE"}, \
0167     {H_LONG_BUSY_START_RANGE,   "H_LONG_BUSY_START_RANGE"}, \
0168     {H_LONG_BUSY_ORDER_1_MSEC,  "H_LONG_BUSY_ORDER_1_MSEC"}, \
0169     {H_LONG_BUSY_ORDER_10_MSEC, "H_LONG_BUSY_ORDER_10_MSEC"}, \
0170     {H_LONG_BUSY_ORDER_100_MSEC,    "H_LONG_BUSY_ORDER_100_MSEC"}, \
0171     {H_LONG_BUSY_ORDER_1_SEC,   "H_LONG_BUSY_ORDER_1_SEC"}, \
0172     {H_LONG_BUSY_ORDER_10_SEC,  "H_LONG_BUSY_ORDER_10_SEC"}, \
0173     {H_LONG_BUSY_ORDER_100_SEC, "H_LONG_BUSY_ORDER_100_SEC"}, \
0174     {H_LONG_BUSY_END_RANGE,     "H_LONG_BUSY_END_RANGE"}, \
0175     {H_TOO_HARD,            "H_TOO_HARD"}, \
0176     {H_HARDWARE,            "H_HARDWARE"}, \
0177     {H_FUNCTION,            "H_FUNCTION"}, \
0178     {H_PRIVILEGE,           "H_PRIVILEGE"}, \
0179     {H_PARAMETER,           "H_PARAMETER"}, \
0180     {H_BAD_MODE,            "H_BAD_MODE"}, \
0181     {H_PTEG_FULL,           "H_PTEG_FULL"}, \
0182     {H_NOT_FOUND,           "H_NOT_FOUND"}, \
0183     {H_RESERVED_DABR,       "H_RESERVED_DABR"}, \
0184     {H_NO_MEM,          "H_NO_MEM"}, \
0185     {H_AUTHORITY,           "H_AUTHORITY"}, \
0186     {H_PERMISSION,          "H_PERMISSION"}, \
0187     {H_DROPPED,         "H_DROPPED"}, \
0188     {H_SOURCE_PARM,         "H_SOURCE_PARM"}, \
0189     {H_DEST_PARM,           "H_DEST_PARM"}, \
0190     {H_REMOTE_PARM,         "H_REMOTE_PARM"}, \
0191     {H_RESOURCE,            "H_RESOURCE"}, \
0192     {H_ADAPTER_PARM,        "H_ADAPTER_PARM"}, \
0193     {H_RH_PARM,         "H_RH_PARM"}, \
0194     {H_RCQ_PARM,            "H_RCQ_PARM"}, \
0195     {H_SCQ_PARM,            "H_SCQ_PARM"}, \
0196     {H_EQ_PARM,         "H_EQ_PARM"}, \
0197     {H_RT_PARM,         "H_RT_PARM"}, \
0198     {H_ST_PARM,         "H_ST_PARM"}, \
0199     {H_SIGT_PARM,           "H_SIGT_PARM"}, \
0200     {H_TOKEN_PARM,          "H_TOKEN_PARM"}, \
0201     {H_MLENGTH_PARM,        "H_MLENGTH_PARM"}, \
0202     {H_MEM_PARM,            "H_MEM_PARM"}, \
0203     {H_MEM_ACCESS_PARM,     "H_MEM_ACCESS_PARM"}, \
0204     {H_ATTR_PARM,           "H_ATTR_PARM"}, \
0205     {H_PORT_PARM,           "H_PORT_PARM"}, \
0206     {H_MCG_PARM,            "H_MCG_PARM"}, \
0207     {H_VL_PARM,         "H_VL_PARM"}, \
0208     {H_TSIZE_PARM,          "H_TSIZE_PARM"}, \
0209     {H_TRACE_PARM,          "H_TRACE_PARM"}, \
0210     {H_MASK_PARM,           "H_MASK_PARM"}, \
0211     {H_MCG_FULL,            "H_MCG_FULL"}, \
0212     {H_ALIAS_EXIST,         "H_ALIAS_EXIST"}, \
0213     {H_P_COUNTER,           "H_P_COUNTER"}, \
0214     {H_TABLE_FULL,          "H_TABLE_FULL"}, \
0215     {H_ALT_TABLE,           "H_ALT_TABLE"}, \
0216     {H_MR_CONDITION,        "H_MR_CONDITION"}, \
0217     {H_NOT_ENOUGH_RESOURCES,    "H_NOT_ENOUGH_RESOURCES"}, \
0218     {H_R_STATE,         "H_R_STATE"}, \
0219     {H_RESCINDED,           "H_RESCINDED"}, \
0220     {H_P2,              "H_P2"}, \
0221     {H_P3,              "H_P3"}, \
0222     {H_P4,              "H_P4"}, \
0223     {H_P5,              "H_P5"}, \
0224     {H_P6,              "H_P6"}, \
0225     {H_P7,              "H_P7"}, \
0226     {H_P8,              "H_P8"}, \
0227     {H_P9,              "H_P9"}, \
0228     {H_TOO_BIG,         "H_TOO_BIG"}, \
0229     {H_OVERLAP,         "H_OVERLAP"}, \
0230     {H_INTERRUPT,           "H_INTERRUPT"}, \
0231     {H_BAD_DATA,            "H_BAD_DATA"}, \
0232     {H_NOT_ACTIVE,          "H_NOT_ACTIVE"}, \
0233     {H_SG_LIST,         "H_SG_LIST"}, \
0234     {H_OP_MODE,         "H_OP_MODE"}, \
0235     {H_COP_HW,          "H_COP_HW"}, \
0236     {H_UNSUPPORTED_FLAG_START,  "H_UNSUPPORTED_FLAG_START"}, \
0237     {H_UNSUPPORTED_FLAG_END,    "H_UNSUPPORTED_FLAG_END"}, \
0238     {H_MULTI_THREADS_ACTIVE,    "H_MULTI_THREADS_ACTIVE"}, \
0239     {H_OUTSTANDING_COP_OPS,     "H_OUTSTANDING_COP_OPS"}
0240 
0241 TRACE_EVENT(kvm_guest_enter,
0242     TP_PROTO(struct kvm_vcpu *vcpu),
0243     TP_ARGS(vcpu),
0244 
0245     TP_STRUCT__entry(
0246         __field(int,        vcpu_id)
0247         __field(unsigned long,  pc)
0248         __field(unsigned long,  pending_exceptions)
0249         __field(u8,     ceded)
0250     ),
0251 
0252     TP_fast_assign(
0253         __entry->vcpu_id    = vcpu->vcpu_id;
0254         __entry->pc     = kvmppc_get_pc(vcpu);
0255         __entry->ceded      = vcpu->arch.ceded;
0256         __entry->pending_exceptions  = vcpu->arch.pending_exceptions;
0257     ),
0258 
0259     TP_printk("VCPU %d: pc=0x%lx pexcp=0x%lx ceded=%d",
0260             __entry->vcpu_id,
0261             __entry->pc,
0262             __entry->pending_exceptions, __entry->ceded)
0263 );
0264 
0265 TRACE_EVENT(kvm_guest_exit,
0266     TP_PROTO(struct kvm_vcpu *vcpu),
0267     TP_ARGS(vcpu),
0268 
0269     TP_STRUCT__entry(
0270         __field(int,        vcpu_id)
0271         __field(int,        trap)
0272         __field(unsigned long,  pc)
0273         __field(unsigned long,  msr)
0274         __field(u8,     ceded)
0275     ),
0276 
0277     TP_fast_assign(
0278         __entry->vcpu_id = vcpu->vcpu_id;
0279         __entry->trap    = vcpu->arch.trap;
0280         __entry->ceded   = vcpu->arch.ceded;
0281         __entry->pc  = kvmppc_get_pc(vcpu);
0282         __entry->msr     = vcpu->arch.shregs.msr;
0283     ),
0284 
0285     TP_printk("VCPU %d: trap=%s pc=0x%lx msr=0x%lx, ceded=%d",
0286         __entry->vcpu_id,
0287         __print_symbolic(__entry->trap, kvm_trace_symbol_exit),
0288         __entry->pc, __entry->msr, __entry->ceded
0289     )
0290 );
0291 
0292 TRACE_EVENT(kvm_page_fault_enter,
0293     TP_PROTO(struct kvm_vcpu *vcpu, unsigned long *hptep,
0294          struct kvm_memory_slot *memslot, unsigned long ea,
0295          unsigned long dsisr),
0296 
0297     TP_ARGS(vcpu, hptep, memslot, ea, dsisr),
0298 
0299     TP_STRUCT__entry(
0300         __field(int,        vcpu_id)
0301         __field(unsigned long,  hpte_v)
0302         __field(unsigned long,  hpte_r)
0303         __field(unsigned long,  gpte_r)
0304         __field(unsigned long,  ea)
0305         __field(u64,        base_gfn)
0306         __field(u32,        slot_flags)
0307         __field(u32,        dsisr)
0308     ),
0309 
0310     TP_fast_assign(
0311         __entry->vcpu_id  = vcpu->vcpu_id;
0312         __entry->hpte_v   = hptep[0];
0313         __entry->hpte_r   = hptep[1];
0314         __entry->gpte_r   = hptep[2];
0315         __entry->ea   = ea;
0316         __entry->dsisr    = dsisr;
0317         __entry->base_gfn = memslot ? memslot->base_gfn : -1UL;
0318         __entry->slot_flags = memslot ? memslot->flags : 0;
0319     ),
0320 
0321     TP_printk("VCPU %d: hpte=0x%lx:0x%lx guest=0x%lx ea=0x%lx,%x slot=0x%llx,0x%x",
0322            __entry->vcpu_id,
0323            __entry->hpte_v, __entry->hpte_r, __entry->gpte_r,
0324            __entry->ea, __entry->dsisr,
0325            __entry->base_gfn, __entry->slot_flags)
0326 );
0327 
0328 TRACE_EVENT(kvm_page_fault_exit,
0329     TP_PROTO(struct kvm_vcpu *vcpu, unsigned long *hptep, long ret),
0330 
0331     TP_ARGS(vcpu, hptep, ret),
0332 
0333     TP_STRUCT__entry(
0334         __field(int,        vcpu_id)
0335         __field(unsigned long,  hpte_v)
0336         __field(unsigned long,  hpte_r)
0337         __field(long,       ret)
0338     ),
0339 
0340     TP_fast_assign(
0341         __entry->vcpu_id  = vcpu->vcpu_id;
0342         __entry->hpte_v = hptep[0];
0343         __entry->hpte_r = hptep[1];
0344         __entry->ret = ret;
0345     ),
0346 
0347     TP_printk("VCPU %d: hpte=0x%lx:0x%lx ret=0x%lx",
0348            __entry->vcpu_id,
0349            __entry->hpte_v, __entry->hpte_r, __entry->ret)
0350 );
0351 
0352 TRACE_EVENT(kvm_hcall_enter,
0353     TP_PROTO(struct kvm_vcpu *vcpu),
0354 
0355     TP_ARGS(vcpu),
0356 
0357     TP_STRUCT__entry(
0358         __field(int,        vcpu_id)
0359         __field(unsigned long,  req)
0360         __field(unsigned long,  gpr4)
0361         __field(unsigned long,  gpr5)
0362         __field(unsigned long,  gpr6)
0363         __field(unsigned long,  gpr7)
0364     ),
0365 
0366     TP_fast_assign(
0367         __entry->vcpu_id  = vcpu->vcpu_id;
0368         __entry->req   = kvmppc_get_gpr(vcpu, 3);
0369         __entry->gpr4  = kvmppc_get_gpr(vcpu, 4);
0370         __entry->gpr5  = kvmppc_get_gpr(vcpu, 5);
0371         __entry->gpr6  = kvmppc_get_gpr(vcpu, 6);
0372         __entry->gpr7  = kvmppc_get_gpr(vcpu, 7);
0373     ),
0374 
0375     TP_printk("VCPU %d: hcall=%s GPR4-7=0x%lx,0x%lx,0x%lx,0x%lx",
0376            __entry->vcpu_id,
0377            __print_symbolic(__entry->req, kvm_trace_symbol_hcall),
0378            __entry->gpr4, __entry->gpr5, __entry->gpr6, __entry->gpr7)
0379 );
0380 
0381 TRACE_EVENT(kvm_hcall_exit,
0382     TP_PROTO(struct kvm_vcpu *vcpu, int ret),
0383 
0384     TP_ARGS(vcpu, ret),
0385 
0386     TP_STRUCT__entry(
0387         __field(int,        vcpu_id)
0388         __field(unsigned long,  ret)
0389         __field(unsigned long,  hcall_rc)
0390     ),
0391 
0392     TP_fast_assign(
0393         __entry->vcpu_id  = vcpu->vcpu_id;
0394         __entry->ret      = ret;
0395         __entry->hcall_rc = kvmppc_get_gpr(vcpu, 3);
0396     ),
0397 
0398     TP_printk("VCPU %d: ret=%s hcall_rc=%s",
0399            __entry->vcpu_id,
0400            __print_symbolic(__entry->ret, kvm_trace_symbol_kvmret),
0401            __print_symbolic(__entry->ret & RESUME_FLAG_HOST ?
0402                     H_TOO_HARD : __entry->hcall_rc,
0403                     kvm_trace_symbol_hcall_rc))
0404 );
0405 
0406 TRACE_EVENT(kvmppc_run_core,
0407     TP_PROTO(struct kvmppc_vcore *vc, int where),
0408 
0409     TP_ARGS(vc, where),
0410 
0411     TP_STRUCT__entry(
0412         __field(int,    n_runnable)
0413         __field(int,    runner_vcpu)
0414         __field(int,    where)
0415         __field(pid_t,  tgid)
0416     ),
0417 
0418     TP_fast_assign(
0419         __entry->runner_vcpu    = vc->runner->vcpu_id;
0420         __entry->n_runnable = vc->n_runnable;
0421         __entry->where      = where;
0422         __entry->tgid       = current->tgid;
0423     ),
0424 
0425     TP_printk("%s runner_vcpu==%d runnable=%d tgid=%d",
0426             __entry->where ? "Exit" : "Enter",
0427             __entry->runner_vcpu, __entry->n_runnable, __entry->tgid)
0428 );
0429 
0430 TRACE_EVENT(kvmppc_vcore_blocked,
0431     TP_PROTO(struct kvm_vcpu *vcpu, int where),
0432 
0433     TP_ARGS(vcpu, where),
0434 
0435     TP_STRUCT__entry(
0436         __field(int,    n_runnable)
0437         __field(int,    runner_vcpu)
0438         __field(int,    where)
0439         __field(pid_t,  tgid)
0440     ),
0441 
0442     TP_fast_assign(
0443         __entry->runner_vcpu = vcpu->vcpu_id;
0444         __entry->n_runnable  = vcpu->arch.vcore->n_runnable;
0445         __entry->where       = where;
0446         __entry->tgid        = current->tgid;
0447     ),
0448 
0449     TP_printk("%s runner_vcpu=%d runnable=%d tgid=%d",
0450            __entry->where ? "Exit" : "Enter",
0451            __entry->runner_vcpu, __entry->n_runnable, __entry->tgid)
0452 );
0453 
0454 TRACE_EVENT(kvmppc_vcore_wakeup,
0455     TP_PROTO(int do_sleep, __u64 ns),
0456 
0457     TP_ARGS(do_sleep, ns),
0458 
0459     TP_STRUCT__entry(
0460         __field(__u64,  ns)
0461         __field(int,    waited)
0462         __field(pid_t,  tgid)
0463     ),
0464 
0465     TP_fast_assign(
0466         __entry->ns     = ns;
0467         __entry->waited = do_sleep;
0468         __entry->tgid   = current->tgid;
0469     ),
0470 
0471     TP_printk("%s time %llu ns, tgid=%d",
0472         __entry->waited ? "wait" : "poll",
0473         __entry->ns, __entry->tgid)
0474 );
0475 
0476 TRACE_EVENT(kvmppc_run_vcpu_enter,
0477     TP_PROTO(struct kvm_vcpu *vcpu),
0478 
0479     TP_ARGS(vcpu),
0480 
0481     TP_STRUCT__entry(
0482         __field(int,        vcpu_id)
0483         __field(pid_t,      tgid)
0484     ),
0485 
0486     TP_fast_assign(
0487         __entry->vcpu_id  = vcpu->vcpu_id;
0488         __entry->tgid     = current->tgid;
0489     ),
0490 
0491     TP_printk("VCPU %d: tgid=%d", __entry->vcpu_id, __entry->tgid)
0492 );
0493 
0494 TRACE_EVENT(kvmppc_run_vcpu_exit,
0495     TP_PROTO(struct kvm_vcpu *vcpu),
0496 
0497     TP_ARGS(vcpu),
0498 
0499     TP_STRUCT__entry(
0500         __field(int,        vcpu_id)
0501         __field(int,        exit)
0502         __field(int,        ret)
0503     ),
0504 
0505     TP_fast_assign(
0506         __entry->vcpu_id  = vcpu->vcpu_id;
0507         __entry->exit     = vcpu->run->exit_reason;
0508         __entry->ret      = vcpu->arch.ret;
0509     ),
0510 
0511     TP_printk("VCPU %d: exit=%d, ret=%d",
0512             __entry->vcpu_id, __entry->exit, __entry->ret)
0513 );
0514 
0515 #endif /* _TRACE_KVM_HV_H */
0516 
0517 /* This part must be outside protection */
0518 
0519 #undef TRACE_INCLUDE_PATH
0520 #undef TRACE_INCLUDE_FILE
0521 
0522 #define TRACE_INCLUDE_PATH .
0523 #define TRACE_INCLUDE_FILE trace_hv
0524 
0525 #include <trace/define_trace.h>