Wait for right amount of tlb flushes. Completed can be larger than
needed and therefore the loop waiting them to match never ends.

Signed-off-by: Marko Kohtala <[EMAIL PROTECTED]>

---

This solves kernel lockup in KVM_SET_MEMORY_REGION ioctl with Linux
2.6.23.8 and before at kvm-52 start. Not needed in 2.6.24.

diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
index cd05579..b148aff 100644
--- a/drivers/kvm/kvm_main.c
+++ b/drivers/kvm/kvm_main.c
@@ -279,7 +279,8 @@ void kvm_flush_remote_tlbs(struct kvm *kvm)
         * to complete.
         */
        for (cpu = first_cpu(cpus); cpu != NR_CPUS; cpu = next_cpu(cpu, cpus))
-               smp_call_function_single(cpu, ack_flush, &completed, 1, 0);
+               if (cpu_isset(cpu, cpus))
+                       smp_call_function_single(cpu, ack_flush, &completed, 1, 
0);
        while (atomic_read(&completed) != needed) {
                cpu_relax();
                barrier();

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
kvm-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to