Re: [PATCH 3/5] KVM: Add paravirt MMU write support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Avi Kivity wrote:
Anthony Liguori wrote:
+static int kvm_hypercall_mmu_write(struct kvm_vcpu *vcpu, gva_t addr,
+                   unsigned long size, unsigned long a0,
+                   unsigned long a1)
+{
+    gpa_t gpa = vcpu->mmu.gva_to_gpa(vcpu, addr);
+    u64 value;
+
+    if (gpa == UNMAPPED_GVA)
+        return -EFAULT;
+    if (size == 1) {
+        if (!emulator_write_phys(vcpu, gpa, &a0, sizeof(a0)))
+            return -EFAULT;
+    } else if (size == 2) {
+        value = (u64)a1 << 32 | a0;
+        if (!emulator_write_phys(vcpu, gpa, &value, sizeof(value)))
+            return -EFAULT;
+    } else
+        return -E2BIG;
+
+    return 0;
+}

Hypercalls should return kvm-specific error codes (defined in include/linux/kvm_para.h), not Linux error codes, as they could be used in operating systems which have different values for E2BIG and friends.

If Linux's errnos are stable, we could just use them and let a non-Linux guest define a set of KVM_E2BIG, etc.? It just seemed pretty ugly to add a bunch of these.

+static void kvm_pte_clear(struct mm_struct *mm,
+              unsigned long addr, pte_t *ptep)
+{
+    pte_t pte = {0};

Surely there's a nice macro for creating a pte from an int?

Probably :-)

Any performance measurement?

Yes, surprisingly enough. COW faults in virtbench drop by a significant amount. I'll repost each patch with virtbench results. I suspect that the vmmcall path is much faster than a page fault.

Regards,

Anthony Liguori

_______________________________________________
Virtualization mailing list
Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linux-foundation.org/mailman/listinfo/virtualization

[Index of Archives]     [KVM Development]     [Libvirt Development]     [Libvirt Users]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux