OSDN Git Service
(root)
/
tomoyo
/
tomoyo-test1.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
76d2540
)
KVM: Fix kvm mmu_notifier initialization order
author
OGAWA Hirofumi
<hirofumi@mail.parknet.co.jp>
Wed, 11 May 2011 00:28:28 +0000
(09:28 +0900)
committer
Avi Kivity
<avi@redhat.com>
Sun, 22 May 2011 12:48:12 +0000
(08:48 -0400)
Like the following, mmu_notifier can be called after registering
immediately. So, kvm have to initialize kvm->mmu_lock before it.
BUG: spinlock bad magic on CPU#0, kswapd0/342
lock:
ffff8800af8c4000
, .magic:
00000000
, .owner: <none>/-1, .owner_cpu: 0
Pid: 342, comm: kswapd0 Not tainted 2.6.39-rc5+ #1
Call Trace:
[<
ffffffff8118ce61
>] spin_bug+0x9c/0xa3
[<
ffffffff8118ce91
>] do_raw_spin_lock+0x29/0x13c
[<
ffffffff81024923
>] ? flush_tlb_others_ipi+0xaf/0xfd
[<
ffffffff812e22f3
>] _raw_spin_lock+0x9/0xb
[<
ffffffffa0582325
>] kvm_mmu_notifier_clear_flush_young+0x2c/0x66 [kvm]
[<
ffffffff810d3ff3
>] __mmu_notifier_clear_flush_young+0x2b/0x57
[<
ffffffff810c8761
>] page_referenced_one+0x88/0xea
[<
ffffffff810c89bf
>] page_referenced+0x1fc/0x256
[<
ffffffff810b2771
>] shrink_page_list+0x187/0x53a
[<
ffffffff810b2ed7
>] shrink_inactive_list+0x1e0/0x33d
[<
ffffffff810acf95
>] ? determine_dirtyable_memory+0x15/0x27
[<
ffffffff812e90ee
>] ? call_function_single_interrupt+0xe/0x20
[<
ffffffff810b3356
>] shrink_zone+0x322/0x3de
[<
ffffffff810a9587
>] ? zone_watermark_ok_safe+0xe2/0xf1
[<
ffffffff810b3928
>] kswapd+0x516/0x818
[<
ffffffff810b3412
>] ? shrink_zone+0x3de/0x3de
[<
ffffffff81053d17
>] kthread+0x7d/0x85
[<
ffffffff812e9394
>] kernel_thread_helper+0x4/0x10
[<
ffffffff81053c9a
>] ? __init_kthread_worker+0x37/0x37
[<
ffffffff812e9390
>] ? gs_change+0xb/0xb
Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Signed-off-by: Avi Kivity <avi@redhat.com>
virt/kvm/kvm_main.c
patch
|
blob
|
history
diff --git
a/virt/kvm/kvm_main.c
b/virt/kvm/kvm_main.c
index
ed3c4e7
..
22cdb96
100644
(file)
--- a/
virt/kvm/kvm_main.c
+++ b/
virt/kvm/kvm_main.c
@@
-467,6
+467,7
@@
static struct kvm *kvm_create_vm(void)
if (!kvm->buses[i])
goto out_err;
}
+ spin_lock_init(&kvm->mmu_lock);
r = kvm_init_mmu_notifier(kvm);
if (r)
@@
-474,7
+475,6
@@
static struct kvm *kvm_create_vm(void)
kvm->mm = current->mm;
atomic_inc(&kvm->mm->mm_count);
- spin_lock_init(&kvm->mmu_lock);
kvm_eventfd_init(kvm);
mutex_init(&kvm->lock);
mutex_init(&kvm->irq_lock);