Wiki内検索
最近更新したページ
管理人's Profile
オープン系の仮想化に興味をもつ2流技術者です。Linux 2.6.20に採用されたカーネルベースの仮想マシンドライバkvmについての情報をまとめるWikiを立ち上げました。
最新コメント
XenNews by check it out
Ubuntuでkvm! by check it out
PV Driver仕様概要 by stunning seo guys
PV Driver仕様概要 by awesome things!
FrontPage by awesome things!
ファイル雛形 by stunning seo guys
タグ
フリーエリア

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]
  • MSRリストの初期化
│ ├ARRAY_SIZE
│ └rdmsr_safe
├alloc_page
  • bad_page_address(詳細不明)の取得
├page_to_pfn
├memset
  • bad_page_address(詳細不明)の初期化
├__va
└kvm_exit_debug [kvm_main.c]

ドライバが終了する際に呼ばれる関数は、kvm_exitである。
領域の解放程度しか行わない。

□kvm_exit [kvm_main.c]
(引数)なし
├kvm_exit_debug [kvm_main.c]
├__free_page
  • bad_page_address(詳細不明)の解放
└pfn_to_page

実際には、kvm_intel.koやkvm_amd.koが初期化する際に次の関数を呼び、
ディスパッチルーチンを設定し、初期化が行われる。詳細は、vmx.cを参照のこと。

□kvm_init_arch [kvm_main.c]
(引数)
  • struct kvm_arch_ops *ops:ディスパッチルーチンのポインタを含む構造体アドレス
  • struct module *module:
├printk
├cpu_has_kvm_support
  • CPUのサポート確認
├disabled_by_bios
  • Biosによる有効化確認
├hardware_setup
  • ハードウェアのセットアップ
├on_each_cpu
├register_reboot_notifier
  • 未使用
├misc_register
  • デバイスのシステムへの登録※
├unregister_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
  • デバイスのシステムへの登録削除
├unregister_reboot_notifier
  • 未使用
├on_each_cpu
└hardware_unsetup
  • ハードウェアのアンセットアップ

デバイスオープン処理
2007年03月15日(木) 09:20:30 Modified by deku_nobo




スマートフォン版で見る