staticinlineint qpaci(struct qpaci_info_block *info)
{ /* Size of info (in double words minus one) */
size_t size = sizeof(*info) / sizeof(u64) - 1; int cc;
#define PAI_CRYPTO_BASE 0x1000 /* First event number */ #define PAI_CRYPTO_MAXCTR 256 /* Max # of event counters */ #define PAI_CRYPTO_KERNEL_OFFSET 2048 #define PAI_NNPA_BASE 0x1800 /* First event number */ #define PAI_NNPA_MAXCTR 128 /* Max # of event counters */
DECLARE_STATIC_KEY_FALSE(pai_key);
static __always_inline void pai_kernel_enter(struct pt_regs *regs)
{ if (!IS_ENABLED(CONFIG_PERF_EVENTS)) return; if (!static_branch_unlikely(&pai_key)) return; if (!get_lowcore()->ccd) return; if (!user_mode(regs)) return;
WRITE_ONCE(get_lowcore()->ccd, get_lowcore()->ccd | PAI_CRYPTO_KERNEL_OFFSET);
}
static __always_inline void pai_kernel_exit(struct pt_regs *regs)
{ if (!IS_ENABLED(CONFIG_PERF_EVENTS)) return; if (!static_branch_unlikely(&pai_key)) return; if (!get_lowcore()->ccd) return; if (!user_mode(regs)) return;
WRITE_ONCE(get_lowcore()->ccd, get_lowcore()->ccd & ~PAI_CRYPTO_KERNEL_OFFSET);
}
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.