Blame irqbalance.h

Packit 9eaa09
#ifndef __INCLUDE_GUARD_IRQBALANCE_H_
Packit 9eaa09
#define __INCLUDE_GUARD_IRQBALANCE_H_
Packit 9eaa09
Packit 9eaa09
Packit 9eaa09
#include "constants.h"
Packit 9eaa09
Packit 9eaa09
#include "cpumask.h"
Packit 9eaa09
Packit 9eaa09
#include <stdint.h>
Packit 9eaa09
#include <glib.h>
Packit 9eaa09
#include <glib-unix.h>
Packit 9eaa09
#include <syslog.h>
Packit 9eaa09
#include <limits.h>
Packit 9eaa09
Packit 9eaa09
#include "types.h"
Packit 9eaa09
#include "config.h"
Packit 9eaa09
Packit 9eaa09
#ifdef __aarch64__
Packit 9eaa09
#define AARCH64
Packit 9eaa09
#endif
Packit 9eaa09
Packit 9eaa09
#ifdef HAVE_NUMA_H
Packit 9eaa09
#include <numa.h>
Packit 9eaa09
#else
Packit 9eaa09
#define numa_available() -1
Packit 9eaa09
#endif
Packit 9eaa09
Packit 9eaa09
#ifdef HAVE_LIBSYSTEMD
Packit 9eaa09
#include <systemd/sd-journal.h>
Packit 9eaa09
#endif
Packit 9eaa09
Packit 9eaa09
extern int package_count;
Packit 9eaa09
extern int cache_domain_count;
Packit 9eaa09
extern int core_count;
Packit 9eaa09
extern char *classes[];
Packit 9eaa09
Packit 9eaa09
extern void parse_cpu_tree(void);
Packit 9eaa09
extern void clear_work_stats(void);
Packit 9eaa09
extern void parse_proc_interrupts(void);
Packit 9eaa09
extern GList* collect_full_irq_list();
Packit 9eaa09
extern void parse_proc_stat(void);
Packit 9eaa09
extern void set_interrupt_count(int number, uint64_t count);
Packit 9eaa09
extern void set_msi_interrupt_numa(int number);
Packit 9eaa09
Packit 9eaa09
extern GList *rebalance_irq_list;
Packit 9eaa09
Packit 9eaa09
void update_migration_status(void);
Packit 9eaa09
void dump_workloads(void);
Packit 9eaa09
void sort_irq_list(GList **list);
Packit 9eaa09
void calculate_placement(void);
Packit 9eaa09
void dump_tree(void);
Packit 9eaa09
Packit 9eaa09
void activate_mappings(void);
Packit 9eaa09
void clear_cpu_tree(void);
Packit 9eaa09
Packit 9eaa09
/*===================NEW BALANCER FUNCTIONS============================*/
Packit 9eaa09
Packit 9eaa09
/*
Packit 9eaa09
 * Master topo_obj type lists
Packit 9eaa09
 */
Packit 9eaa09
extern GList *numa_nodes;
Packit 9eaa09
extern GList *packages;
Packit 9eaa09
extern GList *cache_domains;
Packit 9eaa09
extern GList *cpus;
Packit 9eaa09
extern int numa_avail;
Packit 9eaa09
extern GList *cl_banned_irqs;
Packit 9eaa09
Packit 9eaa09
extern int debug_mode;
Packit 9eaa09
extern int journal_logging;
Packit 9eaa09
extern int one_shot_mode;
Packit 9eaa09
extern int need_rescan;
Packit 9eaa09
extern unsigned long long cycle_count;
Packit 9eaa09
extern unsigned long power_thresh;
Packit 9eaa09
extern unsigned long deepest_cache;
Packit 9eaa09
extern char *banscript;
Packit 9eaa09
extern char *polscript;
Packit 9eaa09
extern cpumask_t banned_cpus;
Packit 9eaa09
extern cpumask_t unbanned_cpus;
Packit 9eaa09
extern long HZ;
Packit 9eaa09
Packit 9eaa09
/*
Packit 9eaa09
 * Numa node access routines
Packit 9eaa09
 */
Packit 9eaa09
extern void build_numa_node_list(void);
Packit 9eaa09
extern void free_numa_node_list(void);
Packit 9eaa09
extern void dump_numa_node_info(struct topo_obj *node, void *data);
Packit 9eaa09
extern void connect_cpu_mem_topo(struct topo_obj *p, void *data);
Packit 9eaa09
extern struct topo_obj *get_numa_node(int nodeid);
Packit 9eaa09
Packit 9eaa09
/*
Packit 9eaa09
 * cpu core functions
Packit 9eaa09
 */
