# HG changeset patch
# User cegger
# Date 1351163719 -7200
NetBSD development

diff -r 609b3467a42f -r 7abb25095de0 config/NetBSD.mk
--- a/config/NetBSD.mk
+++ b/config/NetBSD.mk
@@ -12,6 +12,7 @@ else
 XEN_LOCK_DIR = $(PREFIX)/var/lib
 endif
 
-WGET = ftp
+WGET = ftp -o
 
+CONFIG_SYSTEM_LIBAIO = n
 PYTHON=python2.7
diff -r 609b3467a42f -r 7abb25095de0 config/StdGNU.mk
--- a/config/StdGNU.mk
+++ b/config/StdGNU.mk
@@ -22,7 +22,7 @@ MSGMERGE   = msgmerge
 # Allow git to be wrappered in the environment
 GIT        ?= git
 
-WGET       ?= wget -c
+WGET       ?= wget -c -O
 
 INSTALL      = install
 INSTALL_DIR  = $(INSTALL) -d -m0755 -p
diff -r 609b3467a42f -r 7abb25095de0 tools/Makefile
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -190,6 +190,7 @@ subdir-all-qemu-xen-dir: qemu-xen-dir-fi
 	fi; \
 	cd qemu-xen-dir; \
 	$$source/configure --enable-xen --target-list=i386-softmmu \
+		--prefix=$(PREFIX) \
 		--source-path=$$source \
 		--extra-cflags="-I$(XEN_ROOT)/tools/include \
 		-I$(XEN_ROOT)/tools/libxc \
diff -r 609b3467a42f -r 7abb25095de0 tools/firmware/etherboot/Makefile
--- a/tools/firmware/etherboot/Makefile
+++ b/tools/firmware/etherboot/Makefile
@@ -28,7 +28,7 @@ all: $(ROMS)
 	$(MAKE) -C $D/src bin/$(*F).rom
 
 $T:
-	if ! wget -O _$T $(IPXE_TARBALL_URL); then \
+	if ! $(WGET) _$T $(IPXE_TARBALL_URL); then \
 		$(GIT) clone $(IPXE_GIT_URL) $D.git; \
 		(cd $D.git && $(GIT) archive --format=tar --prefix=$D/ \
 		$(IPXE_GIT_TAG) | gzip >../_$T); \
diff -r 609b3467a42f -r 7abb25095de0 tools/include/xen-sys/NetBSD/privcmd.h
--- a/tools/include/xen-sys/NetBSD/privcmd.h
+++ b/tools/include/xen-sys/NetBSD/privcmd.h
@@ -58,6 +58,14 @@ typedef struct privcmd_mmapbatch {
     unsigned long *arr; /* array of mfns - top nibble set on err */
 } privcmd_mmapbatch_t; 
 
