linux/arch/powerpc/kvm/trace.h
<<
>>
Prefs
   1#if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
   2#define _TRACE_KVM_H
   3
   4#include <linux/tracepoint.h>
   5
   6#undef TRACE_SYSTEM
   7#define TRACE_SYSTEM kvm
   8#define TRACE_INCLUDE_PATH .
   9#define TRACE_INCLUDE_FILE trace
  10
  11/*
  12 * Tracepoint for guest mode entry.
  13 */
  14TRACE_EVENT(kvm_ppc_instr,
  15        TP_PROTO(unsigned int inst, unsigned long _pc, unsigned int emulate),
  16        TP_ARGS(inst, _pc, emulate),
  17
  18        TP_STRUCT__entry(
  19                __field(        unsigned int,   inst            )
  20                __field(        unsigned long,  pc              )
  21                __field(        unsigned int,   emulate         )
  22        ),
  23
  24        TP_fast_assign(
  25                __entry->inst           = inst;
  26                __entry->pc             = _pc;
  27                __entry->emulate        = emulate;
  28        ),
  29
  30        TP_printk("inst %u pc 0x%lx emulate %u\n",
  31                  __entry->inst, __entry->pc, __entry->emulate)
  32);
  33
  34TRACE_EVENT(kvm_stlb_inval,
  35        TP_PROTO(unsigned int stlb_index),
  36        TP_ARGS(stlb_index),
  37
  38        TP_STRUCT__entry(
  39                __field(        unsigned int,   stlb_index      )
  40        ),
  41
  42        TP_fast_assign(
  43                __entry->stlb_index     = stlb_index;
  44        ),
  45
  46        TP_printk("stlb_index %u", __entry->stlb_index)
  47);
  48
  49TRACE_EVENT(kvm_stlb_write,
  50        TP_PROTO(unsigned int victim, unsigned int tid, unsigned int word0,
  51                 unsigned int word1, unsigned int word2),
  52        TP_ARGS(victim, tid, word0, word1, word2),
  53
  54        TP_STRUCT__entry(
  55                __field(        unsigned int,   victim          )
  56                __field(        unsigned int,   tid             )
  57                __field(        unsigned int,   word0           )
  58                __field(        unsigned int,   word1           )
  59                __field(        unsigned int,   word2           )
  60        ),
  61
  62        TP_fast_assign(
  63                __entry->victim         = victim;
  64                __entry->tid            = tid;
  65                __entry->word0          = word0;
  66                __entry->word1          = word1;
  67                __entry->word2          = word2;
  68        ),
  69
  70        TP_printk("victim %u tid %u w0 %u w1 %u w2 %u",
  71                __entry->victim, __entry->tid, __entry->word0,
  72                __entry->word1, __entry->word2)
  73);
  74
  75TRACE_EVENT(kvm_gtlb_write,
  76        TP_PROTO(unsigned int gtlb_index, unsigned int tid, unsigned int word0,
  77                 unsigned int word1, unsigned int word2),
  78        TP_ARGS(gtlb_index, tid, word0, word1, word2),
  79
  80        TP_STRUCT__entry(
  81                __field(        unsigned int,   gtlb_index      )
  82                __field(        unsigned int,   tid             )
  83                __field(        unsigned int,   word0           )
  84                __field(        unsigned int,   word1           )
  85                __field(        unsigned int,   word2           )
  86        ),
  87
  88        TP_fast_assign(
  89                __entry->gtlb_index     = gtlb_index;
  90                __entry->tid            = tid;
  91                __entry->word0          = word0;
  92                __entry->word1          = word1;
  93                __entry->word2          = word2;
  94        ),
  95
  96        TP_printk("gtlb_index %u tid %u w0 %u w1 %u w2 %u",
  97                __entry->gtlb_index, __entry->tid, __entry->word0,
  98                __entry->word1, __entry->word2)
  99);
 100
 101
 102/*************************************************************************
 103 *                         Book3S trace points                           *
 104 *************************************************************************/
 105
 106#ifdef CONFIG_KVM_BOOK3S_PR
 107
 108TRACE_EVENT(kvm_book3s_exit,
 109        TP_PROTO(unsigned int exit_nr, struct kvm_vcpu *vcpu),
 110        TP_ARGS(exit_nr, vcpu),
 111
 112        TP_STRUCT__entry(
 113                __field(        unsigned int,   exit_nr         )
 114                __field(        unsigned long,  pc              )
 115                __field(        unsigned long,  msr             )
 116                __field(        unsigned long,  dar             )
 117                __field(        unsigned long,  srr1            )
 118        ),
 119
 120        TP_fast_assign(
 121                __entry->exit_nr        = exit_nr;
 122                __entry->pc             = kvmppc_get_pc(vcpu);
 123                __entry->dar            = kvmppc_get_fault_dar(vcpu);
 124                __entry->msr            = vcpu->arch.shared->msr;
 125                __entry->srr1           = to_svcpu(vcpu)->shadow_srr1;
 126        ),
 127
 128        TP_printk("exit=0x%x | pc=0x%lx | msr=0x%lx | dar=0x%lx | srr1=0x%lx",
 129                  __entry->exit_nr, __entry->pc, __entry->msr, __entry->dar,
 130                  __entry->srr1)
 131);
 132
 133TRACE_EVENT(kvm_book3s_reenter,
 134        TP_PROTO(int r, struct kvm_vcpu *vcpu),
 135        TP_ARGS(r, vcpu),
 136
 137        TP_STRUCT__entry(
 138                __field(        unsigned int,   r               )
 139                __field(        unsigned long,  pc              )
 140        ),
 141
 142        TP_fast_assign(
 143                __entry->r              = r;
 144                __entry->pc             = kvmppc_get_pc(vcpu);
 145        ),
 146
 147        TP_printk("reentry r=%d | pc=0x%lx", __entry->r, __entry->pc)
 148);
 149
 150#ifdef CONFIG_PPC_BOOK3S_64
 151
 152TRACE_EVENT(kvm_book3s_64_mmu_map,
 153        TP_PROTO(int rflags, ulong hpteg, ulong va, pfn_t hpaddr,
 154                 struct kvmppc_pte *orig_pte),
 155        TP_ARGS(rflags, hpteg, va, hpaddr, orig_pte),
 156
 157        TP_STRUCT__entry(
 158                __field(        unsigned char,          flag_w          )
 159                __field(        unsigned char,          flag_x          )
 160                __field(        unsigned long,          eaddr           )
 161                __field(        unsigned long,          hpteg           )
 162                __field(        unsigned long,          va              )
 163                __field(        unsigned long long,     vpage           )
 164                __field(        unsigned long,          hpaddr          )
 165        ),
 166
 167        TP_fast_assign(
 168                __entry->flag_w = ((rflags & HPTE_R_PP) == 3) ? '-' : 'w';
 169                __entry->flag_x = (rflags & HPTE_R_N) ? '-' : 'x';
 170                __entry->eaddr  = orig_pte->eaddr;
 171                __entry->hpteg  = hpteg;
 172                __entry->va     = va;
 173                __entry->vpage  = orig_pte->vpage;
 174                __entry->hpaddr = hpaddr;
 175        ),
 176
 177        TP_printk("KVM: %c%c Map 0x%lx: [%lx] 0x%lx (0x%llx) -> %lx",
 178                  __entry->flag_w, __entry->flag_x, __entry->eaddr,
 179                  __entry->hpteg, __entry->va, __entry->vpage, __entry->hpaddr)
 180);
 181
 182#endif /* CONFIG_PPC_BOOK3S_64 */
 183
 184TRACE_EVENT(kvm_book3s_mmu_map,
 185        TP_PROTO(struct hpte_cache *pte),
 186        TP_ARGS(pte),
 187
 188        TP_STRUCT__entry(
 189                __field(        u64,            host_va         )
 190                __field(        u64,            pfn             )
 191                __field(        ulong,          eaddr           )
 192                __field(        u64,            vpage           )
 193                __field(        ulong,          raddr           )
 194                __field(        int,            flags           )
 195        ),
 196
 197        TP_fast_assign(
 198                __entry->host_va        = pte->host_va;
 199                __entry->pfn            = pte->pfn;
 200                __entry->eaddr          = pte->pte.eaddr;
 201                __entry->vpage          = pte->pte.vpage;
 202                __entry->raddr          = pte->pte.raddr;
 203                __entry->flags          = (pte->pte.may_read ? 0x4 : 0) |
 204                                          (pte->pte.may_write ? 0x2 : 0) |
 205                                          (pte->pte.may_execute ? 0x1 : 0);
 206        ),
 207
 208        TP_printk("Map: hva=%llx pfn=%llx ea=%lx vp=%llx ra=%lx [%x]",
 209                  __entry->host_va, __entry->pfn, __entry->eaddr,
 210                  __entry->vpage, __entry->raddr, __entry->flags)
 211);
 212
 213TRACE_EVENT(kvm_book3s_mmu_invalidate,
 214        TP_PROTO(struct hpte_cache *pte),
 215        TP_ARGS(pte),
 216
 217        TP_STRUCT__entry(
 218                __field(        u64,            host_va         )
 219                __field(        u64,            pfn             )
 220                __field(        ulong,          eaddr           )
 221                __field(        u64,            vpage           )
 222                __field(        ulong,          raddr           )
 223                __field(        int,            flags           )
 224        ),
 225
 226        TP_fast_assign(
 227                __entry->host_va        = pte->host_va;
 228                __entry->pfn            = pte->pfn;
 229                __entry->eaddr          = pte->pte.eaddr;
 230                __entry->vpage          = pte->pte.vpage;
 231                __entry->raddr          = pte->pte.raddr;
 232                __entry->flags          = (pte->pte.may_read ? 0x4 : 0) |
 233                                          (pte->pte.may_write ? 0x2 : 0) |
 234                                          (pte->pte.may_execute ? 0x1 : 0);
 235        ),
 236
 237        TP_printk("Flush: hva=%llx pfn=%llx ea=%lx vp=%llx ra=%lx [%x]",
 238                  __entry->host_va, __entry->pfn, __entry->eaddr,
 239                  __entry->vpage, __entry->raddr, __entry->flags)
 240);
 241
 242TRACE_EVENT(kvm_book3s_mmu_flush,
 243        TP_PROTO(const char *type, struct kvm_vcpu *vcpu, unsigned long long p1,
 244                 unsigned long long p2),
 245        TP_ARGS(type, vcpu, p1, p2),
 246
 247        TP_STRUCT__entry(
 248                __field(        int,                    count           )
 249                __field(        unsigned long long,     p1              )
 250                __field(        unsigned long long,     p2              )
 251                __field(        const char *,           type            )
 252        ),
 253
 254        TP_fast_assign(
 255                __entry->count          = to_book3s(vcpu)->hpte_cache_count;
 256                __entry->p1             = p1;
 257                __entry->p2             = p2;
 258                __entry->type           = type;
 259        ),
 260
 261        TP_printk("Flush %d %sPTEs: %llx - %llx",
 262                  __entry->count, __entry->type, __entry->p1, __entry->p2)
 263);
 264
 265TRACE_EVENT(kvm_book3s_slb_found,
 266        TP_PROTO(unsigned long long gvsid, unsigned long long hvsid),
 267        TP_ARGS(gvsid, hvsid),
 268
 269        TP_STRUCT__entry(
 270                __field(        unsigned long long,     gvsid           )
 271                __field(        unsigned long long,     hvsid           )
 272        ),
 273
 274        TP_fast_assign(
 275                __entry->gvsid          = gvsid;
 276                __entry->hvsid          = hvsid;
 277        ),
 278
 279        TP_printk("%llx -> %llx", __entry->gvsid, __entry->hvsid)
 280);
 281
 282TRACE_EVENT(kvm_book3s_slb_fail,
 283        TP_PROTO(u16 sid_map_mask, unsigned long long gvsid),
 284        TP_ARGS(sid_map_mask, gvsid),
 285
 286        TP_STRUCT__entry(
 287                __field(        unsigned short,         sid_map_mask    )
 288                __field(        unsigned long long,     gvsid           )
 289        ),
 290
 291        TP_fast_assign(
 292                __entry->sid_map_mask   = sid_map_mask;
 293                __entry->gvsid          = gvsid;
 294        ),
 295
 296        TP_printk("%x/%x: %llx", __entry->sid_map_mask,
 297                  SID_MAP_MASK - __entry->sid_map_mask, __entry->gvsid)
 298);
 299
 300TRACE_EVENT(kvm_book3s_slb_map,
 301        TP_PROTO(u16 sid_map_mask, unsigned long long gvsid,
 302                 unsigned long long hvsid),
 303        TP_ARGS(sid_map_mask, gvsid, hvsid),
 304
 305        TP_STRUCT__entry(
 306                __field(        unsigned short,         sid_map_mask    )
 307                __field(        unsigned long long,     guest_vsid      )
 308                __field(        unsigned long long,     host_vsid       )
 309        ),
 310
 311        TP_fast_assign(
 312                __entry->sid_map_mask   = sid_map_mask;
 313                __entry->guest_vsid     = gvsid;
 314                __entry->host_vsid      = hvsid;
 315        ),
 316
 317        TP_printk("%x: %llx -> %llx", __entry->sid_map_mask,
 318                  __entry->guest_vsid, __entry->host_vsid)
 319);
 320
 321TRACE_EVENT(kvm_book3s_slbmte,
 322        TP_PROTO(u64 slb_vsid, u64 slb_esid),
 323        TP_ARGS(slb_vsid, slb_esid),
 324
 325        TP_STRUCT__entry(
 326                __field(        u64,    slb_vsid        )
 327                __field(        u64,    slb_esid        )
 328        ),
 329
 330        TP_fast_assign(
 331                __entry->slb_vsid       = slb_vsid;
 332                __entry->slb_esid       = slb_esid;
 333        ),
 334
 335        TP_printk("%llx, %llx", __entry->slb_vsid, __entry->slb_esid)
 336);
 337
 338#endif /* CONFIG_PPC_BOOK3S */
 339
 340#endif /* _TRACE_KVM_H */
 341
 342/* This part must be outside protection */
 343#include <trace/define_trace.h>
 344