Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/arch/powerpc/kvm/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 15 kB image not shown  

Quelle  trace_hv.h   Sprache: C

 
/* 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)
);

#ifdef CONFIG_PPC_PSERIES

TRACE_EVENT_FN_COND(kvmppc_vcpu_stats,
 TP_PROTO(struct kvm_vcpu *vcpu, u64 l1_to_l2_cs, u64 l2_to_l1_cs, u64 l2_runtime),

 TP_ARGS(vcpu, l1_to_l2_cs, l2_to_l1_cs, l2_runtime),

 TP_CONDITION(l1_to_l2_cs || l2_to_l1_cs || l2_runtime),

 TP_STRUCT__entry(
  __field(int,  vcpu_id)
  __field(u64,  l1_to_l2_cs)
  __field(u64,  l2_to_l1_cs)
  __field(u64,  l2_runtime)
 ),

 TP_fast_assign(
  __entry->vcpu_id  = vcpu->vcpu_id;
  __entry->l1_to_l2_cs = l1_to_l2_cs;
  __entry->l2_to_l1_cs = l2_to_l1_cs;
  __entry->l2_runtime = l2_runtime;
 ),

 TP_printk("VCPU %d: l1_to_l2_cs_time=%llu ns l2_to_l1_cs_time=%llu ns l2_runtime=%llu ns",
  __entry->vcpu_id,  __entry->l1_to_l2_cs,
  __entry->l2_to_l1_cs, __entry->l2_runtime),
 kvmhv_counters_tracepoint_regfunc, kvmhv_counters_tracepoint_unregfunc
);
#endif
#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>

Messung V0.5
C=100 H=96 G=97

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.