mirror of
https://github.com/clearlinux/kvmtool.git
synced 2026-08-28 09:55:57 +00:00
50cb6dc920
This adds a method to call init/exit functions similar to the kernel's init functions. Signed-off-by: Sasha Levin <levinsasha928@gmail.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
52 lines
1.5 KiB
C
52 lines
1.5 KiB
C
#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
|