brintos

brintos / linux-shallow public Read only

0
0
Text · 13.9 KiB · 0577f0c Raw
460 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#undef TRACE_SYSTEM3#define TRACE_SYSTEM xen4 5#if !defined(_TRACE_XEN_H) || defined(TRACE_HEADER_MULTI_READ)6#define _TRACE_XEN_H7 8#include <linux/tracepoint.h>9#include <asm/xen/hypervisor.h>10#include <asm/xen/trace_types.h>11 12struct multicall_entry;13 14/* Multicalls */15DECLARE_EVENT_CLASS(xen_mc__batch,16	    TP_PROTO(enum xen_lazy_mode mode),17	    TP_ARGS(mode),18	    TP_STRUCT__entry(19		    __field(enum xen_lazy_mode, mode)20		    ),21	    TP_fast_assign(__entry->mode = mode),22	    TP_printk("start batch LAZY_%s",23		      (__entry->mode == XEN_LAZY_MMU) ? "MMU" :24		      (__entry->mode == XEN_LAZY_CPU) ? "CPU" : "NONE")25	);26#define DEFINE_XEN_MC_BATCH(name)			\27	DEFINE_EVENT(xen_mc__batch, name,		\28		TP_PROTO(enum xen_lazy_mode mode),	\29		     TP_ARGS(mode))30 31DEFINE_XEN_MC_BATCH(xen_mc_batch);32DEFINE_XEN_MC_BATCH(xen_mc_issue);33 34TRACE_DEFINE_SIZEOF(ulong);35 36TRACE_EVENT(xen_mc_entry,37	    TP_PROTO(struct multicall_entry *mc, unsigned nargs),38	    TP_ARGS(mc, nargs),39	    TP_STRUCT__entry(40		    __field(unsigned int, op)41		    __field(unsigned int, nargs)42		    __array(unsigned long, args, 6)43		    ),44	    TP_fast_assign(__entry->op = mc->op;45			   __entry->nargs = nargs;46			   memcpy(__entry->args, mc->args, sizeof(ulong) * nargs);47			   memset(__entry->args + nargs, 0, sizeof(ulong) * (6 - nargs));48		    ),49	    TP_printk("op %u%s args [%lx, %lx, %lx, %lx, %lx, %lx]",50		      __entry->op, xen_hypercall_name(__entry->op),51		      __entry->args[0], __entry->args[1], __entry->args[2],52		      __entry->args[3], __entry->args[4], __entry->args[5])53	);54 55TRACE_EVENT(xen_mc_entry_alloc,56	    TP_PROTO(size_t args),57	    TP_ARGS(args),58	    TP_STRUCT__entry(59		    __field(size_t, args)60		    ),61	    TP_fast_assign(__entry->args = args),62	    TP_printk("alloc entry %zu arg bytes", __entry->args)63	);64 65TRACE_EVENT(xen_mc_callback,66	    TP_PROTO(xen_mc_callback_fn_t fn, void *data),67	    TP_ARGS(fn, data),68	    TP_STRUCT__entry(69		    /*70		     * Use field_struct to avoid is_signed_type()71		     * comparison of a function pointer.72		     */73		    __field_struct(xen_mc_callback_fn_t, fn)74		    __field(void *, data)75		    ),76	    TP_fast_assign(77		    __entry->fn = fn;78		    __entry->data = data;79		    ),80	    TP_printk("callback %ps, data %p",81		      __entry->fn, __entry->data)82	);83 84TRACE_EVENT(xen_mc_flush_reason,85	    TP_PROTO(enum xen_mc_flush_reason reason),86	    TP_ARGS(reason),87	    TP_STRUCT__entry(88		    __field(enum xen_mc_flush_reason, reason)89		    ),90	    TP_fast_assign(__entry->reason = reason),91	    TP_printk("flush reason %s",92		      (__entry->reason == XEN_MC_FL_NONE) ? "NONE" :93		      (__entry->reason == XEN_MC_FL_BATCH) ? "BATCH" :94		      (__entry->reason == XEN_MC_FL_ARGS) ? "ARGS" :95		      (__entry->reason == XEN_MC_FL_CALLBACK) ? "CALLBACK" : "??")96	);97 98TRACE_EVENT(xen_mc_flush,99	    TP_PROTO(unsigned mcidx, unsigned argidx, unsigned cbidx),100	    TP_ARGS(mcidx, argidx, cbidx),101	    TP_STRUCT__entry(102		    __field(unsigned, mcidx)103		    __field(unsigned, argidx)104		    __field(unsigned, cbidx)105		    ),106	    TP_fast_assign(__entry->mcidx = mcidx;107			   __entry->argidx = argidx;108			   __entry->cbidx = cbidx),109	    TP_printk("flushing %u hypercalls, %u arg bytes, %u callbacks",110		      __entry->mcidx, __entry->argidx, __entry->cbidx)111	);112 113TRACE_EVENT(xen_mc_extend_args,114	    TP_PROTO(unsigned long op, size_t args, enum xen_mc_extend_args res),115	    TP_ARGS(op, args, res),116	    TP_STRUCT__entry(117		    __field(unsigned int, op)118		    __field(size_t, args)119		    __field(enum xen_mc_extend_args, res)120		    ),121	    TP_fast_assign(__entry->op = op;122			   __entry->args = args;123			   __entry->res = res),124	    TP_printk("extending op %u%s by %zu bytes res %s",125		      __entry->op, xen_hypercall_name(__entry->op),126		      __entry->args,127		      __entry->res == XEN_MC_XE_OK ? "OK" :128		      __entry->res == XEN_MC_XE_BAD_OP ? "BAD_OP" :129		      __entry->res == XEN_MC_XE_NO_SPACE ? "NO_SPACE" : "???")130	);131 132TRACE_DEFINE_SIZEOF(pteval_t);133/* mmu */134DECLARE_EVENT_CLASS(xen_mmu__set_pte,135	    TP_PROTO(pte_t *ptep, pte_t pteval),136	    TP_ARGS(ptep, pteval),137	    TP_STRUCT__entry(138		    __field(pte_t *, ptep)139		    __field(pteval_t, pteval)140		    ),141	    TP_fast_assign(__entry->ptep = ptep;142			   __entry->pteval = pteval.pte),143	    TP_printk("ptep %p pteval %0*llx (raw %0*llx)",144		      __entry->ptep,145		      (int)sizeof(pteval_t) * 2, (unsigned long long)pte_val(native_make_pte(__entry->pteval)),146		      (int)sizeof(pteval_t) * 2, (unsigned long long)__entry->pteval)147	);148 149#define DEFINE_XEN_MMU_SET_PTE(name)				\150	DEFINE_EVENT(xen_mmu__set_pte, name,			\151		     TP_PROTO(pte_t *ptep, pte_t pteval),	\152		     TP_ARGS(ptep, pteval))153 154DEFINE_XEN_MMU_SET_PTE(xen_mmu_set_pte);155 156TRACE_DEFINE_SIZEOF(pmdval_t);157 158TRACE_EVENT(xen_mmu_set_pmd,159	    TP_PROTO(pmd_t *pmdp, pmd_t pmdval),160	    TP_ARGS(pmdp, pmdval),161	    TP_STRUCT__entry(162		    __field(pmd_t *, pmdp)163		    __field(pmdval_t, pmdval)164		    ),165	    TP_fast_assign(__entry->pmdp = pmdp;166			   __entry->pmdval = pmdval.pmd),167	    TP_printk("pmdp %p pmdval %0*llx (raw %0*llx)",168		      __entry->pmdp,169		      (int)sizeof(pmdval_t) * 2, (unsigned long long)pmd_val(native_make_pmd(__entry->pmdval)),170		      (int)sizeof(pmdval_t) * 2, (unsigned long long)__entry->pmdval)171	);172 173#ifdef CONFIG_X86_PAE174DEFINE_XEN_MMU_SET_PTE(xen_mmu_set_pte_atomic);175 176TRACE_EVENT(xen_mmu_pte_clear,177	    TP_PROTO(struct mm_struct *mm, unsigned long addr, pte_t *ptep),178	    TP_ARGS(mm, addr, ptep),179	    TP_STRUCT__entry(180		    __field(struct mm_struct *, mm)181		    __field(unsigned long, addr)182		    __field(pte_t *, ptep)183		    ),184	    TP_fast_assign(__entry->mm = mm;185			   __entry->addr = addr;186			   __entry->ptep = ptep),187	    TP_printk("mm %p addr %lx ptep %p",188		      __entry->mm, __entry->addr, __entry->ptep)189	);190 191TRACE_EVENT(xen_mmu_pmd_clear,192	    TP_PROTO(pmd_t *pmdp),193	    TP_ARGS(pmdp),194	    TP_STRUCT__entry(195		    __field(pmd_t *, pmdp)196		    ),197	    TP_fast_assign(__entry->pmdp = pmdp),198	    TP_printk("pmdp %p", __entry->pmdp)199	);200#endif201 202#if CONFIG_PGTABLE_LEVELS >= 4203 204TRACE_DEFINE_SIZEOF(pudval_t);205 206TRACE_EVENT(xen_mmu_set_pud,207	    TP_PROTO(pud_t *pudp, pud_t pudval),208	    TP_ARGS(pudp, pudval),209	    TP_STRUCT__entry(210		    __field(pud_t *, pudp)211		    __field(pudval_t, pudval)212		    ),213	    TP_fast_assign(__entry->pudp = pudp;214			   __entry->pudval = native_pud_val(pudval)),215	    TP_printk("pudp %p pudval %0*llx (raw %0*llx)",216		      __entry->pudp,217		      (int)sizeof(pudval_t) * 2, (unsigned long long)pud_val(native_make_pud(__entry->pudval)),218		      (int)sizeof(pudval_t) * 2, (unsigned long long)__entry->pudval)219	);220 221TRACE_DEFINE_SIZEOF(p4dval_t);222 223TRACE_EVENT(xen_mmu_set_p4d,224	    TP_PROTO(p4d_t *p4dp, p4d_t *user_p4dp, p4d_t p4dval),225	    TP_ARGS(p4dp, user_p4dp, p4dval),226	    TP_STRUCT__entry(227		    __field(p4d_t *, p4dp)228		    __field(p4d_t *, user_p4dp)229		    __field(p4dval_t, p4dval)230		    ),231	    TP_fast_assign(__entry->p4dp = p4dp;232			   __entry->user_p4dp = user_p4dp;233			   __entry->p4dval = p4d_val(p4dval)),234	    TP_printk("p4dp %p user_p4dp %p p4dval %0*llx (raw %0*llx)",235		      __entry->p4dp, __entry->user_p4dp,236		      (int)sizeof(p4dval_t) * 2, (unsigned long long)pgd_val(native_make_pgd(__entry->p4dval)),237		      (int)sizeof(p4dval_t) * 2, (unsigned long long)__entry->p4dval)238	);239#else240 241TRACE_EVENT(xen_mmu_set_pud,242	    TP_PROTO(pud_t *pudp, pud_t pudval),243	    TP_ARGS(pudp, pudval),244	    TP_STRUCT__entry(245		    __field(pud_t *, pudp)246		    __field(pudval_t, pudval)247		    ),248	    TP_fast_assign(__entry->pudp = pudp;249			   __entry->pudval = native_pud_val(pudval)),250	    TP_printk("pudp %p pudval %0*llx (raw %0*llx)",251		      __entry->pudp,252		      (int)sizeof(pudval_t) * 2, (unsigned long long)pgd_val(native_make_pgd(__entry->pudval)),253		      (int)sizeof(pudval_t) * 2, (unsigned long long)__entry->pudval)254	);255 256#endif257 258DECLARE_EVENT_CLASS(xen_mmu_ptep_modify_prot,259	    TP_PROTO(struct mm_struct *mm, unsigned long addr,260		     pte_t *ptep, pte_t pteval),261	    TP_ARGS(mm, addr, ptep, pteval),262	    TP_STRUCT__entry(263		    __field(struct mm_struct *, mm)264		    __field(unsigned long, addr)265		    __field(pte_t *, ptep)266		    __field(pteval_t, pteval)267		    ),268	    TP_fast_assign(__entry->mm = mm;269			   __entry->addr = addr;270			   __entry->ptep = ptep;271			   __entry->pteval = pteval.pte),272	    TP_printk("mm %p addr %lx ptep %p pteval %0*llx (raw %0*llx)",273		      __entry->mm, __entry->addr, __entry->ptep,274		      (int)sizeof(pteval_t) * 2, (unsigned long long)pte_val(native_make_pte(__entry->pteval)),275		      (int)sizeof(pteval_t) * 2, (unsigned long long)__entry->pteval)276	);277#define DEFINE_XEN_MMU_PTEP_MODIFY_PROT(name)				\278	DEFINE_EVENT(xen_mmu_ptep_modify_prot, name,			\279		     TP_PROTO(struct mm_struct *mm, unsigned long addr,	\280			      pte_t *ptep, pte_t pteval),		\281		     TP_ARGS(mm, addr, ptep, pteval))282 283DEFINE_XEN_MMU_PTEP_MODIFY_PROT(xen_mmu_ptep_modify_prot_start);284DEFINE_XEN_MMU_PTEP_MODIFY_PROT(xen_mmu_ptep_modify_prot_commit);285 286TRACE_EVENT(xen_mmu_alloc_ptpage,287	    TP_PROTO(struct mm_struct *mm, unsigned long pfn, unsigned level, bool pinned),288	    TP_ARGS(mm, pfn, level, pinned),289	    TP_STRUCT__entry(290		    __field(struct mm_struct *, mm)291		    __field(unsigned long, pfn)292		    __field(unsigned, level)293		    __field(bool, pinned)294		    ),295	    TP_fast_assign(__entry->mm = mm;296			   __entry->pfn = pfn;297			   __entry->level = level;298			   __entry->pinned = pinned),299	    TP_printk("mm %p  pfn %lx  level %d  %spinned",300		      __entry->mm, __entry->pfn, __entry->level,301		      __entry->pinned ? "" : "un")302	);303 304TRACE_EVENT(xen_mmu_release_ptpage,305	    TP_PROTO(unsigned long pfn, unsigned level, bool pinned),306	    TP_ARGS(pfn, level, pinned),307	    TP_STRUCT__entry(308		    __field(unsigned long, pfn)309		    __field(unsigned, level)310		    __field(bool, pinned)311		    ),312	    TP_fast_assign(__entry->pfn = pfn;313			   __entry->level = level;314			   __entry->pinned = pinned),315	    TP_printk("pfn %lx  level %d  %spinned",316		      __entry->pfn, __entry->level,317		      __entry->pinned ? "" : "un")318	);319 320DECLARE_EVENT_CLASS(xen_mmu_pgd,321	    TP_PROTO(struct mm_struct *mm, pgd_t *pgd),322	    TP_ARGS(mm, pgd),323	    TP_STRUCT__entry(324		    __field(struct mm_struct *, mm)325		    __field(pgd_t *, pgd)326		    ),327	    TP_fast_assign(__entry->mm = mm;328			   __entry->pgd = pgd),329	    TP_printk("mm %p pgd %p", __entry->mm, __entry->pgd)330	);331#define DEFINE_XEN_MMU_PGD_EVENT(name)				\332	DEFINE_EVENT(xen_mmu_pgd, name,				\333		TP_PROTO(struct mm_struct *mm, pgd_t *pgd),	\334		     TP_ARGS(mm, pgd))335 336DEFINE_XEN_MMU_PGD_EVENT(xen_mmu_pgd_pin);337DEFINE_XEN_MMU_PGD_EVENT(xen_mmu_pgd_unpin);338 339TRACE_EVENT(xen_mmu_flush_tlb_one_user,340	    TP_PROTO(unsigned long addr),341	    TP_ARGS(addr),342	    TP_STRUCT__entry(343		    __field(unsigned long, addr)344		    ),345	    TP_fast_assign(__entry->addr = addr),346	    TP_printk("addr %lx", __entry->addr)347	);348 349TRACE_EVENT(xen_mmu_flush_tlb_multi,350	    TP_PROTO(const struct cpumask *cpus, struct mm_struct *mm,351		     unsigned long addr, unsigned long end),352	    TP_ARGS(cpus, mm, addr, end),353	    TP_STRUCT__entry(354		    __field(unsigned, ncpus)355		    __field(struct mm_struct *, mm)356		    __field(unsigned long, addr)357		    __field(unsigned long, end)358		    ),359	    TP_fast_assign(__entry->ncpus = cpumask_weight(cpus);360			   __entry->mm = mm;361			   __entry->addr = addr,362			   __entry->end = end),363	    TP_printk("ncpus %d mm %p addr %lx, end %lx",364		      __entry->ncpus, __entry->mm, __entry->addr, __entry->end)365	);366 367TRACE_EVENT(xen_mmu_write_cr3,368	    TP_PROTO(bool kernel, unsigned long cr3),369	    TP_ARGS(kernel, cr3),370	    TP_STRUCT__entry(371		    __field(bool, kernel)372		    __field(unsigned long, cr3)373		    ),374	    TP_fast_assign(__entry->kernel = kernel;375			   __entry->cr3 = cr3),376	    TP_printk("%s cr3 %lx",377		      __entry->kernel ? "kernel" : "user", __entry->cr3)378	);379 380 381/* CPU */382TRACE_EVENT(xen_cpu_write_ldt_entry,383	    TP_PROTO(struct desc_struct *dt, int entrynum, u64 desc),384	    TP_ARGS(dt, entrynum, desc),385	    TP_STRUCT__entry(386		    __field(struct desc_struct *, dt)387		    __field(int, entrynum)388		    __field(u64, desc)389		    ),390	    TP_fast_assign(__entry->dt = dt;391			   __entry->entrynum = entrynum;392			   __entry->desc = desc;393		    ),394	    TP_printk("dt %p  entrynum %d  entry %016llx",395		      __entry->dt, __entry->entrynum,396		      (unsigned long long)__entry->desc)397	);398 399TRACE_EVENT(xen_cpu_write_idt_entry,400	    TP_PROTO(gate_desc *dt, int entrynum, const gate_desc *ent),401	    TP_ARGS(dt, entrynum, ent),402	    TP_STRUCT__entry(403		    __field(gate_desc *, dt)404		    __field(int, entrynum)405		    ),406	    TP_fast_assign(__entry->dt = dt;407			   __entry->entrynum = entrynum;408		    ),409	    TP_printk("dt %p  entrynum %d",410		      __entry->dt, __entry->entrynum)411	);412 413TRACE_EVENT(xen_cpu_load_idt,414	    TP_PROTO(const struct desc_ptr *desc),415	    TP_ARGS(desc),416	    TP_STRUCT__entry(417		    __field(unsigned long, addr)418		    ),419	    TP_fast_assign(__entry->addr = desc->address),420	    TP_printk("addr %lx", __entry->addr)421	);422 423TRACE_EVENT(xen_cpu_write_gdt_entry,424	    TP_PROTO(struct desc_struct *dt, int entrynum, const void *desc, int type),425	    TP_ARGS(dt, entrynum, desc, type),426	    TP_STRUCT__entry(427		    __field(u64, desc)428		    __field(struct desc_struct *, dt)429		    __field(int, entrynum)430		    __field(int, type)431		    ),432	    TP_fast_assign(__entry->dt = dt;433			   __entry->entrynum = entrynum;434			   __entry->desc = *(u64 *)desc;435			   __entry->type = type;436		    ),437	    TP_printk("dt %p  entrynum %d  type %d  desc %016llx",438		      __entry->dt, __entry->entrynum, __entry->type,439		      (unsigned long long)__entry->desc)440	);441 442TRACE_EVENT(xen_cpu_set_ldt,443	    TP_PROTO(const void *addr, unsigned entries),444	    TP_ARGS(addr, entries),445	    TP_STRUCT__entry(446		    __field(const void *, addr)447		    __field(unsigned, entries)448		    ),449	    TP_fast_assign(__entry->addr = addr;450			   __entry->entries = entries),451	    TP_printk("addr %p  entries %u",452		      __entry->addr, __entry->entries)453	);454 455 456#endif /*  _TRACE_XEN_H */457 458/* This part must be outside protection */459#include <trace/define_trace.h>460