+typedef struct privcmd_mmapbatch_v2 {
+    unsigned int num;     /* number of pages to populate */
+    domid_t dom; /* target domain */
+    uint64_t addr;  /* virtual address */
+    const unsigned long *arr; /* array of mfns */
+    int *err; /* array of error codes */
+} privcmd_mmapbatch_v2_t; 
+
 typedef struct privcmd_blkmsg
 {
     unsigned long op;
@@ -94,6 +102,8 @@ typedef struct privcmd_blkmsg
  */
 #define IOCTL_PRIVCMD_INITDOMAIN_EVTCHN \
     _IOR('P', 5, int)
+#define IOCTL_PRIVCMD_MMAPBATCH_V2      \
+    _IOW('P', 6, privcmd_mmapbatch_v2_t)
 
 /* Interface to /dev/xenevt */
 /* EVTCHN_RESET: Clear and reinit the event buffer. Clear error condition. */
diff -r 609b3467a42f -r 7abb25095de0 tools/libxc/xc_cpuid_x86.c
--- a/tools/libxc/xc_cpuid_x86.c
+++ b/tools/libxc/xc_cpuid_x86.c
@@ -324,7 +324,6 @@ static void xc_cpuid_hvm_policy(
                       bitmaskof(X86_FEATURE_XSAVE)) : 0));
 
         regs[2] |= (bitmaskof(X86_FEATURE_HYPERVISOR) |
-                    bitmaskof(X86_FEATURE_TSC_DEADLINE) |
                     bitmaskof(X86_FEATURE_X2APIC));
 
         regs[3] &= (bitmaskof(X86_FEATURE_FPU) |
diff -r 609b3467a42f -r 7abb25095de0 tools/libxl/libxl_cpuid.c
--- a/tools/libxl/libxl_cpuid.c
+++ b/tools/libxl/libxl_cpuid.c
@@ -179,11 +179,14 @@ int libxl_cpuid_parse_config(libxl_cpuid
         {"nc",           0x80000008, NA, CPUID_REG_ECX,  0,  8},
         {"svm_npt",      0x8000000a, NA, CPUID_REG_EDX,  0,  1},
         {"svm_lbrv",     0x8000000a, NA, CPUID_REG_EDX,  1,  1},
+        {"svm_svml",     0x8000000a, NA, CPUID_REG_EDX,  2,  1},
         {"svm_nrips",    0x8000000a, NA, CPUID_REG_EDX,  3,  1},
         {"svm_tscrate",  0x8000000a, NA, CPUID_REG_EDX,  4,  1},
         {"svm_vmcbclean",0x8000000a, NA, CPUID_REG_EDX,  5,  1},
+        {"svm_flushasid",0x8000000a, NA, CPUID_REG_EDX,  6,  1},
         {"svm_decode",   0x8000000a, NA, CPUID_REG_EDX,  7,  1},
         {"svm_pausefilt",0x8000000a, NA, CPUID_REG_EDX, 10,  1},
+        {"svm_pausethld",0x8000000a, NA, CPUID_REG_EDX, 11,  1},
 
         {NULL, 0, NA, CPUID_REG_INV, 0, 0}
     };
diff -r 609b3467a42f -r 7abb25095de0 xen/arch/x86/hvm/svm/asid.c
--- a/xen/arch/x86/hvm/svm/asid.c
+++ b/xen/arch/x86/hvm/svm/asid.c
@@ -43,10 +43,17 @@ void svm_asid_handle_vmrun(void)
 {
     struct vcpu *curr = current;
     struct vmcb_struct *vmcb = curr->arch.hvm_svm.vmcb;
-    struct hvm_vcpu_asid *p_asid =
-        nestedhvm_vcpu_in_guestmode(curr)
-        ? &vcpu_nestedhvm(curr).nv_n2asid : &curr->arch.hvm_vcpu.n1asid;
-    bool_t need_flush = hvm_asid_handle_vmenter(p_asid);
+    struct hvm_vcpu_asid *p_asid;
+    bool_t vcpu_guestmode;
+    bool_t need_flush;
+
+    vcpu_guestmode = (nestedhvm_enabled(curr->domain) &&
+        nestedhvm_vcpu_in_guestmode(curr));
+
+    p_asid = vcpu_guestmode ?
+        &vcpu_nestedhvm(curr).nv_n2asid : &curr->arch.hvm_vcpu.n1asid;
+
+    need_flush = hvm_asid_handle_vmenter(p_asid);
 
     /* ASID 0 indicates that ASIDs are disabled. */
     if ( p_asid->asid == 0 )
diff -r 609b3467a42f -r 7abb25095de0 xen/arch/x86/hvm/svm/nestedsvm.c
--- a/xen/arch/x86/hvm/svm/nestedsvm.c
+++ b/xen/arch/x86/hvm/svm/nestedsvm.c
@@ -477,6 +477,10 @@ static int nsvm_vmcb_prepare4vmrun(struc
 
     /* TLB control */
     n2vmcb->tlb_control = ns_vmcb->tlb_control;
+    if (!cpu_has_svm_flushasid && n2vmcb->tlb_control > 0x1) {
+        hvm_asid_flush_vcpu_asid(&nv->nv_n2asid);
+        n2vmcb->tlb_control = 0;
+    }
 
     /* Virtual Interrupts */
     if (!vcleanbit_set(tpr)) {
diff -r 609b3467a42f -r 7abb25095de0 xen/arch/x86/hvm/vlapic.c
--- a/xen/arch/x86/hvm/vlapic.c
+++ b/xen/arch/x86/hvm/vlapic.c
@@ -738,6 +738,7 @@ static int vlapic_reg_write(struct vcpu 
         if ( val == 0 )
         {
             destroy_periodic_time(&vlapic->pt);
+            vlapic->hw.tdt_msr = 0;
             break;
         }
 
@@ -1061,7 +1062,7 @@ bool_t is_vlapic_lvtpc_enabled(struct vl
             !(vlapic_get_reg(vlapic, APIC_LVTPC) & APIC_LVT_MASKED));
 }
 
-/* Reset the VLPAIC back to its power-on/reset state. */
+/* Reset the VLAPIC back to its power-on/reset state. */
 void vlapic_reset(struct vlapic *vlapic)
 {
     struct vcpu *v = vlapic_vcpu(vlapic);
@@ -1093,6 +1094,7 @@ void vlapic_reset(struct vlapic *vlapic)
     vlapic->hw.disabled |= VLAPIC_SW_DISABLED;
 
     destroy_periodic_time(&vlapic->pt);
+    vlapic->hw.tdt_msr = 0;
 }
 
 /* rearm the actimer if needed, after a HVM restore */
diff -r 609b3467a42f -r 7abb25095de0 xen/include/asm-x86/hvm/svm/svm.h
--- a/xen/include/asm-x86/hvm/svm/svm.h
+++ b/xen/include/asm-x86/hvm/svm/svm.h
@@ -86,6 +86,7 @@ extern u32 svm_feature_flags;
 #define cpu_has_svm_svml      cpu_has_svm_feature(SVM_FEATURE_SVML)
 #define cpu_has_svm_nrips     cpu_has_svm_feature(SVM_FEATURE_NRIPS)
 #define cpu_has_svm_cleanbits cpu_has_svm_feature(SVM_FEATURE_VMCBCLEAN)
+#define cpu_has_svm_flushasid cpu_has_svm_feature(SVM_FEATURE_FLUSHBYASID)
 #define cpu_has_svm_decode    cpu_has_svm_feature(SVM_FEATURE_DECODEASSISTS)
 #define cpu_has_pause_filter  cpu_has_svm_feature(SVM_FEATURE_PAUSEFILTER)
 #define cpu_has_tsc_ratio     cpu_has_svm_feature(SVM_FEATURE_TSCRATEMSR)