Loading virt/kvm/kvm_main.c +12 −6 Original line number Original line Diff line number Diff line Loading @@ -105,10 +105,11 @@ static void ack_flush(void *_completed) void kvm_flush_remote_tlbs(struct kvm *kvm) void kvm_flush_remote_tlbs(struct kvm *kvm) { { int i, cpu; int i, cpu, me; cpumask_t cpus; cpumask_t cpus; struct kvm_vcpu *vcpu; struct kvm_vcpu *vcpu; me = get_cpu(); cpus_clear(cpus); cpus_clear(cpus); for (i = 0; i < KVM_MAX_VCPUS; ++i) { for (i = 0; i < KVM_MAX_VCPUS; ++i) { vcpu = kvm->vcpus[i]; vcpu = kvm->vcpus[i]; Loading @@ -117,21 +118,24 @@ void kvm_flush_remote_tlbs(struct kvm *kvm) if (test_and_set_bit(KVM_REQ_TLB_FLUSH, &vcpu->requests)) if (test_and_set_bit(KVM_REQ_TLB_FLUSH, &vcpu->requests)) continue; continue; cpu = vcpu->cpu; cpu = vcpu->cpu; if (cpu != -1 && cpu != raw_smp_processor_id()) if (cpu != -1 && cpu != me) cpu_set(cpu, cpus); cpu_set(cpu, cpus); } } if (cpus_empty(cpus)) if (cpus_empty(cpus)) return; goto out; ++kvm->stat.remote_tlb_flush; ++kvm->stat.remote_tlb_flush; smp_call_function_mask(cpus, ack_flush, NULL, 1); smp_call_function_mask(cpus, ack_flush, NULL, 1); out: put_cpu(); } } void kvm_reload_remote_mmus(struct kvm *kvm) void kvm_reload_remote_mmus(struct kvm *kvm) { { int i, cpu; int i, cpu, me; cpumask_t cpus; cpumask_t cpus; struct kvm_vcpu *vcpu; struct kvm_vcpu *vcpu; me = get_cpu(); cpus_clear(cpus); cpus_clear(cpus); for (i = 0; i < KVM_MAX_VCPUS; ++i) { for (i = 0; i < KVM_MAX_VCPUS; ++i) { vcpu = kvm->vcpus[i]; vcpu = kvm->vcpus[i]; Loading @@ -140,12 +144,14 @@ void kvm_reload_remote_mmus(struct kvm *kvm) if (test_and_set_bit(KVM_REQ_MMU_RELOAD, &vcpu->requests)) if (test_and_set_bit(KVM_REQ_MMU_RELOAD, &vcpu->requests)) continue; continue; cpu = vcpu->cpu; cpu = vcpu->cpu; if (cpu != -1 && cpu != raw_smp_processor_id()) if (cpu != -1 && cpu != me) cpu_set(cpu, cpus); cpu_set(cpu, cpus); } } if (cpus_empty(cpus)) if (cpus_empty(cpus)) return; goto out; smp_call_function_mask(cpus, ack_flush, NULL, 1); smp_call_function_mask(cpus, ack_flush, NULL, 1); out: put_cpu(); } } Loading Loading
virt/kvm/kvm_main.c +12 −6 Original line number Original line Diff line number Diff line Loading @@ -105,10 +105,11 @@ static void ack_flush(void *_completed) void kvm_flush_remote_tlbs(struct kvm *kvm) void kvm_flush_remote_tlbs(struct kvm *kvm) { { int i, cpu; int i, cpu, me; cpumask_t cpus; cpumask_t cpus; struct kvm_vcpu *vcpu; struct kvm_vcpu *vcpu; me = get_cpu(); cpus_clear(cpus); cpus_clear(cpus); for (i = 0; i < KVM_MAX_VCPUS; ++i) { for (i = 0; i < KVM_MAX_VCPUS; ++i) { vcpu = kvm->vcpus[i]; vcpu = kvm->vcpus[i]; Loading @@ -117,21 +118,24 @@ void kvm_flush_remote_tlbs(struct kvm *kvm) if (test_and_set_bit(KVM_REQ_TLB_FLUSH, &vcpu->requests)) if (test_and_set_bit(KVM_REQ_TLB_FLUSH, &vcpu->requests)) continue; continue; cpu = vcpu->cpu; cpu = vcpu->cpu; if (cpu != -1 && cpu != raw_smp_processor_id()) if (cpu != -1 && cpu != me) cpu_set(cpu, cpus); cpu_set(cpu, cpus); } } if (cpus_empty(cpus)) if (cpus_empty(cpus)) return; goto out; ++kvm->stat.remote_tlb_flush; ++kvm->stat.remote_tlb_flush; smp_call_function_mask(cpus, ack_flush, NULL, 1); smp_call_function_mask(cpus, ack_flush, NULL, 1); out: put_cpu(); } } void kvm_reload_remote_mmus(struct kvm *kvm) void kvm_reload_remote_mmus(struct kvm *kvm) { { int i, cpu; int i, cpu, me; cpumask_t cpus; cpumask_t cpus; struct kvm_vcpu *vcpu; struct kvm_vcpu *vcpu; me = get_cpu(); cpus_clear(cpus); cpus_clear(cpus); for (i = 0; i < KVM_MAX_VCPUS; ++i) { for (i = 0; i < KVM_MAX_VCPUS; ++i) { vcpu = kvm->vcpus[i]; vcpu = kvm->vcpus[i]; Loading @@ -140,12 +144,14 @@ void kvm_reload_remote_mmus(struct kvm *kvm) if (test_and_set_bit(KVM_REQ_MMU_RELOAD, &vcpu->requests)) if (test_and_set_bit(KVM_REQ_MMU_RELOAD, &vcpu->requests)) continue; continue; cpu = vcpu->cpu; cpu = vcpu->cpu; if (cpu != -1 && cpu != raw_smp_processor_id()) if (cpu != -1 && cpu != me) cpu_set(cpu, cpus); cpu_set(cpu, cpus); } } if (cpus_empty(cpus)) if (cpus_empty(cpus)) return; goto out; smp_call_function_mask(cpus, ack_flush, NULL, 1); smp_call_function_mask(cpus, ack_flush, NULL, 1); out: put_cpu(); } } Loading