Hi,
I just got this warning when doing a 'rmmod kvm-intel':

=================================
[ INFO: inconsistent lock state ]
2.6.23-rc3-libata-g28e8351a-dirty #93
---------------------------------
inconsistent {hardirq-on-W} -> {in-hardirq-W} usage.
udevd/2800 [HC1[1]:SC0[0]:HE0:SE1] takes:
 (kvm_lock){+-..}, at: [<f9c8718b>] hardware_disable+0x31/0xbc [kvm]
{hardirq-on-W} state was registered at:
  [<c013e95d>] __lock_acquire+0x487/0xbcc
  [<c013e1e1>] debug_check_no_locks_freed+0x110/0x11a
  [<c01cd920>] __next_cpu+0x12/0x21
  [<c0146ab6>] is_module_address+0x35/0x92
  [<c013f490>] lock_acquire+0x68/0x80
  [<f9c87039>] kvm_dev_ioctl+0xb5/0x1c8 [kvm]
  [<c02f19ce>] _spin_lock+0x36/0x5f
  [<f9c87039>] kvm_dev_ioctl+0xb5/0x1c8 [kvm]
  [<f9c87039>] kvm_dev_ioctl+0xb5/0x1c8 [kvm]
  [<c0119386>] do_page_fault+0x30d/0x734
  [<f9c86f84>] kvm_dev_ioctl+0x0/0x1c8 [kvm]
  [<c01756cf>] do_ioctl+0x1f/0x62
  [<c0175949>] vfs_ioctl+0x237/0x249
  [<c013e0ae>] trace_hardirqs_on+0x11a/0x13d
  [<c017598e>] sys_ioctl+0x33/0x4d
  [<c0103f3e>] syscall_call+0x7/0xb
  [<ffffffff>] 0xffffffff
irq event stamp: 682504
hardirqs last  enabled at (682503): [<c0151ce8>] 
get_page_from_freelist+0x18c/0x35c
hardirqs last disabled at (682504): [<c01049d5>] 
call_function_interrupt+0x29/0x38
softirqs last  enabled at (679024): [<c01067ed>] do_softirq+0x61/0xd1
softirqs last disabled at (679017): [<c01067ed>] do_softirq+0x61/0xd1

other info that might help us debug this:
1 lock held by udevd/2800:
 #0:  (&inode->i_mutex){--..}, at: [<c01660d8>] shmem_file_write+0x7e/0x2a6

stack backtrace:
 [<c013d370>] print_usage_bug+0x138/0x142
 [<c013db02>] mark_lock+0xae/0x44a
 [<c02f1fc9>] _spin_unlock+0x25/0x3b
 [<c013e8ec>] __lock_acquire+0x416/0xbcc
 [<c013f490>] lock_acquire+0x68/0x80
 [<f9c8718b>] hardware_disable+0x31/0xbc [kvm]
 [<c02f19ce>] _spin_lock+0x36/0x5f
 [<f9c8718b>] hardware_disable+0x31/0xbc [kvm]
 [<f9c8715a>] hardware_disable+0x0/0xbc [kvm]
 [<f9c8718b>] hardware_disable+0x31/0xbc [kvm]
 [<c013c3c8>] lock_release_holdtime+0x3d/0x4a
 [<f9c8715a>] hardware_disable+0x0/0xbc [kvm]
 [<c0113bcf>] smp_call_function_interrupt+0x37/0x52
 [<c01049df>] call_function_interrupt+0x33/0x38
 [<c01100d8>] p4_rearm+0x4/0xf2c
 [<c0151df1>] get_page_from_freelist+0x295/0x35c
 [<c0151f17>] __alloc_pages+0x5f/0x295
 [<c013c377>] put_lock_stats+0xa/0x1e
 [<c0165816>] shmem_getpage+0x38c/0x59a
 [<c02f06bf>] __mutex_lock_slowpath+0x290/0x298
 [<c0166185>] shmem_file_write+0x12b/0x2a6
 [<c016605a>] shmem_file_write+0x0/0x2a6
 [<c016be5a>] vfs_write+0x8a/0x10c
 [<c016c3d3>] sys_write+0x41/0x67
 [<c0103f3e>] syscall_call+0x7/0xb
 =======================

(this is kvm-36, but the bug was there in previous versions too)

kvm_lock is taken in kvm_create_vm with interrupts enabled. Later - at
rmmod time - it's used in decache_vcpus_on_cpu (hardware_disable) with
interrupts disabled (due to on_each_cpu). In theory it should be
harmless since the refcount on /dev/kvm prevents the deadlock.
Switching to irq-safe spin_lock_* seems fine, do you want a patch?

Luca
-- 
"Vorrei morire ucciso dagli agi. Vorrei che di me si dicesse: ``Com'�
morto?'' ``Gli � scoppiato il portafogli''" -- Marcello Marchesi

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to