18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#undef TRACE_SYSTEM 38c2ecf20Sopenharmony_ci#define TRACE_SYSTEM xen 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#if !defined(_TRACE_XEN_H) || defined(TRACE_HEADER_MULTI_READ) 68c2ecf20Sopenharmony_ci#define _TRACE_XEN_H 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <linux/tracepoint.h> 98c2ecf20Sopenharmony_ci#include <asm/paravirt_types.h> 108c2ecf20Sopenharmony_ci#include <asm/xen/trace_types.h> 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_cistruct multicall_entry; 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci/* Multicalls */ 158c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(xen_mc__batch, 168c2ecf20Sopenharmony_ci TP_PROTO(enum paravirt_lazy_mode mode), 178c2ecf20Sopenharmony_ci TP_ARGS(mode), 188c2ecf20Sopenharmony_ci TP_STRUCT__entry( 198c2ecf20Sopenharmony_ci __field(enum paravirt_lazy_mode, mode) 208c2ecf20Sopenharmony_ci ), 218c2ecf20Sopenharmony_ci TP_fast_assign(__entry->mode = mode), 228c2ecf20Sopenharmony_ci TP_printk("start batch LAZY_%s", 238c2ecf20Sopenharmony_ci (__entry->mode == PARAVIRT_LAZY_MMU) ? "MMU" : 248c2ecf20Sopenharmony_ci (__entry->mode == PARAVIRT_LAZY_CPU) ? "CPU" : "NONE") 258c2ecf20Sopenharmony_ci ); 268c2ecf20Sopenharmony_ci#define DEFINE_XEN_MC_BATCH(name) \ 278c2ecf20Sopenharmony_ci DEFINE_EVENT(xen_mc__batch, name, \ 288c2ecf20Sopenharmony_ci TP_PROTO(enum paravirt_lazy_mode mode), \ 298c2ecf20Sopenharmony_ci TP_ARGS(mode)) 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ciDEFINE_XEN_MC_BATCH(xen_mc_batch); 328c2ecf20Sopenharmony_ciDEFINE_XEN_MC_BATCH(xen_mc_issue); 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ciTRACE_DEFINE_SIZEOF(ulong); 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mc_entry, 378c2ecf20Sopenharmony_ci TP_PROTO(struct multicall_entry *mc, unsigned nargs), 388c2ecf20Sopenharmony_ci TP_ARGS(mc, nargs), 398c2ecf20Sopenharmony_ci TP_STRUCT__entry( 408c2ecf20Sopenharmony_ci __field(unsigned int, op) 418c2ecf20Sopenharmony_ci __field(unsigned int, nargs) 428c2ecf20Sopenharmony_ci __array(unsigned long, args, 6) 438c2ecf20Sopenharmony_ci ), 448c2ecf20Sopenharmony_ci TP_fast_assign(__entry->op = mc->op; 458c2ecf20Sopenharmony_ci __entry->nargs = nargs; 468c2ecf20Sopenharmony_ci memcpy(__entry->args, mc->args, sizeof(ulong) * nargs); 478c2ecf20Sopenharmony_ci memset(__entry->args + nargs, 0, sizeof(ulong) * (6 - nargs)); 488c2ecf20Sopenharmony_ci ), 498c2ecf20Sopenharmony_ci TP_printk("op %u%s args [%lx, %lx, %lx, %lx, %lx, %lx]", 508c2ecf20Sopenharmony_ci __entry->op, xen_hypercall_name(__entry->op), 518c2ecf20Sopenharmony_ci __entry->args[0], __entry->args[1], __entry->args[2], 528c2ecf20Sopenharmony_ci __entry->args[3], __entry->args[4], __entry->args[5]) 538c2ecf20Sopenharmony_ci ); 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mc_entry_alloc, 568c2ecf20Sopenharmony_ci TP_PROTO(size_t args), 578c2ecf20Sopenharmony_ci TP_ARGS(args), 588c2ecf20Sopenharmony_ci TP_STRUCT__entry( 598c2ecf20Sopenharmony_ci __field(size_t, args) 608c2ecf20Sopenharmony_ci ), 618c2ecf20Sopenharmony_ci TP_fast_assign(__entry->args = args), 628c2ecf20Sopenharmony_ci TP_printk("alloc entry %zu arg bytes", __entry->args) 638c2ecf20Sopenharmony_ci ); 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mc_callback, 668c2ecf20Sopenharmony_ci TP_PROTO(xen_mc_callback_fn_t fn, void *data), 678c2ecf20Sopenharmony_ci TP_ARGS(fn, data), 688c2ecf20Sopenharmony_ci TP_STRUCT__entry( 698c2ecf20Sopenharmony_ci /* 708c2ecf20Sopenharmony_ci * Use field_struct to avoid is_signed_type() 718c2ecf20Sopenharmony_ci * comparison of a function pointer. 728c2ecf20Sopenharmony_ci */ 738c2ecf20Sopenharmony_ci __field_struct(xen_mc_callback_fn_t, fn) 748c2ecf20Sopenharmony_ci __field(void *, data) 758c2ecf20Sopenharmony_ci ), 768c2ecf20Sopenharmony_ci TP_fast_assign( 778c2ecf20Sopenharmony_ci __entry->fn = fn; 788c2ecf20Sopenharmony_ci __entry->data = data; 798c2ecf20Sopenharmony_ci ), 808c2ecf20Sopenharmony_ci TP_printk("callback %ps, data %p", 818c2ecf20Sopenharmony_ci __entry->fn, __entry->data) 828c2ecf20Sopenharmony_ci ); 838c2ecf20Sopenharmony_ci 848c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mc_flush_reason, 858c2ecf20Sopenharmony_ci TP_PROTO(enum xen_mc_flush_reason reason), 868c2ecf20Sopenharmony_ci TP_ARGS(reason), 878c2ecf20Sopenharmony_ci TP_STRUCT__entry( 888c2ecf20Sopenharmony_ci __field(enum xen_mc_flush_reason, reason) 898c2ecf20Sopenharmony_ci ), 908c2ecf20Sopenharmony_ci TP_fast_assign(__entry->reason = reason), 918c2ecf20Sopenharmony_ci TP_printk("flush reason %s", 928c2ecf20Sopenharmony_ci (__entry->reason == XEN_MC_FL_NONE) ? "NONE" : 938c2ecf20Sopenharmony_ci (__entry->reason == XEN_MC_FL_BATCH) ? "BATCH" : 948c2ecf20Sopenharmony_ci (__entry->reason == XEN_MC_FL_ARGS) ? "ARGS" : 958c2ecf20Sopenharmony_ci (__entry->reason == XEN_MC_FL_CALLBACK) ? "CALLBACK" : "??") 968c2ecf20Sopenharmony_ci ); 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mc_flush, 998c2ecf20Sopenharmony_ci TP_PROTO(unsigned mcidx, unsigned argidx, unsigned cbidx), 1008c2ecf20Sopenharmony_ci TP_ARGS(mcidx, argidx, cbidx), 1018c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1028c2ecf20Sopenharmony_ci __field(unsigned, mcidx) 1038c2ecf20Sopenharmony_ci __field(unsigned, argidx) 1048c2ecf20Sopenharmony_ci __field(unsigned, cbidx) 1058c2ecf20Sopenharmony_ci ), 1068c2ecf20Sopenharmony_ci TP_fast_assign(__entry->mcidx = mcidx; 1078c2ecf20Sopenharmony_ci __entry->argidx = argidx; 1088c2ecf20Sopenharmony_ci __entry->cbidx = cbidx), 1098c2ecf20Sopenharmony_ci TP_printk("flushing %u hypercalls, %u arg bytes, %u callbacks", 1108c2ecf20Sopenharmony_ci __entry->mcidx, __entry->argidx, __entry->cbidx) 1118c2ecf20Sopenharmony_ci ); 1128c2ecf20Sopenharmony_ci 1138c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mc_extend_args, 1148c2ecf20Sopenharmony_ci TP_PROTO(unsigned long op, size_t args, enum xen_mc_extend_args res), 1158c2ecf20Sopenharmony_ci TP_ARGS(op, args, res), 1168c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1178c2ecf20Sopenharmony_ci __field(unsigned int, op) 1188c2ecf20Sopenharmony_ci __field(size_t, args) 1198c2ecf20Sopenharmony_ci __field(enum xen_mc_extend_args, res) 1208c2ecf20Sopenharmony_ci ), 1218c2ecf20Sopenharmony_ci TP_fast_assign(__entry->op = op; 1228c2ecf20Sopenharmony_ci __entry->args = args; 1238c2ecf20Sopenharmony_ci __entry->res = res), 1248c2ecf20Sopenharmony_ci TP_printk("extending op %u%s by %zu bytes res %s", 1258c2ecf20Sopenharmony_ci __entry->op, xen_hypercall_name(__entry->op), 1268c2ecf20Sopenharmony_ci __entry->args, 1278c2ecf20Sopenharmony_ci __entry->res == XEN_MC_XE_OK ? "OK" : 1288c2ecf20Sopenharmony_ci __entry->res == XEN_MC_XE_BAD_OP ? "BAD_OP" : 1298c2ecf20Sopenharmony_ci __entry->res == XEN_MC_XE_NO_SPACE ? "NO_SPACE" : "???") 1308c2ecf20Sopenharmony_ci ); 1318c2ecf20Sopenharmony_ci 1328c2ecf20Sopenharmony_ciTRACE_DEFINE_SIZEOF(pteval_t); 1338c2ecf20Sopenharmony_ci/* mmu */ 1348c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(xen_mmu__set_pte, 1358c2ecf20Sopenharmony_ci TP_PROTO(pte_t *ptep, pte_t pteval), 1368c2ecf20Sopenharmony_ci TP_ARGS(ptep, pteval), 1378c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1388c2ecf20Sopenharmony_ci __field(pte_t *, ptep) 1398c2ecf20Sopenharmony_ci __field(pteval_t, pteval) 1408c2ecf20Sopenharmony_ci ), 1418c2ecf20Sopenharmony_ci TP_fast_assign(__entry->ptep = ptep; 1428c2ecf20Sopenharmony_ci __entry->pteval = pteval.pte), 1438c2ecf20Sopenharmony_ci TP_printk("ptep %p pteval %0*llx (raw %0*llx)", 1448c2ecf20Sopenharmony_ci __entry->ptep, 1458c2ecf20Sopenharmony_ci (int)sizeof(pteval_t) * 2, (unsigned long long)pte_val(native_make_pte(__entry->pteval)), 1468c2ecf20Sopenharmony_ci (int)sizeof(pteval_t) * 2, (unsigned long long)__entry->pteval) 1478c2ecf20Sopenharmony_ci ); 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_ci#define DEFINE_XEN_MMU_SET_PTE(name) \ 1508c2ecf20Sopenharmony_ci DEFINE_EVENT(xen_mmu__set_pte, name, \ 1518c2ecf20Sopenharmony_ci TP_PROTO(pte_t *ptep, pte_t pteval), \ 1528c2ecf20Sopenharmony_ci TP_ARGS(ptep, pteval)) 1538c2ecf20Sopenharmony_ci 1548c2ecf20Sopenharmony_ciDEFINE_XEN_MMU_SET_PTE(xen_mmu_set_pte); 1558c2ecf20Sopenharmony_ci 1568c2ecf20Sopenharmony_ciTRACE_DEFINE_SIZEOF(pmdval_t); 1578c2ecf20Sopenharmony_ci 1588c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mmu_set_pmd, 1598c2ecf20Sopenharmony_ci TP_PROTO(pmd_t *pmdp, pmd_t pmdval), 1608c2ecf20Sopenharmony_ci TP_ARGS(pmdp, pmdval), 1618c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1628c2ecf20Sopenharmony_ci __field(pmd_t *, pmdp) 1638c2ecf20Sopenharmony_ci __field(pmdval_t, pmdval) 1648c2ecf20Sopenharmony_ci ), 1658c2ecf20Sopenharmony_ci TP_fast_assign(__entry->pmdp = pmdp; 1668c2ecf20Sopenharmony_ci __entry->pmdval = pmdval.pmd), 1678c2ecf20Sopenharmony_ci TP_printk("pmdp %p pmdval %0*llx (raw %0*llx)", 1688c2ecf20Sopenharmony_ci __entry->pmdp, 1698c2ecf20Sopenharmony_ci (int)sizeof(pmdval_t) * 2, (unsigned long long)pmd_val(native_make_pmd(__entry->pmdval)), 1708c2ecf20Sopenharmony_ci (int)sizeof(pmdval_t) * 2, (unsigned long long)__entry->pmdval) 1718c2ecf20Sopenharmony_ci ); 1728c2ecf20Sopenharmony_ci 1738c2ecf20Sopenharmony_ci#ifdef CONFIG_X86_PAE 1748c2ecf20Sopenharmony_ciDEFINE_XEN_MMU_SET_PTE(xen_mmu_set_pte_atomic); 1758c2ecf20Sopenharmony_ci 1768c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mmu_pte_clear, 1778c2ecf20Sopenharmony_ci TP_PROTO(struct mm_struct *mm, unsigned long addr, pte_t *ptep), 1788c2ecf20Sopenharmony_ci TP_ARGS(mm, addr, ptep), 1798c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1808c2ecf20Sopenharmony_ci __field(struct mm_struct *, mm) 1818c2ecf20Sopenharmony_ci __field(unsigned long, addr) 1828c2ecf20Sopenharmony_ci __field(pte_t *, ptep) 1838c2ecf20Sopenharmony_ci ), 1848c2ecf20Sopenharmony_ci TP_fast_assign(__entry->mm = mm; 1858c2ecf20Sopenharmony_ci __entry->addr = addr; 1868c2ecf20Sopenharmony_ci __entry->ptep = ptep), 1878c2ecf20Sopenharmony_ci TP_printk("mm %p addr %lx ptep %p", 1888c2ecf20Sopenharmony_ci __entry->mm, __entry->addr, __entry->ptep) 1898c2ecf20Sopenharmony_ci ); 1908c2ecf20Sopenharmony_ci 1918c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mmu_pmd_clear, 1928c2ecf20Sopenharmony_ci TP_PROTO(pmd_t *pmdp), 1938c2ecf20Sopenharmony_ci TP_ARGS(pmdp), 1948c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1958c2ecf20Sopenharmony_ci __field(pmd_t *, pmdp) 1968c2ecf20Sopenharmony_ci ), 1978c2ecf20Sopenharmony_ci TP_fast_assign(__entry->pmdp = pmdp), 1988c2ecf20Sopenharmony_ci TP_printk("pmdp %p", __entry->pmdp) 1998c2ecf20Sopenharmony_ci ); 2008c2ecf20Sopenharmony_ci#endif 2018c2ecf20Sopenharmony_ci 2028c2ecf20Sopenharmony_ci#if CONFIG_PGTABLE_LEVELS >= 4 2038c2ecf20Sopenharmony_ci 2048c2ecf20Sopenharmony_ciTRACE_DEFINE_SIZEOF(pudval_t); 2058c2ecf20Sopenharmony_ci 2068c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mmu_set_pud, 2078c2ecf20Sopenharmony_ci TP_PROTO(pud_t *pudp, pud_t pudval), 2088c2ecf20Sopenharmony_ci TP_ARGS(pudp, pudval), 2098c2ecf20Sopenharmony_ci TP_STRUCT__entry( 2108c2ecf20Sopenharmony_ci __field(pud_t *, pudp) 2118c2ecf20Sopenharmony_ci __field(pudval_t, pudval) 2128c2ecf20Sopenharmony_ci ), 2138c2ecf20Sopenharmony_ci TP_fast_assign(__entry->pudp = pudp; 2148c2ecf20Sopenharmony_ci __entry->pudval = native_pud_val(pudval)), 2158c2ecf20Sopenharmony_ci TP_printk("pudp %p pudval %0*llx (raw %0*llx)", 2168c2ecf20Sopenharmony_ci __entry->pudp, 2178c2ecf20Sopenharmony_ci (int)sizeof(pudval_t) * 2, (unsigned long long)pud_val(native_make_pud(__entry->pudval)), 2188c2ecf20Sopenharmony_ci (int)sizeof(pudval_t) * 2, (unsigned long long)__entry->pudval) 2198c2ecf20Sopenharmony_ci ); 2208c2ecf20Sopenharmony_ci 2218c2ecf20Sopenharmony_ciTRACE_DEFINE_SIZEOF(p4dval_t); 2228c2ecf20Sopenharmony_ci 2238c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mmu_set_p4d, 2248c2ecf20Sopenharmony_ci TP_PROTO(p4d_t *p4dp, p4d_t *user_p4dp, p4d_t p4dval), 2258c2ecf20Sopenharmony_ci TP_ARGS(p4dp, user_p4dp, p4dval), 2268c2ecf20Sopenharmony_ci TP_STRUCT__entry( 2278c2ecf20Sopenharmony_ci __field(p4d_t *, p4dp) 2288c2ecf20Sopenharmony_ci __field(p4d_t *, user_p4dp) 2298c2ecf20Sopenharmony_ci __field(p4dval_t, p4dval) 2308c2ecf20Sopenharmony_ci ), 2318c2ecf20Sopenharmony_ci TP_fast_assign(__entry->p4dp = p4dp; 2328c2ecf20Sopenharmony_ci __entry->user_p4dp = user_p4dp; 2338c2ecf20Sopenharmony_ci __entry->p4dval = p4d_val(p4dval)), 2348c2ecf20Sopenharmony_ci TP_printk("p4dp %p user_p4dp %p p4dval %0*llx (raw %0*llx)", 2358c2ecf20Sopenharmony_ci __entry->p4dp, __entry->user_p4dp, 2368c2ecf20Sopenharmony_ci (int)sizeof(p4dval_t) * 2, (unsigned long long)pgd_val(native_make_pgd(__entry->p4dval)), 2378c2ecf20Sopenharmony_ci (int)sizeof(p4dval_t) * 2, (unsigned long long)__entry->p4dval) 2388c2ecf20Sopenharmony_ci ); 2398c2ecf20Sopenharmony_ci#else 2408c2ecf20Sopenharmony_ci 2418c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mmu_set_pud, 2428c2ecf20Sopenharmony_ci TP_PROTO(pud_t *pudp, pud_t pudval), 2438c2ecf20Sopenharmony_ci TP_ARGS(pudp, pudval), 2448c2ecf20Sopenharmony_ci TP_STRUCT__entry( 2458c2ecf20Sopenharmony_ci __field(pud_t *, pudp) 2468c2ecf20Sopenharmony_ci __field(pudval_t, pudval) 2478c2ecf20Sopenharmony_ci ), 2488c2ecf20Sopenharmony_ci TP_fast_assign(__entry->pudp = pudp; 2498c2ecf20Sopenharmony_ci __entry->pudval = native_pud_val(pudval)), 2508c2ecf20Sopenharmony_ci TP_printk("pudp %p pudval %0*llx (raw %0*llx)", 2518c2ecf20Sopenharmony_ci __entry->pudp, 2528c2ecf20Sopenharmony_ci (int)sizeof(pudval_t) * 2, (unsigned long long)pgd_val(native_make_pgd(__entry->pudval)), 2538c2ecf20Sopenharmony_ci (int)sizeof(pudval_t) * 2, (unsigned long long)__entry->pudval) 2548c2ecf20Sopenharmony_ci ); 2558c2ecf20Sopenharmony_ci 2568c2ecf20Sopenharmony_ci#endif 2578c2ecf20Sopenharmony_ci 2588c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(xen_mmu_ptep_modify_prot, 2598c2ecf20Sopenharmony_ci TP_PROTO(struct mm_struct *mm, unsigned long addr, 2608c2ecf20Sopenharmony_ci pte_t *ptep, pte_t pteval), 2618c2ecf20Sopenharmony_ci TP_ARGS(mm, addr, ptep, pteval), 2628c2ecf20Sopenharmony_ci TP_STRUCT__entry( 2638c2ecf20Sopenharmony_ci __field(struct mm_struct *, mm) 2648c2ecf20Sopenharmony_ci __field(unsigned long, addr) 2658c2ecf20Sopenharmony_ci __field(pte_t *, ptep) 2668c2ecf20Sopenharmony_ci __field(pteval_t, pteval) 2678c2ecf20Sopenharmony_ci ), 2688c2ecf20Sopenharmony_ci TP_fast_assign(__entry->mm = mm; 2698c2ecf20Sopenharmony_ci __entry->addr = addr; 2708c2ecf20Sopenharmony_ci __entry->ptep = ptep; 2718c2ecf20Sopenharmony_ci __entry->pteval = pteval.pte), 2728c2ecf20Sopenharmony_ci TP_printk("mm %p addr %lx ptep %p pteval %0*llx (raw %0*llx)", 2738c2ecf20Sopenharmony_ci __entry->mm, __entry->addr, __entry->ptep, 2748c2ecf20Sopenharmony_ci (int)sizeof(pteval_t) * 2, (unsigned long long)pte_val(native_make_pte(__entry->pteval)), 2758c2ecf20Sopenharmony_ci (int)sizeof(pteval_t) * 2, (unsigned long long)__entry->pteval) 2768c2ecf20Sopenharmony_ci ); 2778c2ecf20Sopenharmony_ci#define DEFINE_XEN_MMU_PTEP_MODIFY_PROT(name) \ 2788c2ecf20Sopenharmony_ci DEFINE_EVENT(xen_mmu_ptep_modify_prot, name, \ 2798c2ecf20Sopenharmony_ci TP_PROTO(struct mm_struct *mm, unsigned long addr, \ 2808c2ecf20Sopenharmony_ci pte_t *ptep, pte_t pteval), \ 2818c2ecf20Sopenharmony_ci TP_ARGS(mm, addr, ptep, pteval)) 2828c2ecf20Sopenharmony_ci 2838c2ecf20Sopenharmony_ciDEFINE_XEN_MMU_PTEP_MODIFY_PROT(xen_mmu_ptep_modify_prot_start); 2848c2ecf20Sopenharmony_ciDEFINE_XEN_MMU_PTEP_MODIFY_PROT(xen_mmu_ptep_modify_prot_commit); 2858c2ecf20Sopenharmony_ci 2868c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mmu_alloc_ptpage, 2878c2ecf20Sopenharmony_ci TP_PROTO(struct mm_struct *mm, unsigned long pfn, unsigned level, bool pinned), 2888c2ecf20Sopenharmony_ci TP_ARGS(mm, pfn, level, pinned), 2898c2ecf20Sopenharmony_ci TP_STRUCT__entry( 2908c2ecf20Sopenharmony_ci __field(struct mm_struct *, mm) 2918c2ecf20Sopenharmony_ci __field(unsigned long, pfn) 2928c2ecf20Sopenharmony_ci __field(unsigned, level) 2938c2ecf20Sopenharmony_ci __field(bool, pinned) 2948c2ecf20Sopenharmony_ci ), 2958c2ecf20Sopenharmony_ci TP_fast_assign(__entry->mm = mm; 2968c2ecf20Sopenharmony_ci __entry->pfn = pfn; 2978c2ecf20Sopenharmony_ci __entry->level = level; 2988c2ecf20Sopenharmony_ci __entry->pinned = pinned), 2998c2ecf20Sopenharmony_ci TP_printk("mm %p pfn %lx level %d %spinned", 3008c2ecf20Sopenharmony_ci __entry->mm, __entry->pfn, __entry->level, 3018c2ecf20Sopenharmony_ci __entry->pinned ? "" : "un") 3028c2ecf20Sopenharmony_ci ); 3038c2ecf20Sopenharmony_ci 3048c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mmu_release_ptpage, 3058c2ecf20Sopenharmony_ci TP_PROTO(unsigned long pfn, unsigned level, bool pinned), 3068c2ecf20Sopenharmony_ci TP_ARGS(pfn, level, pinned), 3078c2ecf20Sopenharmony_ci TP_STRUCT__entry( 3088c2ecf20Sopenharmony_ci __field(unsigned long, pfn) 3098c2ecf20Sopenharmony_ci __field(unsigned, level) 3108c2ecf20Sopenharmony_ci __field(bool, pinned) 3118c2ecf20Sopenharmony_ci ), 3128c2ecf20Sopenharmony_ci TP_fast_assign(__entry->pfn = pfn; 3138c2ecf20Sopenharmony_ci __entry->level = level; 3148c2ecf20Sopenharmony_ci __entry->pinned = pinned), 3158c2ecf20Sopenharmony_ci TP_printk("pfn %lx level %d %spinned", 3168c2ecf20Sopenharmony_ci __entry->pfn, __entry->level, 3178c2ecf20Sopenharmony_ci __entry->pinned ? "" : "un") 3188c2ecf20Sopenharmony_ci ); 3198c2ecf20Sopenharmony_ci 3208c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(xen_mmu_pgd, 3218c2ecf20Sopenharmony_ci TP_PROTO(struct mm_struct *mm, pgd_t *pgd), 3228c2ecf20Sopenharmony_ci TP_ARGS(mm, pgd), 3238c2ecf20Sopenharmony_ci TP_STRUCT__entry( 3248c2ecf20Sopenharmony_ci __field(struct mm_struct *, mm) 3258c2ecf20Sopenharmony_ci __field(pgd_t *, pgd) 3268c2ecf20Sopenharmony_ci ), 3278c2ecf20Sopenharmony_ci TP_fast_assign(__entry->mm = mm; 3288c2ecf20Sopenharmony_ci __entry->pgd = pgd), 3298c2ecf20Sopenharmony_ci TP_printk("mm %p pgd %p", __entry->mm, __entry->pgd) 3308c2ecf20Sopenharmony_ci ); 3318c2ecf20Sopenharmony_ci#define DEFINE_XEN_MMU_PGD_EVENT(name) \ 3328c2ecf20Sopenharmony_ci DEFINE_EVENT(xen_mmu_pgd, name, \ 3338c2ecf20Sopenharmony_ci TP_PROTO(struct mm_struct *mm, pgd_t *pgd), \ 3348c2ecf20Sopenharmony_ci TP_ARGS(mm, pgd)) 3358c2ecf20Sopenharmony_ci 3368c2ecf20Sopenharmony_ciDEFINE_XEN_MMU_PGD_EVENT(xen_mmu_pgd_pin); 3378c2ecf20Sopenharmony_ciDEFINE_XEN_MMU_PGD_EVENT(xen_mmu_pgd_unpin); 3388c2ecf20Sopenharmony_ci 3398c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mmu_flush_tlb_one_user, 3408c2ecf20Sopenharmony_ci TP_PROTO(unsigned long addr), 3418c2ecf20Sopenharmony_ci TP_ARGS(addr), 3428c2ecf20Sopenharmony_ci TP_STRUCT__entry( 3438c2ecf20Sopenharmony_ci __field(unsigned long, addr) 3448c2ecf20Sopenharmony_ci ), 3458c2ecf20Sopenharmony_ci TP_fast_assign(__entry->addr = addr), 3468c2ecf20Sopenharmony_ci TP_printk("addr %lx", __entry->addr) 3478c2ecf20Sopenharmony_ci ); 3488c2ecf20Sopenharmony_ci 3498c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mmu_flush_tlb_others, 3508c2ecf20Sopenharmony_ci TP_PROTO(const struct cpumask *cpus, struct mm_struct *mm, 3518c2ecf20Sopenharmony_ci unsigned long addr, unsigned long end), 3528c2ecf20Sopenharmony_ci TP_ARGS(cpus, mm, addr, end), 3538c2ecf20Sopenharmony_ci TP_STRUCT__entry( 3548c2ecf20Sopenharmony_ci __field(unsigned, ncpus) 3558c2ecf20Sopenharmony_ci __field(struct mm_struct *, mm) 3568c2ecf20Sopenharmony_ci __field(unsigned long, addr) 3578c2ecf20Sopenharmony_ci __field(unsigned long, end) 3588c2ecf20Sopenharmony_ci ), 3598c2ecf20Sopenharmony_ci TP_fast_assign(__entry->ncpus = cpumask_weight(cpus); 3608c2ecf20Sopenharmony_ci __entry->mm = mm; 3618c2ecf20Sopenharmony_ci __entry->addr = addr, 3628c2ecf20Sopenharmony_ci __entry->end = end), 3638c2ecf20Sopenharmony_ci TP_printk("ncpus %d mm %p addr %lx, end %lx", 3648c2ecf20Sopenharmony_ci __entry->ncpus, __entry->mm, __entry->addr, __entry->end) 3658c2ecf20Sopenharmony_ci ); 3668c2ecf20Sopenharmony_ci 3678c2ecf20Sopenharmony_ciTRACE_EVENT(xen_mmu_write_cr3, 3688c2ecf20Sopenharmony_ci TP_PROTO(bool kernel, unsigned long cr3), 3698c2ecf20Sopenharmony_ci TP_ARGS(kernel, cr3), 3708c2ecf20Sopenharmony_ci TP_STRUCT__entry( 3718c2ecf20Sopenharmony_ci __field(bool, kernel) 3728c2ecf20Sopenharmony_ci __field(unsigned long, cr3) 3738c2ecf20Sopenharmony_ci ), 3748c2ecf20Sopenharmony_ci TP_fast_assign(__entry->kernel = kernel; 3758c2ecf20Sopenharmony_ci __entry->cr3 = cr3), 3768c2ecf20Sopenharmony_ci TP_printk("%s cr3 %lx", 3778c2ecf20Sopenharmony_ci __entry->kernel ? "kernel" : "user", __entry->cr3) 3788c2ecf20Sopenharmony_ci ); 3798c2ecf20Sopenharmony_ci 3808c2ecf20Sopenharmony_ci 3818c2ecf20Sopenharmony_ci/* CPU */ 3828c2ecf20Sopenharmony_ciTRACE_EVENT(xen_cpu_write_ldt_entry, 3838c2ecf20Sopenharmony_ci TP_PROTO(struct desc_struct *dt, int entrynum, u64 desc), 3848c2ecf20Sopenharmony_ci TP_ARGS(dt, entrynum, desc), 3858c2ecf20Sopenharmony_ci TP_STRUCT__entry( 3868c2ecf20Sopenharmony_ci __field(struct desc_struct *, dt) 3878c2ecf20Sopenharmony_ci __field(int, entrynum) 3888c2ecf20Sopenharmony_ci __field(u64, desc) 3898c2ecf20Sopenharmony_ci ), 3908c2ecf20Sopenharmony_ci TP_fast_assign(__entry->dt = dt; 3918c2ecf20Sopenharmony_ci __entry->entrynum = entrynum; 3928c2ecf20Sopenharmony_ci __entry->desc = desc; 3938c2ecf20Sopenharmony_ci ), 3948c2ecf20Sopenharmony_ci TP_printk("dt %p entrynum %d entry %016llx", 3958c2ecf20Sopenharmony_ci __entry->dt, __entry->entrynum, 3968c2ecf20Sopenharmony_ci (unsigned long long)__entry->desc) 3978c2ecf20Sopenharmony_ci ); 3988c2ecf20Sopenharmony_ci 3998c2ecf20Sopenharmony_ciTRACE_EVENT(xen_cpu_write_idt_entry, 4008c2ecf20Sopenharmony_ci TP_PROTO(gate_desc *dt, int entrynum, const gate_desc *ent), 4018c2ecf20Sopenharmony_ci TP_ARGS(dt, entrynum, ent), 4028c2ecf20Sopenharmony_ci TP_STRUCT__entry( 4038c2ecf20Sopenharmony_ci __field(gate_desc *, dt) 4048c2ecf20Sopenharmony_ci __field(int, entrynum) 4058c2ecf20Sopenharmony_ci ), 4068c2ecf20Sopenharmony_ci TP_fast_assign(__entry->dt = dt; 4078c2ecf20Sopenharmony_ci __entry->entrynum = entrynum; 4088c2ecf20Sopenharmony_ci ), 4098c2ecf20Sopenharmony_ci TP_printk("dt %p entrynum %d", 4108c2ecf20Sopenharmony_ci __entry->dt, __entry->entrynum) 4118c2ecf20Sopenharmony_ci ); 4128c2ecf20Sopenharmony_ci 4138c2ecf20Sopenharmony_ciTRACE_EVENT(xen_cpu_load_idt, 4148c2ecf20Sopenharmony_ci TP_PROTO(const struct desc_ptr *desc), 4158c2ecf20Sopenharmony_ci TP_ARGS(desc), 4168c2ecf20Sopenharmony_ci TP_STRUCT__entry( 4178c2ecf20Sopenharmony_ci __field(unsigned long, addr) 4188c2ecf20Sopenharmony_ci ), 4198c2ecf20Sopenharmony_ci TP_fast_assign(__entry->addr = desc->address), 4208c2ecf20Sopenharmony_ci TP_printk("addr %lx", __entry->addr) 4218c2ecf20Sopenharmony_ci ); 4228c2ecf20Sopenharmony_ci 4238c2ecf20Sopenharmony_ciTRACE_EVENT(xen_cpu_write_gdt_entry, 4248c2ecf20Sopenharmony_ci TP_PROTO(struct desc_struct *dt, int entrynum, const void *desc, int type), 4258c2ecf20Sopenharmony_ci TP_ARGS(dt, entrynum, desc, type), 4268c2ecf20Sopenharmony_ci TP_STRUCT__entry( 4278c2ecf20Sopenharmony_ci __field(u64, desc) 4288c2ecf20Sopenharmony_ci __field(struct desc_struct *, dt) 4298c2ecf20Sopenharmony_ci __field(int, entrynum) 4308c2ecf20Sopenharmony_ci __field(int, type) 4318c2ecf20Sopenharmony_ci ), 4328c2ecf20Sopenharmony_ci TP_fast_assign(__entry->dt = dt; 4338c2ecf20Sopenharmony_ci __entry->entrynum = entrynum; 4348c2ecf20Sopenharmony_ci __entry->desc = *(u64 *)desc; 4358c2ecf20Sopenharmony_ci __entry->type = type; 4368c2ecf20Sopenharmony_ci ), 4378c2ecf20Sopenharmony_ci TP_printk("dt %p entrynum %d type %d desc %016llx", 4388c2ecf20Sopenharmony_ci __entry->dt, __entry->entrynum, __entry->type, 4398c2ecf20Sopenharmony_ci (unsigned long long)__entry->desc) 4408c2ecf20Sopenharmony_ci ); 4418c2ecf20Sopenharmony_ci 4428c2ecf20Sopenharmony_ciTRACE_EVENT(xen_cpu_set_ldt, 4438c2ecf20Sopenharmony_ci TP_PROTO(const void *addr, unsigned entries), 4448c2ecf20Sopenharmony_ci TP_ARGS(addr, entries), 4458c2ecf20Sopenharmony_ci TP_STRUCT__entry( 4468c2ecf20Sopenharmony_ci __field(const void *, addr) 4478c2ecf20Sopenharmony_ci __field(unsigned, entries) 4488c2ecf20Sopenharmony_ci ), 4498c2ecf20Sopenharmony_ci TP_fast_assign(__entry->addr = addr; 4508c2ecf20Sopenharmony_ci __entry->entries = entries), 4518c2ecf20Sopenharmony_ci TP_printk("addr %p entries %u", 4528c2ecf20Sopenharmony_ci __entry->addr, __entry->entries) 4538c2ecf20Sopenharmony_ci ); 4548c2ecf20Sopenharmony_ci 4558c2ecf20Sopenharmony_ci 4568c2ecf20Sopenharmony_ci#endif /* _TRACE_XEN_H */ 4578c2ecf20Sopenharmony_ci 4588c2ecf20Sopenharmony_ci/* This part must be outside protection */ 4598c2ecf20Sopenharmony_ci#include <trace/define_trace.h> 460