#include <linux/percpu.h>
#include <linux/hardirq.h>
#include <linux/debugfs.h>
#include <linux/jump_label.h>
#include <linux/printk.h>
#include <asm/xen/hypercall.h>
#include "xen-ops.h"
#define MC_BATCH …
#define MC_ARGS …
struct mc_buffer { … };
struct mc_debug_data { … };
static DEFINE_PER_CPU(struct mc_buffer, mc_buffer);
static struct mc_debug_data mc_debug_data_early __initdata;
static DEFINE_PER_CPU(struct mc_debug_data *, mc_debug_data) = …;
static struct mc_debug_data __percpu *mc_debug_data_ptr;
DEFINE_PER_CPU(unsigned long, xen_mc_irq_flags);
static struct static_key mc_debug __ro_after_init;
static bool mc_debug_enabled __initdata;
static int __init xen_parse_mc_debug(char *arg)
{ … }
early_param(…);
void mc_percpu_init(unsigned int cpu)
{ … }
static int __init mc_debug_enable(void)
{ … }
early_initcall(mc_debug_enable);
static const uint8_t hpcpars[] = …;
static void print_debug_data(struct mc_buffer *b, struct mc_debug_data *mcdb,
int idx)
{ … }
void xen_mc_flush(void)
{ … }
struct multicall_space __xen_mc_entry(size_t args)
{ … }
struct multicall_space xen_mc_extend_args(unsigned long op, size_t size)
{ … }
void xen_mc_callback(void (*fn)(void *), void *data)
{ … }