On 27/09/2018 05:48, Tianyu Lan wrote:
> +
> +     if (range && kvm_x86_ops->tlb_remote_flush_with_range) {
> +             /*
> +              * Read tlbs_dirty before flushing tlbs in order
> +              * to track dirty tlbs during flushing.
> +              */
> +             long dirty_count = smp_load_acquire(&kvm->tlbs_dirty);
> +
> +             ret = kvm_x86_ops->tlb_remote_flush_with_range(kvm, range);
> +             cmpxchg(&kvm->tlbs_dirty, dirty_count, 0);

This is wrong, because it's not the entire TLB that is flushed.  So you
cannot do the cmpxchg here.

Paolo

> +
> +     if (ret)
> +             kvm_flush_remote_tlbs(kvm);
> +}
> +

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to