kvm_cmd_run_init
初期化いろいろ
init_list__init(kvm)
init_listsへ登録された初期化
init_list_add
core_init, base_int, dev_base_init, dev_init等のマクロがこれを呼ぶ
dev_base_init
virtio_dev_init
firmware_init
デバイスに関する情報など,をguestへ伝えるのに,FDTの生成をしている
memo
init_list_add
code:shell
include/kvm/util-init.h:int init_list_add(struct init_item *t, int (*init)(struct kvm *),
include/kvm/util-init.h:#define __init_list_add(cb, l) \
include/kvm/util-init.h: init_list_add(&t, cb, l, name); \
include/kvm/util-init.h:#define core_init(cb) __init_list_add(cb, 0)
include/kvm/util-init.h:#define base_init(cb) __init_list_add(cb, 2)
include/kvm/util-init.h:#define dev_base_init(cb) __init_list_add(cb, 4)
include/kvm/util-init.h:#define dev_init(cb) __init_list_add(cb, 5)
include/kvm/util-init.h:#define virtio_dev_init(cb) __init_list_add(cb, 6)
include/kvm/util-init.h:#define firmware_init(cb) __init_list_add(cb, 7)
include/kvm/util-init.h:#define late_init(cb) __init_list_add(cb, 9)
tags:__init_list_add include/kvm/util-init.h 20;" d
tags:init_list_add util/init.c /^int init_list_add(struct init_item *t, int (*init)(struct kvm *),$/;" f
util/init.c:int init_list_add(struct init_item *t, int (*init)(struct kvm *),
virtio_dev_init読んでいる者たち
code:shell
virtio/net.c:virtio_dev_init(virtio_net__init);
virtio/balloon.c:virtio_dev_init(virtio_bln__init);
virtio/console.c:virtio_dev_init(virtio_console__init);
virtio/9p.c:virtio_dev_init(virtio_9p__init);
virtio/rng.c:virtio_dev_init(virtio_rng__init);
virtio/blk.c:virtio_dev_init(virtio_blk__init);
virtio/scsi.c:virtio_dev_init(virtio_scsi_init);
dev_base_init読んでいるものたち
code:shell
disk/core.c:dev_base_init(disk_image__init);
include/kvm/util-init.h:#define dev_base_init(cb) __init_list_add(cb, 4)
ioport.c:dev_base_init(ioport__init);
pci.c:dev_base_init(pci__init);
powerpc/xics.c:dev_base_init(xics_init);
vfio/core.c:dev_base_init(vfio__init);
x86/irq.c:dev_base_init(irq__init);
firmware_init
code:shell
framebuffer.c:firmware_init(fb__init);
include/kvm/util-init.h:#define firmware_init(cb) __init_list_add(cb, 7)
powerpc/kvm.c:firmware_init(setup_fdt);
x86/mptable.c:firmware_init(mptable__init);
riscvはなさそう
late_init
code:shell
symbol.c:late_init(symbol_init);
include/kvm/util-init.h:#define late_init(cb) __init_list_add(cb, 9)
riscv/fdt.c:late_init(setup_fdt);
arm/fdt.c:late_init(setup_fdt);
arm/gic.c:late_init(gic__init_gic)
util/threadpool.c:late_init(thread_pool__init);