2 /^int kvm_init\
(/ { anon_inodes =
1 }
4 /return 0;/ && anon_inodes
{
5 print "\tr = kvm_init_anon_inodes();";
7 print "\t\t__free_page(bad_page);";
10 print "\tpreempt_notifier_sys_init();";
11 printf("\tprintk(\"loaded kvm module (%s)\\n\");\n", version
);
15 /^void kvm_exit
/ { anon_inodes_exit =
1 }
17 /\
}/ && anon_inodes_exit
{
18 print "\tkvm_exit_anon_inodes();";
19 print "\tpreempt_notifier_sys_exit();";
24 printf("MODULE_INFO(version, \"%s\");\n", version
)
27 /^static void vmx_load_host_state
/ {
28 vmx_load_host_state =
1
31 /vmcs_readl\
(HOST_GS_BASE\
)/ && vmx_load_host_state
{
32 $
0 =
"\t\twrmsrl(MSR_GS_BASE, gsbase);";
33 vmx_load_host_state =
0
36 /atomic_inc\
(&kvm
->mm
->mm_count\
);/ { $
0 =
"mmget(&kvm->mm->mm_count);" }
39 fcn = gensub
(/,/, "", "g", $
3)
40 $
0 =
"\t.VMA_OPS_FAULT(fault) = VMA_OPS_FAULT_FUNC(" fcn
"),"
43 /^static int .
*_stat_get
/ {
47 /DEFINE_SIMPLE_ATTRIBUTE.
*_stat_get
/ {
48 name = gensub
(/,/, "", "g", $
2);
49 print "MAKE_SIMPLE_ATTRIBUTE_GETTER(" name
")"
52 { sub(/linux\
/mm_types\.h
/, "linux/mm.h") }
54 { sub(/tsc_khz
/, "kvm_tsc_khz") }
56 { sub(/\
<desc_struct\
>/, "kvm_desc_struct") }
57 { sub(/\
<ldttss_desc64\
>/, "kvm_ldttss_desc64") }
58 { sub(/\
<desc_ptr\
>/, "kvm_desc_ptr") }
60 /^
\t\.name =
"kvm"/ { $
0 =
"\tset_kset_name(\"kvm\")," }
65 print "\tspecial_reload_dr7();"
68 /unsigned long flags
;/ && vmx_load_host_state
{
69 print "\tunsigned long gsbase;"
72 /local_irq_save
/ && vmx_load_host_state
{
73 print "\t\tgsbase = vmcs_readl(HOST_GS_BASE);"