linux-2.6.20/drivers/kvm/kvm_main.c
■機能概要
kvmのメイン処理(ドライバエントリ)
■初期化/終了処理
ドライバのエントリ(初期化)関数は、kvm_initである。
関数ツリーは以下。使用する構造の初期化やページの取得・初期化程度しか行わない。
□kvm_init [kvm_main.c]
(引数)なし
├kvm_init_debug [kvm_main.c]
│ ├debugfs_create_dir
│ └debugfs_create_u32
├kvm_init_msr_list [kvm_main.c]
│ └rdmsr_safe
├alloc_page
├memset
└kvm_exit_debug [kvm_main.c]
ドライバが終了する際に呼ばれる関数は、kvm_exitである。
領域の解放程度しか行わない。
□kvm_exit [kvm_main.c]
(引数)なし
├kvm_exit_debug [kvm_main.c]
├__free_page
実際には、kvm_intel.koやkvm_amd.koが初期化する際に次の関数を呼び、
ディスパッチルーチンを設定し、初期化が行われる。詳細は、vmx.cを参照のこと。
□kvm_init_arch [kvm_main.c]
(引数)
├cpu_has_kvm_support
├register_reboot_notifier
└hardware_unsetup(異常系)
※次に示すkvm_dev構造体のポインタがシステムに登録される。
static struct file_operations kvm_chardev_ops = {
.open = kvm_dev_open,
.release = kvm_dev_release,
.unlocked_ioctl = kvm_dev_ioctl,
.compat_ioctl = kvm_dev_ioctl,
.mmap = kvm_dev_mmap,
};
static struct miscdevice kvm_dev = {
MISC_DYNAMIC_MINOR,
"kvm",
&kvm_chardev_ops,
};
kvm_intel.koやkvm_amd.koが終了する際に次の関数を呼び、終了処理が行われる。
□kvm_exit_arch [kvm_main.c]
(引数)なし
├misc_deregister
└hardware_unsetup
デバイスオープン処理へ
kvmのメイン処理(ドライバエントリ)
■初期化/終了処理
ドライバのエントリ(初期化)関数は、kvm_initである。
関数ツリーは以下。使用する構造の初期化やページの取得・初期化程度しか行わない。
□kvm_init [kvm_main.c]
(引数)なし
├kvm_init_debug [kvm_main.c]
│ ├debugfs_create_dir
│ └debugfs_create_u32
├kvm_init_msr_list [kvm_main.c]
- MSRリストの初期化
│ └rdmsr_safe
├alloc_page
- bad_page_address(詳細不明)の取得
├memset
- bad_page_address(詳細不明)の初期化
└kvm_exit_debug [kvm_main.c]
ドライバが終了する際に呼ばれる関数は、kvm_exitである。
領域の解放程度しか行わない。
□kvm_exit [kvm_main.c]
(引数)なし
├kvm_exit_debug [kvm_main.c]
├__free_page
- bad_page_address(詳細不明)の解放
実際には、kvm_intel.koやkvm_amd.koが初期化する際に次の関数を呼び、
ディスパッチルーチンを設定し、初期化が行われる。詳細は、vmx.cを参照のこと。
□kvm_init_arch [kvm_main.c]
(引数)
- struct kvm_arch_ops *ops:ディスパッチルーチンのポインタを含む構造体アドレス
- struct module *module:
├cpu_has_kvm_support
- CPUのサポート確認
- Biosによる有効化確認
- ハードウェアのセットアップ
├register_reboot_notifier
- 未使用
- デバイスのシステムへの登録※
└hardware_unsetup(異常系)
※次に示すkvm_dev構造体のポインタがシステムに登録される。
static struct file_operations kvm_chardev_ops = {
.open = kvm_dev_open,
.release = kvm_dev_release,
.unlocked_ioctl = kvm_dev_ioctl,
.compat_ioctl = kvm_dev_ioctl,
.mmap = kvm_dev_mmap,
};
static struct miscdevice kvm_dev = {
MISC_DYNAMIC_MINOR,
"kvm",
&kvm_chardev_ops,
};
kvm_intel.koやkvm_amd.koが終了する際に次の関数を呼び、終了処理が行われる。
□kvm_exit_arch [kvm_main.c]
(引数)なし
├misc_deregister
- デバイスのシステムへの登録削除
- 未使用
└hardware_unsetup
- ハードウェアのアンセットアップ
デバイスオープン処理へ
2007年03月15日(木) 09:20:30 Modified by deku_nobo