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 [email protected] https://lists.linux-foundation.org/mailman/listinfo/virtualization
