blob: 13d4f04df678e01c51ee7f235b778a72fd831af6 [file] [log] [blame]
#ifndef KVM__UTIL_INIT_H
#define KVM__UTIL_INIT_H
struct kvm;
struct init_item {
struct hlist_node n;
const char *fn_name;
int (*init)(struct kvm *);
};
int init_list__init(struct kvm *kvm);
int init_list__exit(struct kvm *kvm);
int init_list_add(struct init_item *t, int (*init)(struct kvm *),
int priority, const char *name);
int exit_list_add(struct init_item *t, int (*init)(struct kvm *),
int priority, const char *name);
#define __init_list_add(cb, l) \
static void __attribute__ ((constructor)) __init__##cb(void) \
{ \
static char name[] = #cb; \
static struct init_item t; \
init_list_add(&t, cb, l, name); \
}
#define __exit_list_add(cb, l) \
static void __attribute__ ((constructor)) __init__##cb(void) \
{ \
static char name[] = #cb; \
static struct init_item t; \
exit_list_add(&t, cb, l, name); \
}
#define core_init(cb) __init_list_add(cb, 0)
#define base_init(cb) __init_list_add(cb, 2)
#define dev_base_init(cb) __init_list_add(cb, 4)
#define dev_init(cb) __init_list_add(cb, 5)
#define virtio_dev_init(cb) __init_list_add(cb, 6)
#define firmware_init(cb) __init_list_add(cb, 7)
#define late_init(cb) __init_list_add(cb, 9)
#define core_exit(cb) __exit_list_add(cb, 0)
#define base_exit(cb) __exit_list_add(cb, 2)
#define dev_base_exit(cb) __exit_list_add(cb, 4)
#define dev_exit(cb) __exit_list_add(cb, 5)
#define virtio_dev_exit(cb) __exit_list_add(cb, 6)
#define firmware_exit(cb) __exit_list_add(cb, 7)
#define late_exit(cb) __exit_list_add(cb, 9)
#endif