Packit 9eaa09
#define cpu_numa_node(cpu) ((cpu)->parent->numa_nodes)
Packit 9eaa09
extern struct topo_obj *find_cpu_core(int cpunr);
Packit 9eaa09
extern int get_cpu_count(void);
Packit 9eaa09
Packit 9eaa09
/*
Packit 9eaa09
 * irq db functions
Packit 9eaa09
 */
Packit 9eaa09
extern void rebuild_irq_db(void);
Packit 9eaa09
extern void free_irq_db(void);
Packit 9eaa09
extern void add_cl_banned_irq(int irq);
Packit 9eaa09
extern void for_each_irq(GList *list, void (*cb)(struct irq_info *info,  void *data), void *data);
Packit 9eaa09
extern struct irq_info *get_irq_info(int irq);
Packit 9eaa09
extern void migrate_irq(GList **from, GList **to, struct irq_info *info);
Packit 9eaa09
extern void free_cl_opts(void);
Packit 9eaa09
extern void add_cl_banned_module(char *modname);
Packit 9eaa09
#define irq_numa_node(irq) ((irq)->numa_node)
Packit 9eaa09
Packit 9eaa09
Packit 9eaa09
/*
Packit 9eaa09
 * Generic object functions
Packit 9eaa09
 */
Packit 9eaa09
static inline void for_each_object(GList *list, void (*cb)(struct topo_obj *obj,  void *data), void *data)
Packit 9eaa09
{
Packit 9eaa09
	GList *entry, *next;
Packit 9eaa09
	entry = g_list_first(list);
Packit 9eaa09
	while (entry) {
Packit 9eaa09
		next = g_list_next(entry);
Packit 9eaa09
		cb(entry->data, data);
Packit 9eaa09
		entry = next;
Packit 9eaa09
	}
Packit 9eaa09
}
Packit 9eaa09
Packit 9eaa09
/*
Packit 9eaa09
 * Logging functions
Packit 9eaa09
 */
Packit 9eaa09
#define TO_SYSLOG	(1 << 0)
Packit 9eaa09
#define TO_CONSOLE	(1 << 1)
Packit 9eaa09
#define TO_ALL		(TO_SYSLOG | TO_CONSOLE)
Packit 9eaa09
Packit 9eaa09
extern const char * log_indent;
Packit 9eaa09
extern unsigned int log_mask;
Packit 9eaa09
#ifdef HAVE_LIBSYSTEMD
Packit 9eaa09
#define log(mask, lvl, fmt, args...) do {					\
Packit 9eaa09
	if (journal_logging) {							\
Packit 9eaa09
		sd_journal_print(lvl, fmt, ##args);				\
Packit 9eaa09
		if (log_mask & mask & TO_CONSOLE)				\
Packit 9eaa09
			printf(fmt, ##args);					\
Packit 9eaa09
	} else { 								\
Packit 9eaa09
		if (log_mask & mask & TO_SYSLOG) 				\
Packit 9eaa09
			syslog(lvl, fmt, ##args); 				\
Packit 9eaa09
		if (log_mask & mask & TO_CONSOLE) 				\
Packit 9eaa09
			printf(fmt, ##args); 					\
Packit 9eaa09
	} 									\
Packit 9eaa09
}while(0)
Packit 9eaa09
#else /* ! HAVE_LIBSYSTEMD */
Packit 9eaa09
#define log(mask, lvl, fmt, args...) do {					\
Packit 9eaa09
	if (journal_logging) {							\
Packit 9eaa09
		printf("<%d>", lvl); 						\
Packit 9eaa09
		printf(fmt, ##args);						\
Packit 9eaa09
	} else { 								\
Packit 9eaa09
		if (log_mask & mask & TO_SYSLOG) 				\
Packit 9eaa09
			syslog(lvl, fmt, ##args); 				\
Packit 9eaa09
		if (log_mask & mask & TO_CONSOLE) 				\
Packit 9eaa09
			printf(fmt, ##args); 					\
Packit 9eaa09
	} 									\
Packit 9eaa09
}while(0)
Packit 9eaa09
#endif /* HAVE_LIBSYSTEMD */
Packit 9eaa09
Packit 9eaa09
#define SOCKET_PATH "irqbalance"
Packit 9eaa09
Packit 9eaa09
#endif /* __INCLUDE_GUARD_IRQBALANCE_H_ */
Packit 9eaa09