pkgsrc-WIP-changes archive

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

qemu-nvmm: Imported to pkgsrc



Module Name:	pkgsrc-wip
Committed By:	Kamil Rytarowski <n54%gmx.com@localhost>
Pushed By:	kamil
Date:		Thu Feb 6 23:09:32 2020 +0100
Changeset:	088f7427ffb27e512c3167f69b63a3bde1da87d8

Removed Files:
	qemu-nvmm/DESCR
	qemu-nvmm/Makefile
	qemu-nvmm/PLIST
	qemu-nvmm/distinfo
	qemu-nvmm/files/Makefile.multinode-NetBSD
	qemu-nvmm/files/accel_stubs_nvmm-stub.c
	qemu-nvmm/files/include_sysemu_nvmm.h
	qemu-nvmm/files/target_i386_nvmm-all.c
	qemu-nvmm/options.mk
	qemu-nvmm/patches/patch-Makefile
	qemu-nvmm/patches/patch-audio_audio.c
	qemu-nvmm/patches/patch-contrib_ivshmem-client_ivshmem-client.c
	qemu-nvmm/patches/patch-contrib_ivshmem-server_ivshmem-server.c
	qemu-nvmm/patches/patch-hw_core_uboot__image.h
	qemu-nvmm/patches/patch-hw_display_omap__dss.c
	qemu-nvmm/patches/patch-hw_net_etraxfs__eth.c
	qemu-nvmm/patches/patch-hw_net_xilinx__axienet.c
	qemu-nvmm/patches/patch-hw_usb_dev-mtp.c
	qemu-nvmm/patches/patch-nvmm-support
	qemu-nvmm/patches/patch-roms_u-boot_tools_imx8m__image.sh

Log Message:
qemu-nvmm: Imported to pkgsrc

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=088f7427ffb27e512c3167f69b63a3bde1da87d8

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 qemu-nvmm/DESCR                                    |   13 -
 qemu-nvmm/Makefile                                 |  128 --
 qemu-nvmm/PLIST                                    |  190 ---
 qemu-nvmm/distinfo                                 |   17 -
 qemu-nvmm/files/Makefile.multinode-NetBSD          |   59 -
 qemu-nvmm/files/accel_stubs_nvmm-stub.c            |   43 -
 qemu-nvmm/files/include_sysemu_nvmm.h              |   35 -
 qemu-nvmm/files/target_i386_nvmm-all.c             | 1218 --------------------
 qemu-nvmm/options.mk                               |   29 -
 qemu-nvmm/patches/patch-Makefile                   |   12 -
 qemu-nvmm/patches/patch-audio_audio.c              |   16 -
 .../patch-contrib_ivshmem-client_ivshmem-client.c  |   37 -
 .../patch-contrib_ivshmem-server_ivshmem-server.c  |   36 -
 qemu-nvmm/patches/patch-hw_core_uboot__image.h     |   12 -
 qemu-nvmm/patches/patch-hw_display_omap__dss.c     |   30 -
 qemu-nvmm/patches/patch-hw_net_etraxfs__eth.c      |   25 -
 qemu-nvmm/patches/patch-hw_net_xilinx__axienet.c   |   16 -
 qemu-nvmm/patches/patch-hw_usb_dev-mtp.c           |   27 -
 qemu-nvmm/patches/patch-nvmm-support               |  287 -----
 .../patch-roms_u-boot_tools_imx8m__image.sh        |   24 -
 20 files changed, 2254 deletions(-)

diffs:
diff --git a/qemu-nvmm/DESCR b/qemu-nvmm/DESCR
deleted file mode 100644
index 6aac387b36..0000000000
--- a/qemu-nvmm/DESCR
+++ /dev/null
@@ -1,13 +0,0 @@
-QEMU is a FAST! processor emulator using dynamic translation to achieve
-good emulation speed, QEMU has two operating modes:
-
-    * Full system emulation. In this mode, QEMU emulates a full system
-      (for example a PC), including a processor and various peripherals.
-      It can be used to launch different Operating Systems without rebooting
-      the PC or to debug system code.
-    * User mode emulation (Linux host only). In this mode, QEMU can launch
-      Linux processes compiled for one CPU on another CPU. It can be used
-      to launch the Wine Windows API emulator or to ease cross-compilation
-      and cross-debugging.
-
-This variant is patched to use NetBSD's NVMM acceleration.
diff --git a/qemu-nvmm/Makefile b/qemu-nvmm/Makefile
deleted file mode 100644
index 21c20bca01..0000000000
--- a/qemu-nvmm/Makefile
+++ /dev/null
@@ -1,128 +0,0 @@
-# $NetBSD: Makefile,v 1.200 2019/01/31 13:39:10 martin Exp $
-
-DISTNAME=	qemu-4.1.0
-PKGNAME=	${DISTNAME:S/qemu/qemu-nvmm/}
-CATEGORIES=	emulators
-MASTER_SITES=	https://download.qemu.org/
-EXTRACT_SUFX=	.tar.xz
-
-MAINTAINER=	pkgsrc-users%NetBSD.org@localhost
-HOMEPAGE=	http://www.qemu-project.org/
-COMMENT=	CPU emulator using dynamic translation
-LICENSE=	gnu-gpl-v2 AND gnu-lgpl-v2.1 AND mit AND modified-bsd
-
-USE_CURSES=		resize_term wide
-USE_LANGUAGES+=		c c++
-USE_TOOLS+=		bison flex gmake makeinfo perl:build pod2man pkg-config
-FAKE_NCURSES=		yes
-UNLIMIT_RESOURCES=	datasize
-HAS_CONFIGURE=		yes
-
-GMAKE_REQD=		4.1 # needed for docs
-
-PYTHON_VERSIONED_DEPENDENCIES=	sphinx:tool
-
-SUBST_CLASSES+=			prefix
-SUBST_STAGE.prefix=		pre-configure
-SUBST_MESSAGE.prefix=		Setting PREFIX
-SUBST_FILES.prefix+=		configure
-SUBST_VARS.prefix+=		PREFIX
-
-SUBST_CLASSES+=			sphinx-build
-SUBST_STAGE.sphinx-build=	pre-configure
-SUBST_MESSAGE.sphinx-build=	Fix hardcoded sphinx-build
-SUBST_FILES.sphinx-build+=	Makefile configure
-SUBST_FILES.sphinx-build+=	roms/skiboot/doc/Makefile
-SUBST_FILES.sphinx-build+=	roms/u-boot/Documentation/Makefile
-SUBST_SED.sphinx-build+=	-e 's/sphinx-build/sphinx-build-${PYVERSSUFFIX}/g'
-
-.include "options.mk"
-
-.include "../../mk/bsd.prefs.mk"
-
-CONFIGURE_ARGS+=	--prefix=${PREFIX}
-CONFIGURE_ARGS+=	--interp-prefix=${PREFIX}/share/qemu
-CONFIGURE_ARGS+=	--sysconfdir=${PKG_SYSCONFDIR}
-CONFIGURE_ARGS+=	--python=${PYTHONBIN}
-CONFIGURE_ARGS+=	--smbd=${PREFIX}/sbin/smbd
-CONFIGURE_ARGS+=	--mandir=${PREFIX}/${PKGMANDIR}
-CONFIGURE_ARGS+=	--enable-curses
-CONFIGURE_ARGS+=	--enable-docs
-CONFIGURE_ARGS+=	--enable-jemalloc
-CONFIGURE_ARGS+=	--disable-opengl
-CONFIGURE_ARGS+=	--target-list=x86_64-softmmu
-CONFIGURE_ARGS+=	--enable-nvmm
-CONFIGURE_ENV+=		mansuffix=/${PKGMANDIR}
-
-.if defined(PKGSRC_USE_SSP)
-# do not add flags to everything
-PKGSRC_USE_SSP=		no
-CONFIGURE_ARGS+=	--enable-stack-protector
-.endif
-
-NOT_PAX_MPROTECT_SAFE+=	bin/qemu-system-x86_64
-
-PKG_SYSCONFSUBDIR=	qemu
-
-REPLACE_PERL+=		scripts/texi2pod.pl
-
-INSTALLATION_DIRS=	${PKGMANDIR}/man1 share/doc/qemu
-
-UE_ARCHS+=		x86_64
-
-.if ${OPSYS} == "NetBSD"
-USER_EMUL=		i386 x86_64 sparc sparc64
-PLIST.nbd=		YES
-.elif !empty(OPSYS:M*BSD) || ${OPSYS} == "DragonFly"
-USER_EMUL=		i386 x86_64 sparc sparc64
-PLIST.nbd=		YES
-.elif ${OPSYS} == "Darwin"
-USER_EMUL=
-CONFIGURE_ARGS+=	--disable-bsd-user
-PLIST.nbd=		YES
-.elif ${OPSYS} == "Linux"
-USER_EMUL=		${UE_ARCHS}
-PLIST.nbd=		YES
-PLIST.ivshmem=		YES
-.elif !empty(MACHINE_PLATFORM:MSunOS-5.11-*)
-PLIST.nbd=		YES
-CONFIGURE_ARGS+=	--disable-coroutine-pool
-.endif
-
-PLIST_VARS+=		${UE_ARCHS} nbd ivshmem
-.for pvar in ${USER_EMUL}
-PLIST.${pvar}=		YES
-.endfor
-
-TEST_TARGET=		check
-
-pre-configure:
-	${CP} ${FILESDIR}/accel_stubs_nvmm-stub.c ${WRKSRC}/accel/stubs/nvmm-stub.c
-	${CP} ${FILESDIR}/include_sysemu_nvmm.h ${WRKSRC}/include/sysemu/nvmm.h
-	${CP} ${FILESDIR}/target_i386_nvmm-all.c ${WRKSRC}/target/i386/nvmm-all.c
-
-post-install:
-	${INSTALL_DATA} ${FILESDIR}/Makefile.multinode-NetBSD \
-		${DESTDIR}${PREFIX}/share/doc/qemu/
-
-# On Darwin, qemu uses Cocoa and CoreAudio
-.if ${OPSYS} != "Darwin"
-.include "../../mk/oss.buildlink3.mk"
-.endif
-.include "../../archivers/lzo/buildlink3.mk"
-.include "../../devel/glib2/buildlink3.mk"
-.include "../../devel/jemalloc/buildlink3.mk"
-.include "../../devel/snappy/buildlink3.mk"
-.include "../../devel/zlib/buildlink3.mk"
-.include "../../graphics/hicolor-icon-theme/buildlink3.mk"
-.include "../../graphics/png/buildlink3.mk"
-.include "../../lang/python/extension.mk"
-.include "../../lang/python/versioned_dependencies.mk"
-.include "../../security/libgcrypt/buildlink3.mk"
-.include "../../www/curl/buildlink3.mk"
-.include "../../x11/libxkbcommon/buildlink3.mk"
-.include "../../x11/pixman/buildlink3.mk"
-.include "../../mk/curses.buildlink3.mk"
-.include "../../mk/jpeg.buildlink3.mk"
-.include "../../mk/pthread.buildlink3.mk"
-.include "../../mk/bsd.pkg.mk"
diff --git a/qemu-nvmm/PLIST b/qemu-nvmm/PLIST
deleted file mode 100644
index db39366ab2..0000000000
--- a/qemu-nvmm/PLIST
+++ /dev/null
@@ -1,190 +0,0 @@
-@comment $NetBSD$
-bin/elf2dmp
-bin/qemu-edid
-bin/qemu-ga
-bin/qemu-img
-bin/qemu-io
-bin/qemu-keymap
-bin/qemu-nbd
-bin/qemu-system-x86_64
-man/man1/qemu-img.1
-man/man1/qemu.1
-man/man7/qemu-block-drivers.7
-man/man7/qemu-cpu-models.7
-man/man7/qemu-ga-ref.7
-man/man7/qemu-qmp-ref.7
-man/man8/qemu-ga.8
-man/man8/qemu-nbd.8
-share/applications/qemu.desktop
-share/doc/qemu/Makefile.multinode-NetBSD
-share/doc/qemu/interop/.buildinfo
-share/doc/qemu/interop/_static/alabaster.css
-share/doc/qemu/interop/_static/basic.css
-share/doc/qemu/interop/_static/custom.css
-share/doc/qemu/interop/_static/doctools.js
-share/doc/qemu/interop/_static/documentation_options.js
-share/doc/qemu/interop/_static/file.png
-share/doc/qemu/interop/_static/jquery-3.4.1.js
-share/doc/qemu/interop/_static/jquery.js
-share/doc/qemu/interop/_static/language_data.js
-share/doc/qemu/interop/_static/minus.png
-share/doc/qemu/interop/_static/plus.png
-share/doc/qemu/interop/_static/pygments.css
-share/doc/qemu/interop/_static/searchtools.js
-share/doc/qemu/interop/_static/underscore-1.3.1.js
-share/doc/qemu/interop/_static/underscore.js
-share/doc/qemu/interop/bitmaps.html
-share/doc/qemu/interop/genindex.html
-share/doc/qemu/interop/index.html
-share/doc/qemu/interop/live-block-operations.html
-share/doc/qemu/interop/objects.inv
-share/doc/qemu/interop/pr-helper.html
-share/doc/qemu/interop/search.html
-share/doc/qemu/interop/searchindex.js
-share/doc/qemu/interop/vhost-user-gpu.html
-share/doc/qemu/interop/vhost-user.html
-share/doc/qemu/qemu-doc.html
-share/doc/qemu/qemu-doc.txt
-share/doc/qemu/qemu-ga-ref.html
-share/doc/qemu/qemu-ga-ref.txt
-share/doc/qemu/qemu-qmp-ref.html
-share/doc/qemu/qemu-qmp-ref.txt
-share/doc/qemu/specs/.buildinfo
-share/doc/qemu/specs/_static/alabaster.css
-share/doc/qemu/specs/_static/basic.css
-share/doc/qemu/specs/_static/custom.css
-share/doc/qemu/specs/_static/doctools.js
-share/doc/qemu/specs/_static/documentation_options.js
-share/doc/qemu/specs/_static/file.png
-share/doc/qemu/specs/_static/jquery-3.4.1.js
-share/doc/qemu/specs/_static/jquery.js
-share/doc/qemu/specs/_static/language_data.js
-share/doc/qemu/specs/_static/minus.png
-share/doc/qemu/specs/_static/plus.png
-share/doc/qemu/specs/_static/pygments.css
-share/doc/qemu/specs/_static/searchtools.js
-share/doc/qemu/specs/_static/underscore-1.3.1.js
-share/doc/qemu/specs/_static/underscore.js
-share/doc/qemu/specs/genindex.html
-share/doc/qemu/specs/index.html
-share/doc/qemu/specs/objects.inv
-share/doc/qemu/specs/ppc-spapr-xive.html
-share/doc/qemu/specs/ppc-xive.html
-share/doc/qemu/specs/search.html
-share/doc/qemu/specs/searchindex.js
-share/icons/hicolor/128x128/apps/qemu.png
-share/icons/hicolor/16x16/apps/qemu.png
-share/icons/hicolor/24x24/apps/qemu.png
-share/icons/hicolor/256x256/apps/qemu.png
-share/icons/hicolor/32x32/apps/qemu.bmp
-share/icons/hicolor/32x32/apps/qemu.png
-share/icons/hicolor/48x48/apps/qemu.png
-share/icons/hicolor/512x512/apps/qemu.png
-share/icons/hicolor/64x64/apps/qemu.png
-share/icons/hicolor/scalable/apps/qemu.svg
-share/qemu/QEMU,cgthree.bin
-share/qemu/QEMU,tcx.bin
-share/qemu/bamboo.dtb
-share/qemu/bios-256k.bin
-share/qemu/bios.bin
-share/qemu/canyonlands.dtb
-share/qemu/edk2-aarch64-code.fd
-share/qemu/edk2-arm-code.fd
-share/qemu/edk2-arm-vars.fd
-share/qemu/edk2-i386-code.fd
-share/qemu/edk2-i386-secure-code.fd
-share/qemu/edk2-i386-vars.fd
-share/qemu/edk2-licenses.txt
-share/qemu/edk2-x86_64-code.fd
-share/qemu/edk2-x86_64-secure-code.fd
-share/qemu/efi-e1000.rom
-share/qemu/efi-e1000e.rom
-share/qemu/efi-eepro100.rom
-share/qemu/efi-ne2k_pci.rom
-share/qemu/efi-pcnet.rom
-share/qemu/efi-rtl8139.rom
-share/qemu/efi-virtio.rom
-share/qemu/efi-vmxnet3.rom
-share/qemu/firmware/50-edk2-i386-secure.json
-share/qemu/firmware/50-edk2-x86_64-secure.json
-share/qemu/firmware/60-edk2-aarch64.json
-share/qemu/firmware/60-edk2-arm.json
-share/qemu/firmware/60-edk2-i386.json
-share/qemu/firmware/60-edk2-x86_64.json
-share/qemu/hppa-firmware.img
-share/qemu/keymaps/ar
-share/qemu/keymaps/bepo
-share/qemu/keymaps/cz
-share/qemu/keymaps/da
-share/qemu/keymaps/de
-share/qemu/keymaps/de-ch
-share/qemu/keymaps/en-gb
-share/qemu/keymaps/en-us
-share/qemu/keymaps/es
-share/qemu/keymaps/et
-share/qemu/keymaps/fi
-share/qemu/keymaps/fo
-share/qemu/keymaps/fr
-share/qemu/keymaps/fr-be
-share/qemu/keymaps/fr-ca
-share/qemu/keymaps/fr-ch
-share/qemu/keymaps/hr
-share/qemu/keymaps/hu
-share/qemu/keymaps/is
-share/qemu/keymaps/it
-share/qemu/keymaps/ja
-share/qemu/keymaps/lt
-share/qemu/keymaps/lv
-share/qemu/keymaps/mk
-share/qemu/keymaps/nl
-share/qemu/keymaps/no
-share/qemu/keymaps/pl
-share/qemu/keymaps/pt
-share/qemu/keymaps/pt-br
-share/qemu/keymaps/ru
-share/qemu/keymaps/sl
-share/qemu/keymaps/sv
-share/qemu/keymaps/th
-share/qemu/keymaps/tr
-share/qemu/kvmvapic.bin
-share/qemu/linuxboot.bin
-share/qemu/linuxboot_dma.bin
-share/qemu/multiboot.bin
-share/qemu/openbios-ppc
-share/qemu/openbios-sparc32
-share/qemu/openbios-sparc64
-share/qemu/opensbi-riscv32-virt-fw_jump.bin
-share/qemu/opensbi-riscv64-sifive_u-fw_jump.bin
-share/qemu/opensbi-riscv64-virt-fw_jump.bin
-share/qemu/palcode-clipper
-share/qemu/petalogix-ml605.dtb
-share/qemu/petalogix-s3adsp1800.dtb
-share/qemu/ppc_rom.bin
-share/qemu/pvh.bin
-share/qemu/pxe-e1000.rom
-share/qemu/pxe-eepro100.rom
-share/qemu/pxe-ne2k_pci.rom
-share/qemu/pxe-pcnet.rom
-share/qemu/pxe-rtl8139.rom
-share/qemu/pxe-virtio.rom
-share/qemu/qemu-nsis.bmp
-share/qemu/qemu_vga.ndrv
-share/qemu/s390-ccw.img
-share/qemu/s390-netboot.img
-share/qemu/sgabios.bin
-share/qemu/skiboot.lid
-share/qemu/slof.bin
-share/qemu/spapr-rtas.bin
-share/qemu/trace-events-all
-share/qemu/u-boot-sam460-20100605.bin
-share/qemu/u-boot.e500
-share/qemu/vgabios-ati.bin
-share/qemu/vgabios-bochs-display.bin
-share/qemu/vgabios-cirrus.bin
-share/qemu/vgabios-qxl.bin
-share/qemu/vgabios-ramfb.bin
-share/qemu/vgabios-stdvga.bin
-share/qemu/vgabios-virtio.bin
-share/qemu/vgabios-vmware.bin
-share/qemu/vgabios.bin
-@pkgdir var/run
diff --git a/qemu-nvmm/distinfo b/qemu-nvmm/distinfo
deleted file mode 100644
index 54c1797573..0000000000
--- a/qemu-nvmm/distinfo
+++ /dev/null
@@ -1,17 +0,0 @@
-$NetBSD: distinfo,v 1.141 2019/01/31 13:39:10 martin Exp $
-
-SHA1 (qemu-4.1.0.tar.xz) = 29c99be326cd8f3b2b75d7fec9066ca24854df1e
-RMD160 (qemu-4.1.0.tar.xz) = 7f95536777579cec1793c894089a2f72bb7f09d8
-SHA512 (qemu-4.1.0.tar.xz) = 82fd51702a7b9b1b00b2f1bd3b4a832b80249018dbba1add0b0a73e7d4bee452afd45574b4d8df7ce4477d8711f3bda4ca072a1a6de25895c93eb21cf78fc4b2
-Size (qemu-4.1.0.tar.xz) = 54001708 bytes
-SHA1 (patch-Makefile) = 85d24d842ad2f7e1e2ec6f0e0e3268c21ef9bf0d
-SHA1 (patch-audio_audio.c) = 98a1de2fd48638886b5d16f6a61dc72910e98b41
-SHA1 (patch-contrib_ivshmem-client_ivshmem-client.c) = 40c8751607cbf66a37e4c4e08f2664b864e2e984
-SHA1 (patch-contrib_ivshmem-server_ivshmem-server.c) = d8f53432b5752f4263dc4ef96108a976a05147a3
-SHA1 (patch-hw_core_uboot__image.h) = 17eef02349343c5fcfb7a4069cb6f8fd11efcb59
-SHA1 (patch-hw_display_omap__dss.c) = 6b13242f28e32346bc70548c216c578d98fd3420
-SHA1 (patch-hw_net_etraxfs__eth.c) = e5dd1661d60dbcd27b332403e0843500ba9544bc
-SHA1 (patch-hw_net_xilinx__axienet.c) = ebcd2676d64ce6f31e4a8c976d4fdf530ad5e8b7
-SHA1 (patch-hw_usb_dev-mtp.c) = 0f9034fb3904e5d5e3b98d24b94e054181687d95
-SHA1 (patch-nvmm-support) = f164c48a25367d751d77faa87962321b0b086862
-SHA1 (patch-roms_u-boot_tools_imx8m__image.sh) = e4c452062f40569e33aa93eec4a65bd3af2e74fc
diff --git a/qemu-nvmm/files/Makefile.multinode-NetBSD b/qemu-nvmm/files/Makefile.multinode-NetBSD
deleted file mode 100644
index f4313832eb..0000000000
--- a/qemu-nvmm/files/Makefile.multinode-NetBSD
+++ /dev/null
@@ -1,59 +0,0 @@
-# $Id: Makefile.multinode-NetBSD,v 1.4 2012/06/07 21:23:46 ryoon Exp $
-# Source: http://mail-index.NetBSD.org/netbsd-help/2005/03/25/0005.html
-#
-# Starts up two qemu instances and networks bridges them to the local
-# ethernet (ETHER_IF}.  Works best with NetBSD configured to use serial
-# consoles in DISK[12]
-#
-# Usage:
-#	sudo make netbsd1
-#	sudo make netbsd2
-#
-#  - Hubert Feyrer <hubert%feyrer.de@localhost>
-#
-
-#NETBSD_NOGFX=
-NETBSD_NOGFX=		-nographic
-
-ETHER_IF=	tlp0
-QEMU_RAM=	20
-DISK1=		harddisk.netbsd1
-DISK2=		harddisk.netbsd2
-
-
-all: netbsd1 netbsd2
-
-netbsd1: bridge 
-	ifconfig tap1 create up	     || echo tap1: already there
-	brconfig bridge0 add tap1 up || echo tap1: already on bridge0
-	brconfig bridge0 -learn tap1 # real hub mode, step 1b
-	brconfig bridge0 flush	# real hub more, step 2
-	qemu \	
-		-m ${QEMU_RAM} \
-		${NETBSD_NOGFX} \
-		-boot c \
-		-net tap,fd=3,ifname=tap1 3<>/dev/tap1 \
-		-net nic,macaddr=de:ad:be:ef:00:01 \
-		${DISK1}
-	brconfig bridge0 delete tap1 
-	ifconfig tap1 destroy
-
-netbsd2: bridge
-	ifconfig tap2 create up	     || echo tap2: already there
-	brconfig bridge0 add tap2 up || echo tap2: already on bridge0
-	brconfig bridge0 -learn tap2 # real hub mode, step 1c
-	brconfig bridge0 flush	     # real hub mode, step 2
-	qemu \
-		-m ${QEMU_RAM} \
-		${NETBSD_NOGFX} \
-		-boot c \
-		-net tap,fd=3,ifname=tap2 3<>/dev/tap2 \
-		-net nic,macaddr=de:ad:be:ef:00:02 \
-		${DISK2}
-	brconfig bridge0 delete tap2
-	ifconfig tap2 destroy
-	
-bridge:
-	ifconfig bridge0 create	  || echo bridge0: already there
-	brconfig bridge0 add ${ETHER_IF} || echo bridge0: ${ETHER_IF} already there
-	brconfig bridge0 -learn ${ETHER_IF} # real hub mode, step 1a
diff --git a/qemu-nvmm/files/accel_stubs_nvmm-stub.c b/qemu-nvmm/files/accel_stubs_nvmm-stub.c
deleted file mode 100644
index c2208b84a3..0000000000
--- a/qemu-nvmm/files/accel_stubs_nvmm-stub.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2018-2019 Maxime Villard, All rights reserved.
- *
- * NetBSD Virtual Machine Monitor (NVMM) accelerator stub.
- *
- * This work is licensed under the terms of the GNU GPL, version 2 or later.
- * See the COPYING file in the top-level directory.
- */
-
-#include "qemu/osdep.h"
-#include "qemu-common.h"
-#include "cpu.h"
-#include "sysemu/nvmm.h"
-
-int nvmm_init_vcpu(CPUState *cpu)
-{
-    return -1;
-}
-
-int nvmm_vcpu_exec(CPUState *cpu)
-{
-    return -1;
-}
-
-void nvmm_destroy_vcpu(CPUState *cpu)
-{
-}
-
-void nvmm_cpu_synchronize_state(CPUState *cpu)
-{
-}
-
-void nvmm_cpu_synchronize_post_reset(CPUState *cpu)
-{
-}
-
-void nvmm_cpu_synchronize_post_init(CPUState *cpu)
-{
-}
-
-void nvmm_cpu_synchronize_pre_loadvm(CPUState *cpu)
-{
-}
diff --git a/qemu-nvmm/files/include_sysemu_nvmm.h b/qemu-nvmm/files/include_sysemu_nvmm.h
deleted file mode 100644
index 10496f3980..0000000000
--- a/qemu-nvmm/files/include_sysemu_nvmm.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2018-2019 Maxime Villard, All rights reserved.
- *
- * NetBSD Virtual Machine Monitor (NVMM) accelerator support.
- *
- * This work is licensed under the terms of the GNU GPL, version 2 or later.
- * See the COPYING file in the top-level directory.
- */
-
-#ifndef QEMU_NVMM_H
-#define QEMU_NVMM_H
-
-#include "config-host.h"
-#include "qemu-common.h"
-
-int nvmm_init_vcpu(CPUState *);
-int nvmm_vcpu_exec(CPUState *);
-void nvmm_destroy_vcpu(CPUState *);
-
-void nvmm_cpu_synchronize_state(CPUState *);
-void nvmm_cpu_synchronize_post_reset(CPUState *);
-void nvmm_cpu_synchronize_post_init(CPUState *);
-void nvmm_cpu_synchronize_pre_loadvm(CPUState *);
-
-#ifdef CONFIG_NVMM
-
-int nvmm_enabled(void);
-
-#else /* CONFIG_NVMM */
-
-#define nvmm_enabled() (0)
-
-#endif /* CONFIG_NVMM */
-
-#endif /* CONFIG_NVMM */
diff --git a/qemu-nvmm/files/target_i386_nvmm-all.c b/qemu-nvmm/files/target_i386_nvmm-all.c
deleted file mode 100644
index d70e9b5027..0000000000
--- a/qemu-nvmm/files/target_i386_nvmm-all.c
+++ /dev/null
@@ -1,1218 +0,0 @@
-/*
- * Copyright (c) 2018-2019 Maxime Villard, All rights reserved.
- *
- * NetBSD Virtual Machine Monitor (NVMM) accelerator for QEMU.
- *
- * This work is licensed under the terms of the GNU GPL, version 2 or later.
- * See the COPYING file in the top-level directory.
- */
-
-#include "qemu/osdep.h"
-#include "cpu.h"
-#include "exec/address-spaces.h"
-#include "exec/ioport.h"
-#include "qemu-common.h"
-#include "strings.h"
-#include "sysemu/accel.h"
-#include "sysemu/nvmm.h"
-#include "sysemu/sysemu.h"
-#include "sysemu/cpus.h"
-#include "qemu/main-loop.h"
-#include "hw/boards.h"
-#include "qemu/error-report.h"
-#include "qemu/queue.h"
-#include "qapi/error.h"
-#include "migration/blocker.h"
-
-#include <nvmm.h>
-
-struct qemu_vcpu {
-    struct nvmm_vcpu vcpu;
-    uint8_t tpr;
-    bool stop;
-
-    /* Window-exiting for INTs/NMIs. */
-    bool int_window_exit;
-    bool nmi_window_exit;
-
-    /* The guest is in an interrupt shadow (POP SS, etc). */
-    bool int_shadow;
-};
-
-struct qemu_machine {
-    struct nvmm_capability cap;
-    struct nvmm_machine mach;
-};
-
-/* -------------------------------------------------------------------------- */
-
-static bool nvmm_allowed = false;
-static struct qemu_machine qemu_mach;
-
-static struct qemu_vcpu *
-get_qemu_vcpu(CPUState *cpu)
-{
-    return (struct qemu_vcpu *)cpu->hax_vcpu;
-}
-
-static struct nvmm_machine *
-get_nvmm_mach(void)
-{
-    return &qemu_mach.mach;
-}
-
-/* -------------------------------------------------------------------------- */
-
-static void
-nvmm_set_segment(struct nvmm_x64_state_seg *nseg, const SegmentCache *qseg)
-{
-    uint32_t attrib = qseg->flags;
-
-    nseg->selector = qseg->selector;
-    nseg->limit = qseg->limit;
-    nseg->base = qseg->base;
-    nseg->attrib.type = __SHIFTOUT(attrib, DESC_TYPE_MASK);
-    nseg->attrib.s = __SHIFTOUT(attrib, DESC_S_MASK);
-    nseg->attrib.dpl = __SHIFTOUT(attrib, DESC_DPL_MASK);
-    nseg->attrib.p = __SHIFTOUT(attrib, DESC_P_MASK);
-    nseg->attrib.avl = __SHIFTOUT(attrib, DESC_AVL_MASK);
-    nseg->attrib.l = __SHIFTOUT(attrib, DESC_L_MASK);
-    nseg->attrib.def = __SHIFTOUT(attrib, DESC_B_MASK);
-    nseg->attrib.g = __SHIFTOUT(attrib, DESC_G_MASK);
-}
-
-static void
-nvmm_set_registers(CPUState *cpu)
-{
-    struct CPUX86State *env = (CPUArchState *)cpu->env_ptr;
-    struct nvmm_machine *mach = get_nvmm_mach();
-    struct qemu_vcpu *qcpu = get_qemu_vcpu(cpu);
-    struct nvmm_vcpu *vcpu = &qcpu->vcpu;
-    struct nvmm_x64_state *state = vcpu->state;
-    uint64_t bitmap;
-    size_t i;
-    int ret;
-
-    assert(cpu_is_stopped(cpu) || qemu_cpu_is_self(cpu));
-
-    /* GPRs. */
-    state->gprs[NVMM_X64_GPR_RAX] = env->regs[R_EAX];
-    state->gprs[NVMM_X64_GPR_RCX] = env->regs[R_ECX];
-    state->gprs[NVMM_X64_GPR_RDX] = env->regs[R_EDX];
-    state->gprs[NVMM_X64_GPR_RBX] = env->regs[R_EBX];
-    state->gprs[NVMM_X64_GPR_RSP] = env->regs[R_ESP];
-    state->gprs[NVMM_X64_GPR_RBP] = env->regs[R_EBP];
-    state->gprs[NVMM_X64_GPR_RSI] = env->regs[R_ESI];
-    state->gprs[NVMM_X64_GPR_RDI] = env->regs[R_EDI];
-    state->gprs[NVMM_X64_GPR_R8]  = env->regs[R_R8];
-    state->gprs[NVMM_X64_GPR_R9]  = env->regs[R_R9];
-    state->gprs[NVMM_X64_GPR_R10] = env->regs[R_R10];
-    state->gprs[NVMM_X64_GPR_R11] = env->regs[R_R11];
-    state->gprs[NVMM_X64_GPR_R12] = env->regs[R_R12];
-    state->gprs[NVMM_X64_GPR_R13] = env->regs[R_R13];
-    state->gprs[NVMM_X64_GPR_R14] = env->regs[R_R14];
-    state->gprs[NVMM_X64_GPR_R15] = env->regs[R_R15];
-
-    /* RIP and RFLAGS. */
-    state->gprs[NVMM_X64_GPR_RIP] = env->eip;
-    state->gprs[NVMM_X64_GPR_RFLAGS] = env->eflags;
-
-    /* Segments. */
-    nvmm_set_segment(&state->segs[NVMM_X64_SEG_CS], &env->segs[R_CS]);
-    nvmm_set_segment(&state->segs[NVMM_X64_SEG_DS], &env->segs[R_DS]);
-    nvmm_set_segment(&state->segs[NVMM_X64_SEG_ES], &env->segs[R_ES]);
-    nvmm_set_segment(&state->segs[NVMM_X64_SEG_FS], &env->segs[R_FS]);
-    nvmm_set_segment(&state->segs[NVMM_X64_SEG_GS], &env->segs[R_GS]);
-    nvmm_set_segment(&state->segs[NVMM_X64_SEG_SS], &env->segs[R_SS]);
-
-    /* Special segments. */
-    nvmm_set_segment(&state->segs[NVMM_X64_SEG_GDT], &env->gdt);
-    nvmm_set_segment(&state->segs[NVMM_X64_SEG_LDT], &env->ldt);
-    nvmm_set_segment(&state->segs[NVMM_X64_SEG_TR], &env->tr);
-    nvmm_set_segment(&state->segs[NVMM_X64_SEG_IDT], &env->idt);
-
-    /* Control registers. */
-    state->crs[NVMM_X64_CR_CR0] = env->cr[0];
-    state->crs[NVMM_X64_CR_CR2] = env->cr[2];
-    state->crs[NVMM_X64_CR_CR3] = env->cr[3];
-    state->crs[NVMM_X64_CR_CR4] = env->cr[4];
-    state->crs[NVMM_X64_CR_CR8] = qcpu->tpr;
-    state->crs[NVMM_X64_CR_XCR0] = env->xcr0;
-
-    /* Debug registers. */
-    state->drs[NVMM_X64_DR_DR0] = env->dr[0];
-    state->drs[NVMM_X64_DR_DR1] = env->dr[1];
-    state->drs[NVMM_X64_DR_DR2] = env->dr[2];
-    state->drs[NVMM_X64_DR_DR3] = env->dr[3];
-    state->drs[NVMM_X64_DR_DR6] = env->dr[6];
-    state->drs[NVMM_X64_DR_DR7] = env->dr[7];
-
-    /* FPU. */
-    state->fpu.fx_cw = env->fpuc;
-    state->fpu.fx_sw = (env->fpus & ~0x3800) | ((env->fpstt & 0x7) << 11);
-    state->fpu.fx_tw = 0;
-    for (i = 0; i < 8; i++) {
-        state->fpu.fx_tw |= (!env->fptags[i]) << i;
-    }
-    state->fpu.fx_opcode = env->fpop;
-    state->fpu.fx_ip.fa_64 = env->fpip;
-    state->fpu.fx_dp.fa_64 = env->fpdp;
-    state->fpu.fx_mxcsr = env->mxcsr;
-    state->fpu.fx_mxcsr_mask = 0x0000FFFF;
-    assert(sizeof(state->fpu.fx_87_ac) == sizeof(env->fpregs));
-    memcpy(state->fpu.fx_87_ac, env->fpregs, sizeof(env->fpregs));
-    for (i = 0; i < 16; i++) {
-        memcpy(&state->fpu.fx_xmm[i].xmm_bytes[0],
-            &env->xmm_regs[i].ZMM_Q(0), 8);
-        memcpy(&state->fpu.fx_xmm[i].xmm_bytes[8],
-            &env->xmm_regs[i].ZMM_Q(1), 8);
-    }
-
-    /* MSRs. */
-    state->msrs[NVMM_X64_MSR_EFER] = env->efer;
-    state->msrs[NVMM_X64_MSR_STAR] = env->star;
-#ifdef TARGET_X86_64
-    state->msrs[NVMM_X64_MSR_LSTAR] = env->lstar;
-    state->msrs[NVMM_X64_MSR_CSTAR] = env->cstar;
-    state->msrs[NVMM_X64_MSR_SFMASK] = env->fmask;
-    state->msrs[NVMM_X64_MSR_KERNELGSBASE] = env->kernelgsbase;
-#endif
-    state->msrs[NVMM_X64_MSR_SYSENTER_CS]  = env->sysenter_cs;
-    state->msrs[NVMM_X64_MSR_SYSENTER_ESP] = env->sysenter_esp;
-    state->msrs[NVMM_X64_MSR_SYSENTER_EIP] = env->sysenter_eip;
-    state->msrs[NVMM_X64_MSR_PAT] = env->pat;
-    state->msrs[NVMM_X64_MSR_TSC] = env->tsc;
-
-    bitmap =
-        NVMM_X64_STATE_SEGS |
-        NVMM_X64_STATE_GPRS |
-        NVMM_X64_STATE_CRS  |
-        NVMM_X64_STATE_DRS  |
-        NVMM_X64_STATE_MSRS |
-        NVMM_X64_STATE_FPU;
-
-    ret = nvmm_vcpu_setstate(mach, vcpu, bitmap);
-    if (ret == -1) {
-        error_report("NVMM: Failed to set virtual processor context,"
-            " error=%d", errno);
-    }
-}
-
-static void
-nvmm_get_segment(SegmentCache *qseg, const struct nvmm_x64_state_seg *nseg)
-{
-    qseg->selector = nseg->selector;
-    qseg->limit = nseg->limit;
-    qseg->base = nseg->base;
-
-    qseg->flags =
-        __SHIFTIN((uint32_t)nseg->attrib.type, DESC_TYPE_MASK) |
-        __SHIFTIN((uint32_t)nseg->attrib.s, DESC_S_MASK) |
-        __SHIFTIN((uint32_t)nseg->attrib.dpl, DESC_DPL_MASK) |
-        __SHIFTIN((uint32_t)nseg->attrib.p, DESC_P_MASK) |
-        __SHIFTIN((uint32_t)nseg->attrib.avl, DESC_AVL_MASK) |
-        __SHIFTIN((uint32_t)nseg->attrib.l, DESC_L_MASK) |
-        __SHIFTIN((uint32_t)nseg->attrib.def, DESC_B_MASK) |
-        __SHIFTIN((uint32_t)nseg->attrib.g, DESC_G_MASK);
-}
-
-static void
-nvmm_get_registers(CPUState *cpu)
-{
-    struct CPUX86State *env = (CPUArchState *)cpu->env_ptr;
-    struct nvmm_machine *mach = get_nvmm_mach();
-    struct qemu_vcpu *qcpu = get_qemu_vcpu(cpu);
-    struct nvmm_vcpu *vcpu = &qcpu->vcpu;
-    X86CPU *x86_cpu = X86_CPU(cpu);
-    struct nvmm_x64_state *state = vcpu->state;
-    uint64_t bitmap, tpr;
-    size_t i;
-    int ret;
-
-    assert(cpu_is_stopped(cpu) || qemu_cpu_is_self(cpu));
-
-    bitmap =
-        NVMM_X64_STATE_SEGS |
-        NVMM_X64_STATE_GPRS |
-        NVMM_X64_STATE_CRS  |
-        NVMM_X64_STATE_DRS  |
-        NVMM_X64_STATE_MSRS |
-        NVMM_X64_STATE_FPU;
-
-    ret = nvmm_vcpu_getstate(mach, vcpu, bitmap);
-    if (ret == -1) {
-        error_report("NVMM: Failed to get virtual processor context,"
-            " error=%d", errno);
-    }
-
-    /* GPRs. */
-    env->regs[R_EAX] = state->gprs[NVMM_X64_GPR_RAX];
-    env->regs[R_ECX] = state->gprs[NVMM_X64_GPR_RCX];
-    env->regs[R_EDX] = state->gprs[NVMM_X64_GPR_RDX];
-    env->regs[R_EBX] = state->gprs[NVMM_X64_GPR_RBX];
-    env->regs[R_ESP] = state->gprs[NVMM_X64_GPR_RSP];
-    env->regs[R_EBP] = state->gprs[NVMM_X64_GPR_RBP];
-    env->regs[R_ESI] = state->gprs[NVMM_X64_GPR_RSI];
-    env->regs[R_EDI] = state->gprs[NVMM_X64_GPR_RDI];
-    env->regs[R_R8]  = state->gprs[NVMM_X64_GPR_R8];
-    env->regs[R_R9]  = state->gprs[NVMM_X64_GPR_R9];
-    env->regs[R_R10] = state->gprs[NVMM_X64_GPR_R10];
-    env->regs[R_R11] = state->gprs[NVMM_X64_GPR_R11];
-    env->regs[R_R12] = state->gprs[NVMM_X64_GPR_R12];
-    env->regs[R_R13] = state->gprs[NVMM_X64_GPR_R13];
-    env->regs[R_R14] = state->gprs[NVMM_X64_GPR_R14];
-    env->regs[R_R15] = state->gprs[NVMM_X64_GPR_R15];
-
-    /* RIP and RFLAGS. */
-    env->eip = state->gprs[NVMM_X64_GPR_RIP];
-    env->eflags = state->gprs[NVMM_X64_GPR_RFLAGS];
-
-    /* Segments. */
-    nvmm_get_segment(&env->segs[R_ES], &state->segs[NVMM_X64_SEG_ES]);
-    nvmm_get_segment(&env->segs[R_CS], &state->segs[NVMM_X64_SEG_CS]);
-    nvmm_get_segment(&env->segs[R_SS], &state->segs[NVMM_X64_SEG_SS]);
-    nvmm_get_segment(&env->segs[R_DS], &state->segs[NVMM_X64_SEG_DS]);
-    nvmm_get_segment(&env->segs[R_FS], &state->segs[NVMM_X64_SEG_FS]);
-    nvmm_get_segment(&env->segs[R_GS], &state->segs[NVMM_X64_SEG_GS]);
-
-    /* Special segments. */
-    nvmm_get_segment(&env->gdt, &state->segs[NVMM_X64_SEG_GDT]);
-    nvmm_get_segment(&env->ldt, &state->segs[NVMM_X64_SEG_LDT]);
-    nvmm_get_segment(&env->tr, &state->segs[NVMM_X64_SEG_TR]);
-    nvmm_get_segment(&env->idt, &state->segs[NVMM_X64_SEG_IDT]);
-
-    /* Control registers. */
-    env->cr[0] = state->crs[NVMM_X64_CR_CR0];
-    env->cr[2] = state->crs[NVMM_X64_CR_CR2];
-    env->cr[3] = state->crs[NVMM_X64_CR_CR3];
-    env->cr[4] = state->crs[NVMM_X64_CR_CR4];
-    tpr = state->crs[NVMM_X64_CR_CR8];
-    if (tpr != qcpu->tpr) {
-        qcpu->tpr = tpr;
-        cpu_set_apic_tpr(x86_cpu->apic_state, tpr);
-    }
-    env->xcr0 = state->crs[NVMM_X64_CR_XCR0];
-
-    /* Debug registers. */
-    env->dr[0] = state->drs[NVMM_X64_DR_DR0];
-    env->dr[1] = state->drs[NVMM_X64_DR_DR1];
-    env->dr[2] = state->drs[NVMM_X64_DR_DR2];
-    env->dr[3] = state->drs[NVMM_X64_DR_DR3];
-    env->dr[6] = state->drs[NVMM_X64_DR_DR6];
-    env->dr[7] = state->drs[NVMM_X64_DR_DR7];
-
-    /* FPU. */
-    env->fpuc = state->fpu.fx_cw;
-    env->fpstt = (state->fpu.fx_sw >> 11) & 0x7;
-    env->fpus = state->fpu.fx_sw & ~0x3800;
-    for (i = 0; i < 8; i++) {
-        env->fptags[i] = !((state->fpu.fx_tw >> i) & 1);
-    }
-    env->fpop = state->fpu.fx_opcode;
-    env->fpip = state->fpu.fx_ip.fa_64;
-    env->fpdp = state->fpu.fx_dp.fa_64;
-    env->mxcsr = state->fpu.fx_mxcsr;
-    assert(sizeof(state->fpu.fx_87_ac) == sizeof(env->fpregs));
-    memcpy(env->fpregs, state->fpu.fx_87_ac, sizeof(env->fpregs));
-    for (i = 0; i < 16; i++) {
-        memcpy(&env->xmm_regs[i].ZMM_Q(0),
-            &state->fpu.fx_xmm[i].xmm_bytes[0], 8);
-        memcpy(&env->xmm_regs[i].ZMM_Q(1),
-            &state->fpu.fx_xmm[i].xmm_bytes[8], 8);
-    }
-
-    /* MSRs. */
-    env->efer = state->msrs[NVMM_X64_MSR_EFER];
-    env->star = state->msrs[NVMM_X64_MSR_STAR];
-#ifdef TARGET_X86_64
-    env->lstar = state->msrs[NVMM_X64_MSR_LSTAR];
-    env->cstar = state->msrs[NVMM_X64_MSR_CSTAR];
-    env->fmask = state->msrs[NVMM_X64_MSR_SFMASK];
-    env->kernelgsbase = state->msrs[NVMM_X64_MSR_KERNELGSBASE];
-#endif
-    env->sysenter_cs  = state->msrs[NVMM_X64_MSR_SYSENTER_CS];
-    env->sysenter_esp = state->msrs[NVMM_X64_MSR_SYSENTER_ESP];
-    env->sysenter_eip = state->msrs[NVMM_X64_MSR_SYSENTER_EIP];
-    env->pat = state->msrs[NVMM_X64_MSR_PAT];
-    env->tsc = state->msrs[NVMM_X64_MSR_TSC];
-
-    x86_update_hflags(env);
-}
-
-static bool
-nvmm_can_take_int(CPUState *cpu)
-{
-    struct CPUX86State *env = (CPUArchState *)cpu->env_ptr;
-    struct qemu_vcpu *qcpu = get_qemu_vcpu(cpu);
-    struct nvmm_vcpu *vcpu = &qcpu->vcpu;
-    struct nvmm_machine *mach = get_nvmm_mach();
-
-    if (qcpu->int_window_exit) {
-        return false;
-    }
-
-    if (qcpu->int_shadow || !(env->eflags & IF_MASK)) {
-        struct nvmm_x64_state *state = vcpu->state;
-
-        /* Exit on interrupt window. */
-        nvmm_vcpu_getstate(mach, vcpu, NVMM_X64_STATE_INTR);
-        state->intr.int_window_exiting = 1;
-        nvmm_vcpu_setstate(mach, vcpu, NVMM_X64_STATE_INTR);
-
-        return false;
-    }
-
-    return true;
-}
-
-static bool
-nvmm_can_take_nmi(CPUState *cpu)
-{
-    struct qemu_vcpu *qcpu = get_qemu_vcpu(cpu);
-
-    /*
-     * Contrary to INTs, NMIs always schedule an exit when they are
-     * completed. Therefore, if window-exiting is enabled, it means
-     * NMIs are blocked.
-     */
-    if (qcpu->nmi_window_exit) {
-        return false;
-    }
-
-    return true;
-}
-
-/*
- * Called before the VCPU is run. We inject events generated by the I/O
- * thread, and synchronize the guest TPR.
- */
-static void
-nvmm_vcpu_pre_run(CPUState *cpu)
-{
-    struct CPUX86State *env = (CPUArchState *)cpu->env_ptr;
-    struct nvmm_machine *mach = get_nvmm_mach();
-    struct qemu_vcpu *qcpu = get_qemu_vcpu(cpu);
-    struct nvmm_vcpu *vcpu = &qcpu->vcpu;
-    X86CPU *x86_cpu = X86_CPU(cpu);
-    struct nvmm_x64_state *state = vcpu->state;
-    struct nvmm_vcpu_event *event = vcpu->event;
-    bool has_event = false;
-    bool sync_tpr = false;
-    uint8_t tpr;
-    int ret;
-
-    qemu_mutex_lock_iothread();
-
-    tpr = cpu_get_apic_tpr(x86_cpu->apic_state);
-    if (tpr != qcpu->tpr) {
-        qcpu->tpr = tpr;
-        sync_tpr = true;
-    }
-
-    /*
-     * Force the VCPU out of its inner loop to process any INIT requests
-     * or commit pending TPR access.
-     */
-    if (cpu->interrupt_request & (CPU_INTERRUPT_INIT|CPU_INTERRUPT_TPR)) {
-        cpu->exit_request = 1;
-    }
-
-    if (!has_event && (cpu->interrupt_request & CPU_INTERRUPT_NMI)) {
-        if (nvmm_can_take_nmi(cpu)) {
-            cpu->interrupt_request &= ~CPU_INTERRUPT_NMI;
-            event->type = NVMM_VCPU_EVENT_INTR;
-            event->vector = 2;
-            has_event = true;
-        }
-    }
-
-    if (!has_event && (cpu->interrupt_request & CPU_INTERRUPT_HARD)) {
-        if (nvmm_can_take_int(cpu)) {
-            cpu->interrupt_request &= ~CPU_INTERRUPT_HARD;
-            event->type = NVMM_VCPU_EVENT_INTR;
-            event->vector = cpu_get_pic_interrupt(env);
-            has_event = true;
-        }
-    }
-
-    /* Don't want SMIs. */
-    if (cpu->interrupt_request & CPU_INTERRUPT_SMI) {
-        cpu->interrupt_request &= ~CPU_INTERRUPT_SMI;
-    }
-
-    if (sync_tpr) {
-        ret = nvmm_vcpu_getstate(mach, vcpu, NVMM_X64_STATE_CRS);
-        if (ret == -1) {
-            error_report("NVMM: Failed to get CPU state,"
-                " error=%d", errno);
-        }
-
-        state->crs[NVMM_X64_CR_CR8] = qcpu->tpr;
-
-        ret = nvmm_vcpu_setstate(mach, vcpu, NVMM_X64_STATE_CRS);
-        if (ret == -1) {
-            error_report("NVMM: Failed to set CPU state,"
-                " error=%d", errno);
-        }
-    }
-
-    if (has_event) {
-        ret = nvmm_vcpu_inject(mach, vcpu);
-        if (ret == -1) {
-            error_report("NVMM: Failed to inject event,"
-                " error=%d", errno);
-        }
-    }
-
-    qemu_mutex_unlock_iothread();
-}
-
-/*
- * Called after the VCPU ran. We synchronize the host view of the TPR and
- * RFLAGS.
- */
-static void
-nvmm_vcpu_post_run(CPUState *cpu, struct nvmm_vcpu_exit *exit)
-{
-    struct qemu_vcpu *qcpu = get_qemu_vcpu(cpu);
-    struct CPUX86State *env = (CPUArchState *)cpu->env_ptr;
-    X86CPU *x86_cpu = X86_CPU(cpu);
-    uint64_t tpr;
-
-    env->eflags = exit->exitstate.rflags;
-    qcpu->int_shadow = exit->exitstate.int_shadow;
-    qcpu->int_window_exit = exit->exitstate.int_window_exiting;
-    qcpu->nmi_window_exit = exit->exitstate.nmi_window_exiting;
-
-    tpr = exit->exitstate.cr8;
-    if (qcpu->tpr != tpr) {
-        qcpu->tpr = tpr;
-        qemu_mutex_lock_iothread();
-        cpu_set_apic_tpr(x86_cpu->apic_state, qcpu->tpr);
-        qemu_mutex_unlock_iothread();
-    }
-}
-
-/* -------------------------------------------------------------------------- */
-
-static void
-nvmm_io_callback(struct nvmm_io *io)
-{
-    MemTxAttrs attrs = { 0 };
-    int ret;
-
-    ret = address_space_rw(&address_space_io, io->port, attrs, io->data,
-        io->size, !io->in);
-    if (ret != MEMTX_OK) {
-        error_report("NVMM: I/O Transaction Failed "
-            "[%s, port=%u, size=%zu]", (io->in ? "in" : "out"),
-            io->port, io->size);
-    }
-
-    /* XXX Needed, otherwise infinite loop. */
-    current_cpu->vcpu_dirty = false;
-}
-
-static void
-nvmm_mem_callback(struct nvmm_mem *mem)
-{
-    cpu_physical_memory_rw(mem->gpa, mem->data, mem->size, mem->write);
-
-    /* XXX Needed, otherwise infinite loop. */
-    current_cpu->vcpu_dirty = false;
-}
-
-static struct nvmm_assist_callbacks nvmm_callbacks = {
-    .io = nvmm_io_callback,
-    .mem = nvmm_mem_callback
-};
-
-/* -------------------------------------------------------------------------- */
-
-static int
-nvmm_handle_mem(struct nvmm_machine *mach, struct nvmm_vcpu *vcpu)
-{
-    int ret;
-
-    ret = nvmm_assist_mem(mach, vcpu);
-    if (ret == -1) {
-        error_report("NVMM: Mem Assist Failed [gpa=%p]",
-            (void *)vcpu->exit->u.mem.gpa);
-    }
-
-    return ret;
-}
-
-static int
-nvmm_handle_io(struct nvmm_machine *mach, struct nvmm_vcpu *vcpu)
-{
-    int ret;
-
-    ret = nvmm_assist_io(mach, vcpu);
-    if (ret == -1) {
-        error_report("NVMM: I/O Assist Failed [port=%d]",
-            (int)vcpu->exit->u.io.port);
-    }
-
-    return ret;
-}
-
-static int
-nvmm_handle_rdmsr(struct nvmm_machine *mach, CPUState *cpu,
-    struct nvmm_vcpu_exit *exit)
-{
-    struct qemu_vcpu *qcpu = get_qemu_vcpu(cpu);
-    struct nvmm_vcpu *vcpu = &qcpu->vcpu;
-    X86CPU *x86_cpu = X86_CPU(cpu);
-    struct nvmm_x64_state *state = vcpu->state;
-    uint64_t val;
-    int ret;
-
-    switch (exit->u.rdmsr.msr) {
-    case MSR_IA32_APICBASE:
-        val = cpu_get_apic_base(x86_cpu->apic_state);
-        break;
-    case MSR_MTRRcap:
-    case MSR_MTRRdefType:
-    case MSR_MCG_CAP:
-    case MSR_MCG_STATUS:
-        val = 0;
-        break;
-    default: // More MSRs to add?
-        val = 0;
-        error_report("NVMM: Unexpected RDMSR 0x%x, ignored",
-            exit->u.rdmsr.msr);
-        break;
-    }
-
-    ret = nvmm_vcpu_getstate(mach, vcpu, NVMM_X64_STATE_GPRS);
-    if (ret == -1)
-        return -1;
-
-    state->gprs[NVMM_X64_GPR_RAX] = (val & 0xFFFFFFFF);
-    state->gprs[NVMM_X64_GPR_RDX] = (val >> 32);
-    state->gprs[NVMM_X64_GPR_RIP] = exit->u.rdmsr.npc;
-
-    ret = nvmm_vcpu_setstate(mach, vcpu, NVMM_X64_STATE_GPRS);
-    if (ret == -1)
-        return -1;
-
-    return 0;
-}
-
-static int
-nvmm_handle_wrmsr(struct nvmm_machine *mach, CPUState *cpu,
-    struct nvmm_vcpu_exit *exit)
-{
-    struct qemu_vcpu *qcpu = get_qemu_vcpu(cpu);
-    struct nvmm_vcpu *vcpu = &qcpu->vcpu;
-    X86CPU *x86_cpu = X86_CPU(cpu);
-    struct nvmm_x64_state *state = vcpu->state;
-    uint64_t val;
-    int ret;
-
-    val = exit->u.wrmsr.val;
-
-    switch (exit->u.wrmsr.msr) {
-    case MSR_IA32_APICBASE:
-        cpu_set_apic_base(x86_cpu->apic_state, val);
-        break;
-    case MSR_MTRRdefType:
-    case MSR_MCG_STATUS:
-        break;
-    default: // More MSRs to add?
-        error_report("NVMM: Unexpected WRMSR 0x%x [val=0x%lx], ignored",
-            exit->u.wrmsr.msr, val);
-        break;
-    }
-
-    ret = nvmm_vcpu_getstate(mach, vcpu, NVMM_X64_STATE_GPRS);
-    if (ret == -1)
-        return -1;
-
-    state->gprs[NVMM_X64_GPR_RIP] = exit->u.wrmsr.npc;
-
-    ret = nvmm_vcpu_setstate(mach, vcpu, NVMM_X64_STATE_GPRS);
-    if (ret == -1)
-        return -1;
-
-    return 0;
-}
-
-static int
-nvmm_handle_halted(struct nvmm_machine *mach, CPUState *cpu,
-    struct nvmm_vcpu_exit *exit)
-{
-    struct CPUX86State *env = (CPUArchState *)cpu->env_ptr;
-    int ret = 0;
-
-    qemu_mutex_lock_iothread();
-
-    if (!((cpu->interrupt_request & CPU_INTERRUPT_HARD) &&
-          (env->eflags & IF_MASK)) &&
-        !(cpu->interrupt_request & CPU_INTERRUPT_NMI)) {
-        cpu->exception_index = EXCP_HLT;
-        cpu->halted = true;
-        ret = 1;
-    }
-
-    qemu_mutex_unlock_iothread();
-
-    return ret;
-}
-
-static int
-nvmm_inject_ud(struct nvmm_machine *mach, struct nvmm_vcpu *vcpu)
-{
-    struct nvmm_vcpu_event *event = vcpu->event;
-
-    event->type = NVMM_VCPU_EVENT_EXCP;
-    event->vector = 6;
-    event->u.excp.error = 0;
-
-    return nvmm_vcpu_inject(mach, vcpu);
-}
-
-static int
-nvmm_vcpu_loop(CPUState *cpu)
-{
-    struct CPUX86State *env = (CPUArchState *)cpu->env_ptr;
-    struct nvmm_machine *mach = get_nvmm_mach();
-    struct qemu_vcpu *qcpu = get_qemu_vcpu(cpu);
-    struct nvmm_vcpu *vcpu = &qcpu->vcpu;
-    X86CPU *x86_cpu = X86_CPU(cpu);
-    struct nvmm_vcpu_exit *exit = vcpu->exit;
-    int ret;
-
-    /*
-     * Some asynchronous events must be handled outside of the inner
-     * VCPU loop. They are handled here.
-     */
-    if (cpu->interrupt_request & CPU_INTERRUPT_INIT) {
-        nvmm_cpu_synchronize_state(cpu);
-        do_cpu_init(x86_cpu);
-        /* XXX: reset the INT/NMI windows */
-    }
-    if (cpu->interrupt_request & CPU_INTERRUPT_POLL) {
-        cpu->interrupt_request &= ~CPU_INTERRUPT_POLL;
-        apic_poll_irq(x86_cpu->apic_state);
-    }
-    if (((cpu->interrupt_request & CPU_INTERRUPT_HARD) &&
-         (env->eflags & IF_MASK)) ||
-        (cpu->interrupt_request & CPU_INTERRUPT_NMI)) {
-        cpu->halted = false;
-    }
-    if (cpu->interrupt_request & CPU_INTERRUPT_SIPI) {
-        nvmm_cpu_synchronize_state(cpu);
-        do_cpu_sipi(x86_cpu);
-    }
-    if (cpu->interrupt_request & CPU_INTERRUPT_TPR) {
-        cpu->interrupt_request &= ~CPU_INTERRUPT_TPR;
-        nvmm_cpu_synchronize_state(cpu);
-        apic_handle_tpr_access_report(x86_cpu->apic_state, env->eip,
-            env->tpr_access_type);
-    }
-
-    if (cpu->halted) {
-        cpu->exception_index = EXCP_HLT;
-        atomic_set(&cpu->exit_request, false);
-        return 0;
-    }
-
-    qemu_mutex_unlock_iothread();
-    cpu_exec_start(cpu);
-
-    /*
-     * Inner VCPU loop.
-     */
-    do {
-        if (cpu->vcpu_dirty) {
-            nvmm_set_registers(cpu);
-            cpu->vcpu_dirty = false;
-        }
-
-        if (qcpu->stop) {
-            cpu->exception_index = EXCP_INTERRUPT;
-            qcpu->stop = false;
-            ret = 1;
-            break;
-        }
-
-        nvmm_vcpu_pre_run(cpu);
-
-        if (atomic_read(&cpu->exit_request)) {
-            qemu_cpu_kick_self();
-        }
-
-        ret = nvmm_vcpu_run(mach, vcpu);
-        if (ret == -1) {
-            error_report("NVMM: Failed to exec a virtual processor,"
-                " error=%d", errno);
-            break;
-        }
-
-        nvmm_vcpu_post_run(cpu, exit);
-
-        switch (exit->reason) {
-        case NVMM_VCPU_EXIT_NONE:
-            break;
-        case NVMM_VCPU_EXIT_MEMORY:
-            ret = nvmm_handle_mem(mach, vcpu);
-            break;
-        case NVMM_VCPU_EXIT_IO:
-            ret = nvmm_handle_io(mach, vcpu);
-            break;
-        case NVMM_VCPU_EXIT_INT_READY:
-        case NVMM_VCPU_EXIT_NMI_READY:
-        case NVMM_VCPU_EXIT_TPR_CHANGED:
-            break;
-        case NVMM_VCPU_EXIT_HALTED:
-            ret = nvmm_handle_halted(mach, cpu, exit);
-            break;
-        case NVMM_VCPU_EXIT_SHUTDOWN:
-            qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
-            cpu->exception_index = EXCP_INTERRUPT;
-            ret = 1;
-            break;
-        case NVMM_VCPU_EXIT_RDMSR:
-            ret = nvmm_handle_rdmsr(mach, cpu, exit);
-            break;
-        case NVMM_VCPU_EXIT_WRMSR:
-            ret = nvmm_handle_wrmsr(mach, cpu, exit);
-            break;
-        case NVMM_VCPU_EXIT_MONITOR:
-        case NVMM_VCPU_EXIT_MWAIT:
-            ret = nvmm_inject_ud(mach, vcpu);
-            break;
-        default:
-            error_report("NVMM: Unexpected VM exit code 0x%lx [hw=0x%lx]",
-                exit->reason, exit->u.inv.hwcode);
-            nvmm_get_registers(cpu);
-            qemu_mutex_lock_iothread();
-            qemu_system_guest_panicked(cpu_get_crash_info(cpu));
-            qemu_mutex_unlock_iothread();
-            ret = -1;
-            break;
-        }
-    } while (ret == 0);
-
-    cpu_exec_end(cpu);
-    qemu_mutex_lock_iothread();
-    current_cpu = cpu;
-
-    atomic_set(&cpu->exit_request, false);
-
-    return ret < 0;
-}
-
-/* -------------------------------------------------------------------------- */
-
-static void
-do_nvmm_cpu_synchronize_state(CPUState *cpu, run_on_cpu_data arg)
-{
-    nvmm_get_registers(cpu);
-    cpu->vcpu_dirty = true;
-}
-
-static void
-do_nvmm_cpu_synchronize_post_reset(CPUState *cpu, run_on_cpu_data arg)
-{
-    nvmm_set_registers(cpu);
-    cpu->vcpu_dirty = false;
-}
-
-static void
-do_nvmm_cpu_synchronize_post_init(CPUState *cpu, run_on_cpu_data arg)
-{
-    nvmm_set_registers(cpu);
-    cpu->vcpu_dirty = false;
-}
-
-static void
-do_nvmm_cpu_synchronize_pre_loadvm(CPUState *cpu, run_on_cpu_data arg)
-{
-    cpu->vcpu_dirty = true;
-}
-
-void nvmm_cpu_synchronize_state(CPUState *cpu)
-{
-    if (!cpu->vcpu_dirty) {
-        run_on_cpu(cpu, do_nvmm_cpu_synchronize_state, RUN_ON_CPU_NULL);
-    }
-}
-
-void nvmm_cpu_synchronize_post_reset(CPUState *cpu)
-{
-    run_on_cpu(cpu, do_nvmm_cpu_synchronize_post_reset, RUN_ON_CPU_NULL);
-}
-
-void nvmm_cpu_synchronize_post_init(CPUState *cpu)
-{
-    run_on_cpu(cpu, do_nvmm_cpu_synchronize_post_init, RUN_ON_CPU_NULL);
-}
-
-void nvmm_cpu_synchronize_pre_loadvm(CPUState *cpu)
-{
-    run_on_cpu(cpu, do_nvmm_cpu_synchronize_pre_loadvm, RUN_ON_CPU_NULL);
-}
-
-/* -------------------------------------------------------------------------- */
-
-static Error *nvmm_migration_blocker;
-
-static void
-nvmm_ipi_signal(int sigcpu)
-{
-    struct qemu_vcpu *qcpu;
-
-    if (current_cpu) {
-        qcpu = get_qemu_vcpu(current_cpu);
-        qcpu->stop = true;
-    }
-}
-
-static void
-nvmm_init_cpu_signals(void)
-{
-    struct sigaction sigact;
-    sigset_t set;
-
-    /* Install the IPI handler. */
-    memset(&sigact, 0, sizeof(sigact));
-    sigact.sa_handler = nvmm_ipi_signal;
-    sigaction(SIG_IPI, &sigact, NULL);
-
-    /* Allow IPIs on the current thread. */
-    sigprocmask(SIG_BLOCK, NULL, &set);
-    sigdelset(&set, SIG_IPI);
-    pthread_sigmask(SIG_SETMASK, &set, NULL);
-}
-
-int
-nvmm_init_vcpu(CPUState *cpu)
-{
-    struct nvmm_machine *mach = get_nvmm_mach();
-    struct nvmm_vcpu_conf_cpuid cpuid;
-    struct nvmm_vcpu_conf_tpr tpr;
-    Error *local_error = NULL;
-    struct qemu_vcpu *qcpu;
-    int ret, err;
-
-    nvmm_init_cpu_signals();
-
-    if (nvmm_migration_blocker == NULL) {
-        error_setg(&nvmm_migration_blocker,
-            "NVMM: Migration not supported");
-
-        (void)migrate_add_blocker(nvmm_migration_blocker, &local_error);
-        if (local_error) {
-            error_report_err(local_error);
-            migrate_del_blocker(nvmm_migration_blocker);
-            error_free(nvmm_migration_blocker);
-            return -EINVAL;
-        }
-    }
-
-    qcpu = g_malloc0(sizeof(*qcpu));
-    if (qcpu == NULL) {
-        error_report("NVMM: Failed to allocate VCPU context.");
-        return -ENOMEM;
-    }
-
-    ret = nvmm_vcpu_create(mach, cpu->cpu_index, &qcpu->vcpu);
-    if (ret == -1) {
-        err = errno;
-        error_report("NVMM: Failed to create a virtual processor,"
-            " error=%d", err);
-        g_free(qcpu);
-        return -err;
-    }
-
-    memset(&cpuid, 0, sizeof(cpuid));
-    cpuid.mask = 1;
-    cpuid.leaf = 0x00000001;
-    cpuid.u.mask.set.edx = CPUID_MCE | CPUID_MCA | CPUID_MTRR;
-    ret = nvmm_vcpu_configure(mach, &qcpu->vcpu, NVMM_VCPU_CONF_CPUID,
-        &cpuid);
-    if (ret == -1) {
-        err = errno;
-        error_report("NVMM: Failed to configure a virtual processor,"
-            " error=%d", err);
-        g_free(qcpu);
-        return -err;
-    }
-
-    ret = nvmm_vcpu_configure(mach, &qcpu->vcpu, NVMM_VCPU_CONF_CALLBACKS,
-        &nvmm_callbacks);
-    if (ret == -1) {
-        err = errno;
-        error_report("NVMM: Failed to configure a virtual processor,"
-            " error=%d", err);
-        g_free(qcpu);
-        return -err;
-    }
-
-    if (qemu_mach.cap.arch.vcpu_conf_support & NVMM_CAP_ARCH_VCPU_CONF_TPR) {
-        memset(&tpr, 0, sizeof(tpr));
-        tpr.exit_changed = 1;
-        ret = nvmm_vcpu_configure(mach, &qcpu->vcpu, NVMM_VCPU_CONF_TPR, &tpr);
-        if (ret == -1) {
-            err = errno;
-            error_report("NVMM: Failed to configure a virtual processor,"
-                " error=%d", err);
-            g_free(qcpu);
-            return -err;
-        }
-    }
-
-    cpu->vcpu_dirty = true;
-    cpu->hax_vcpu = (struct hax_vcpu_state *)qcpu;
-
-    return 0;
-}
-
-int
-nvmm_vcpu_exec(CPUState *cpu)
-{
-    int ret, fatal;
-
-    while (1) {
-        if (cpu->exception_index >= EXCP_INTERRUPT) {
-            ret = cpu->exception_index;
-            cpu->exception_index = -1;
-            break;
-        }
-
-        fatal = nvmm_vcpu_loop(cpu);
-
-        if (fatal) {
-            error_report("NVMM: Failed to execute a VCPU.");
-            abort();
-        }
-    }
-
-    return ret;
-}
-
-void
-nvmm_destroy_vcpu(CPUState *cpu)
-{
-    struct nvmm_machine *mach = get_nvmm_mach();
-    struct qemu_vcpu *qcpu = get_qemu_vcpu(cpu);
-
-    nvmm_vcpu_destroy(mach, &qcpu->vcpu);
-    g_free(cpu->hax_vcpu);
-}
-
-/* -------------------------------------------------------------------------- */
-
-static void
-nvmm_update_mapping(hwaddr start_pa, ram_addr_t size, uintptr_t hva,
-    bool add, bool rom, const char *name)
-{
-    struct nvmm_machine *mach = get_nvmm_mach();
-    int ret, prot;
-
-    if (add) {
-        prot = PROT_READ | PROT_EXEC;
-        if (!rom) {
-            prot |= PROT_WRITE;
-        }
-        ret = nvmm_gpa_map(mach, hva, start_pa, size, prot);
-    } else {
-        ret = nvmm_gpa_unmap(mach, hva, start_pa, size);
-    }
-
-    if (ret == -1) {
-        error_report("NVMM: Failed to %s GPA range '%s' PA:%p, "
-            "Size:%p bytes, HostVA:%p, error=%d",
-            (add ? "map" : "unmap"), name, (void *)(uintptr_t)start_pa,
-            (void *)size, (void *)hva, errno);
-    }
-}
-
-static void
-nvmm_process_section(MemoryRegionSection *section, int add)
-{
-    MemoryRegion *mr = section->mr;
-    hwaddr start_pa = section->offset_within_address_space;
-    ram_addr_t size = int128_get64(section->size);
-    unsigned int delta;
-    uintptr_t hva;
-
-    if (!memory_region_is_ram(mr)) {
-        return;
-    }
-
-    /* Adjust start_pa and size so that they are page-aligned. */
-    delta = qemu_real_host_page_size - (start_pa & ~qemu_real_host_page_mask);
-    delta &= ~qemu_real_host_page_mask;
-    if (delta > size) {
-        return;
-    }
-    start_pa += delta;
-    size -= delta;
-    size &= qemu_real_host_page_mask;
-    if (!size || (start_pa & ~qemu_real_host_page_mask)) {
-        return;
-    }
-
-    hva = (uintptr_t)memory_region_get_ram_ptr(mr) +
-        section->offset_within_region + delta;
-
-    nvmm_update_mapping(start_pa, size, hva, add,
-        memory_region_is_rom(mr), mr->name);
-}
-
-static void
-nvmm_region_add(MemoryListener *listener, MemoryRegionSection *section)
-{
-    memory_region_ref(section->mr);
-    nvmm_process_section(section, 1);
-}
-
-static void
-nvmm_region_del(MemoryListener *listener, MemoryRegionSection *section)
-{
-    nvmm_process_section(section, 0);
-    memory_region_unref(section->mr);
-}
-
-static void
-nvmm_transaction_begin(MemoryListener *listener)
-{
-    /* nothing */
-}
-
-static void
-nvmm_transaction_commit(MemoryListener *listener)
-{
-    /* nothing */
-}
-
-static void
-nvmm_log_sync(MemoryListener *listener, MemoryRegionSection *section)
-{
-    MemoryRegion *mr = section->mr;
-
-    if (!memory_region_is_ram(mr)) {
-        return;
-    }
-
-    memory_region_set_dirty(mr, 0, int128_get64(section->size));
-}
-
-static MemoryListener nvmm_memory_listener = {
-    .begin = nvmm_transaction_begin,
-    .commit = nvmm_transaction_commit,
-    .region_add = nvmm_region_add,
-    .region_del = nvmm_region_del,
-    .log_sync = nvmm_log_sync,
-    .priority = 10,
-};
-
-static void
-nvmm_ram_block_added(RAMBlockNotifier *n, void *host, size_t size)
-{
-    struct nvmm_machine *mach = get_nvmm_mach();
-    uintptr_t hva = (uintptr_t)host;
-    int ret;
-
-    ret = nvmm_hva_map(mach, hva, size);
-
-    if (ret == -1) {
-        error_report("NVMM: Failed to map HVA, HostVA:%p "
-            "Size:%p bytes, error=%d",
-            (void *)hva, (void *)size, errno);
-    }
-}
-
-static struct RAMBlockNotifier nvmm_ram_notifier = {
-    .ram_block_added = nvmm_ram_block_added
-};
-
-/* -------------------------------------------------------------------------- */
-
-static void
-nvmm_handle_interrupt(CPUState *cpu, int mask)
-{
-    cpu->interrupt_request |= mask;
-
-    if (!qemu_cpu_is_self(cpu)) {
-        qemu_cpu_kick(cpu);
-    }
-}
-
-/* -------------------------------------------------------------------------- */
-
-static int
-nvmm_accel_init(MachineState *ms)
-{
-    int ret, err;
-
-    ret = nvmm_init();
-    if (ret == -1) {
-        err = errno;
-        error_report("NVMM: Initialization failed, error=%d", errno);
-        return -err;
-    }
-
-    ret = nvmm_capability(&qemu_mach.cap);
-    if (ret == -1) {
-        err = errno;
-        error_report("NVMM: Unable to fetch capability, error=%d", errno);
-        return -err;
-    }
-    if (qemu_mach.cap.version != 1) {
-        error_report("NVMM: Unsupported version %u", qemu_mach.cap.version);
-        return -EPROGMISMATCH;
-    }
-    if (qemu_mach.cap.state_size != sizeof(struct nvmm_x64_state)) {
-        error_report("NVMM: Wrong state size %u", qemu_mach.cap.state_size);
-        return -EPROGMISMATCH;
-    }
-
-    ret = nvmm_machine_create(&qemu_mach.mach);
-    if (ret == -1) {
-        err = errno;
-        error_report("NVMM: Machine creation failed, error=%d", errno);
-        return -err;
-    }
-
-    memory_listener_register(&nvmm_memory_listener, &address_space_memory);
-    ram_block_notifier_add(&nvmm_ram_notifier);
-
-    cpu_interrupt_handler = nvmm_handle_interrupt;
-
-    printf("NetBSD Virtual Machine Monitor accelerator is operational\n");
-    return 0;
-}
-
-int
-nvmm_enabled(void)
-{
-    return nvmm_allowed;
-}
-
-static void
-nvmm_accel_class_init(ObjectClass *oc, void *data)
-{
-    AccelClass *ac = ACCEL_CLASS(oc);
-    ac->name = "NVMM";
-    ac->init_machine = nvmm_accel_init;
-    ac->allowed = &nvmm_allowed;
-}
-
-static const TypeInfo nvmm_accel_type = {
-    .name = ACCEL_CLASS_NAME("nvmm"),
-    .parent = TYPE_ACCEL,
-    .class_init = nvmm_accel_class_init,
-};
-
-static void
-nvmm_type_init(void)
-{
-    type_register_static(&nvmm_accel_type);
-}
-
-type_init(nvmm_type_init);
diff --git a/qemu-nvmm/options.mk b/qemu-nvmm/options.mk
deleted file mode 100644
index e7fbed3df6..0000000000
--- a/qemu-nvmm/options.mk
+++ /dev/null
@@ -1,29 +0,0 @@
-# $NetBSD: options.mk,v 1.5 2018/08/14 06:57:26 adam Exp $
-
-PKG_OPTIONS_VAR=	PKG_OPTIONS.qemu
-PKG_SUPPORTED_OPTIONS=	gtk3 sdl
-
-.include "../../mk/bsd.fast.prefs.mk"
-
-.if ${OPSYS} != "Darwin"
-PKG_SUGGESTED_OPTIONS+=	sdl
-.endif
-
-.include "../../mk/bsd.options.mk"
-
-PLIST_VARS+=		gtk
-
-.if !empty(PKG_OPTIONS:Mgtk3)
-PLIST.gtk=		yes
-CONFIGURE_ARGS+=	--enable-gtk
-.include "../../x11/gtk3/buildlink3.mk"
-.else
-CONFIGURE_ARGS+=	--disable-gtk
-.endif
-
-.if !empty(PKG_OPTIONS:Msdl)
-CONFIGURE_ARGS+=	--enable-sdl
-.include "../../devel/SDL2/buildlink3.mk"
-.else
-CONFIGURE_ARGS+=	--disable-sdl
-.endif
diff --git a/qemu-nvmm/patches/patch-Makefile b/qemu-nvmm/patches/patch-Makefile
deleted file mode 100644
index 5053850250..0000000000
--- a/qemu-nvmm/patches/patch-Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-$NetBSD: patch-Makefile,v 1.2 2019/08/16 15:12:19 adam Exp $
-
---- Makefile.orig	2019-08-15 19:01:42.000000000 +0000
-+++ Makefile
-@@ -474,6 +474,7 @@ $(TARGET_DIRS_RULES):
- DTC_MAKE_ARGS=-I$(SRC_PATH)/dtc VPATH=$(SRC_PATH)/dtc -C dtc V="$(V)" LIBFDT_srcdir=$(SRC_PATH)/dtc/libfdt
- DTC_CFLAGS=$(CFLAGS) $(QEMU_CFLAGS)
- DTC_CPPFLAGS=-I$(BUILD_DIR)/dtc -I$(SRC_PATH)/dtc -I$(SRC_PATH)/dtc/libfdt
-+ARFLAGS=	-rcs
- 
- .PHONY: dtc/all
- dtc/all: .git-submodule-status dtc/libfdt dtc/tests
diff --git a/qemu-nvmm/patches/patch-audio_audio.c b/qemu-nvmm/patches/patch-audio_audio.c
deleted file mode 100644
index 2d6d38ae53..0000000000
--- a/qemu-nvmm/patches/patch-audio_audio.c
+++ /dev/null
@@ -1,16 +0,0 @@
-$NetBSD: patch-audio_audio.c,v 1.1 2017/12/14 08:01:10 adam Exp $
-
-Avoid conflicts with SSP read() macro in NetBSD's <ssp/unistd.h>
-(PR lib/43832: ssp causes common names to be defines)
-
---- audio/audio.c.orig	2016-09-02 15:34:17.000000000 +0000
-+++ audio/audio.c
-@@ -1156,7 +1156,7 @@ int AUD_read (SWVoiceIn *sw, void *buf, 
-         return 0;
-     }
- 
--    return sw->hw->pcm_ops->read(sw, buf, size);
-+    return (sw->hw->pcm_ops->read)(sw, buf, size);
- }
- 
- int AUD_get_buffer_size_out (SWVoiceOut *sw)
diff --git a/qemu-nvmm/patches/patch-contrib_ivshmem-client_ivshmem-client.c b/qemu-nvmm/patches/patch-contrib_ivshmem-client_ivshmem-client.c
deleted file mode 100644
index 8ed854c325..0000000000
--- a/qemu-nvmm/patches/patch-contrib_ivshmem-client_ivshmem-client.c
+++ /dev/null
@@ -1,37 +0,0 @@
-$NetBSD: patch-contrib_ivshmem-client_ivshmem-client.c,v 1.1 2017/08/25 12:39:56 jperkin Exp $
-
-Avoid sun definition.
-
---- contrib/ivshmem-client/ivshmem-client.c.orig	2017-04-20 14:57:00.000000000 +0000
-+++ contrib/ivshmem-client/ivshmem-client.c
-@@ -179,7 +179,7 @@ ivshmem_client_init(IvshmemClient *clien
- int
- ivshmem_client_connect(IvshmemClient *client)
- {
--    struct sockaddr_un sun;
-+    struct sockaddr_un sockun;
-     int fd, ret;
-     int64_t tmp;
- 
-@@ -193,16 +193,16 @@ ivshmem_client_connect(IvshmemClient *cl
-         return -1;
-     }
- 
--    sun.sun_family = AF_UNIX;
--    ret = snprintf(sun.sun_path, sizeof(sun.sun_path), "%s",
-+    sockun.sun_family = AF_UNIX;
-+    ret = snprintf(sockun.sun_path, sizeof(sockun.sun_path), "%s",
-                    client->unix_sock_path);
--    if (ret < 0 || ret >= sizeof(sun.sun_path)) {
-+    if (ret < 0 || ret >= sizeof(sockun.sun_path)) {
-         IVSHMEM_CLIENT_DEBUG(client, "could not copy unix socket path\n");
-         goto err_close;
-     }
- 
--    if (connect(client->sock_fd, (struct sockaddr *)&sun, sizeof(sun)) < 0) {
--        IVSHMEM_CLIENT_DEBUG(client, "cannot connect to %s: %s\n", sun.sun_path,
-+    if (connect(client->sock_fd, (struct sockaddr *)&sockun, sizeof(sockun)) < 0) {
-+        IVSHMEM_CLIENT_DEBUG(client, "cannot connect to %s: %s\n", sockun.sun_path,
-                              strerror(errno));
-         goto err_close;
-     }
diff --git a/qemu-nvmm/patches/patch-contrib_ivshmem-server_ivshmem-server.c b/qemu-nvmm/patches/patch-contrib_ivshmem-server_ivshmem-server.c
deleted file mode 100644
index d773418cfe..0000000000
--- a/qemu-nvmm/patches/patch-contrib_ivshmem-server_ivshmem-server.c
+++ /dev/null
@@ -1,36 +0,0 @@
-$NetBSD: patch-contrib_ivshmem-server_ivshmem-server.c,v 1.1 2017/08/25 12:39:56 jperkin Exp $
-
-Avoid sun definition.
-
---- contrib/ivshmem-server/ivshmem-server.c.orig	2017-04-20 14:57:00.000000000 +0000
-+++ contrib/ivshmem-server/ivshmem-server.c
-@@ -289,7 +289,7 @@ ivshmem_server_init(IvshmemServer *serve
- int
- ivshmem_server_start(IvshmemServer *server)
- {
--    struct sockaddr_un sun;
-+    struct sockaddr_un sockun;
-     int shm_fd, sock_fd, ret;
- 
-     /* open shm file */
-@@ -328,15 +328,15 @@ ivshmem_server_start(IvshmemServer *serv
-         goto err_close_shm;
-     }
- 
--    sun.sun_family = AF_UNIX;
--    ret = snprintf(sun.sun_path, sizeof(sun.sun_path), "%s",
-+    sockun.sun_family = AF_UNIX;
-+    ret = snprintf(sockun.sun_path, sizeof(sockun.sun_path), "%s",
-                    server->unix_sock_path);
--    if (ret < 0 || ret >= sizeof(sun.sun_path)) {
-+    if (ret < 0 || ret >= sizeof(sockun.sun_path)) {
-         IVSHMEM_SERVER_DEBUG(server, "could not copy unix socket path\n");
-         goto err_close_sock;
-     }
--    if (bind(sock_fd, (struct sockaddr *)&sun, sizeof(sun)) < 0) {
--        IVSHMEM_SERVER_DEBUG(server, "cannot connect to %s: %s\n", sun.sun_path,
-+    if (bind(sock_fd, (struct sockaddr *)&sockun, sizeof(sockun)) < 0) {
-+        IVSHMEM_SERVER_DEBUG(server, "cannot connect to %s: %s\n", sockun.sun_path,
-                              strerror(errno));
-         goto err_close_sock;
-     }
diff --git a/qemu-nvmm/patches/patch-hw_core_uboot__image.h b/qemu-nvmm/patches/patch-hw_core_uboot__image.h
deleted file mode 100644
index 60c80cba3d..0000000000
--- a/qemu-nvmm/patches/patch-hw_core_uboot__image.h
+++ /dev/null
@@ -1,12 +0,0 @@
-$NetBSD: patch-hw_core_uboot__image.h,v 1.2 2019/04/24 13:59:32 ryoon Exp $
-
---- hw/core/uboot_image.h.orig	2019-04-23 18:14:45.000000000 +0000
-+++ hw/core/uboot_image.h
-@@ -75,6 +75,7 @@
- #define IH_CPU_NIOS2		15	/* Nios-II	*/
- #define IH_CPU_BLACKFIN		16	/* Blackfin	*/
- #define IH_CPU_AVR32		17	/* AVR32	*/
-+#define IH_CPU_ARM64		22	/* ARM64        */
- 
- /*
-  * Image Types
diff --git a/qemu-nvmm/patches/patch-hw_display_omap__dss.c b/qemu-nvmm/patches/patch-hw_display_omap__dss.c
deleted file mode 100644
index fca1167bf3..0000000000
--- a/qemu-nvmm/patches/patch-hw_display_omap__dss.c
+++ /dev/null
@@ -1,30 +0,0 @@
-$NetBSD: patch-hw_display_omap__dss.c,v 1.2 2014/01/15 18:26:20 wiz Exp $
-
-Avoid conflicts with SSP read() macro in NetBSD's <ssp/unistd.h>
-(PR lib/43832: ssp causes common names to be defines)
-
---- hw/display/omap_dss.c.orig	2013-11-27 22:15:55.000000000 +0000
-+++ hw/display/omap_dss.c
-@@ -791,18 +791,18 @@ static void omap_rfbi_write(void *opaque
-         break;
-     case 0x58:	/* RFBI_READ */
-         if ((s->rfbi.control & (1 << 2)) && s->rfbi.chip[0])
--            s->rfbi.rxbuf = s->rfbi.chip[0]->read(s->rfbi.chip[0]->opaque, 1);
-+            s->rfbi.rxbuf = (*s->rfbi.chip[0]->read)(s->rfbi.chip[0]->opaque, 1);
-         else if ((s->rfbi.control & (1 << 3)) && s->rfbi.chip[1])
--            s->rfbi.rxbuf = s->rfbi.chip[1]->read(s->rfbi.chip[1]->opaque, 1);
-+            s->rfbi.rxbuf = (*s->rfbi.chip[1]->read)(s->rfbi.chip[1]->opaque, 1);
-         if (!-- s->rfbi.pixels)
-             omap_rfbi_transfer_stop(s);
-         break;
- 
-     case 0x5c:	/* RFBI_STATUS */
-         if ((s->rfbi.control & (1 << 2)) && s->rfbi.chip[0])
--            s->rfbi.rxbuf = s->rfbi.chip[0]->read(s->rfbi.chip[0]->opaque, 0);
-+            s->rfbi.rxbuf = (*s->rfbi.chip[0]->read)(s->rfbi.chip[0]->opaque, 0);
-         else if ((s->rfbi.control & (1 << 3)) && s->rfbi.chip[1])
--            s->rfbi.rxbuf = s->rfbi.chip[1]->read(s->rfbi.chip[1]->opaque, 0);
-+            s->rfbi.rxbuf = (*s->rfbi.chip[1]->read)(s->rfbi.chip[1]->opaque, 0);
-         if (!-- s->rfbi.pixels)
-             omap_rfbi_transfer_stop(s);
-         break;
diff --git a/qemu-nvmm/patches/patch-hw_net_etraxfs__eth.c b/qemu-nvmm/patches/patch-hw_net_etraxfs__eth.c
deleted file mode 100644
index 834cf8dfb1..0000000000
--- a/qemu-nvmm/patches/patch-hw_net_etraxfs__eth.c
+++ /dev/null
@@ -1,25 +0,0 @@
-$NetBSD: patch-hw_net_etraxfs__eth.c,v 1.3 2014/01/15 18:26:20 wiz Exp $
-
-Avoid conflicts with SSP read() macro in NetBSD's <ssp/unistd.h>
-(PR lib/43832: ssp causes common names to be defines)
-
---- hw/net/etraxfs_eth.c.orig	2013-11-27 22:15:55.000000000 +0000
-+++ hw/net/etraxfs_eth.c
-@@ -185,7 +185,7 @@ static void mdio_read_req(struct qemu_md
- 
-     phy = bus->devs[bus->addr];
-     if (phy && phy->read) {
--        bus->data = phy->read(phy, bus->req);
-+        bus->data = (*phy->read)(phy, bus->req);
-     } else {
-         bus->data = 0xffff;
-     }
-@@ -364,7 +364,7 @@ static void eth_validate_duplex(ETRAXFSE
-     int new_mm = 0;
- 
-     phy = eth->mdio_bus.devs[eth->phyaddr];
--    phy_duplex = !!(phy->read(phy, 18) & (1 << 11));
-+    phy_duplex = !!((*phy->read)(phy, 18) & (1 << 11));
-     mac_duplex = !!(eth->regs[RW_REC_CTRL] & 128);
- 
-     if (mac_duplex != phy_duplex) {
diff --git a/qemu-nvmm/patches/patch-hw_net_xilinx__axienet.c b/qemu-nvmm/patches/patch-hw_net_xilinx__axienet.c
deleted file mode 100644
index af632b972d..0000000000
--- a/qemu-nvmm/patches/patch-hw_net_xilinx__axienet.c
+++ /dev/null
@@ -1,16 +0,0 @@
-$NetBSD: patch-hw_net_xilinx__axienet.c,v 1.2 2014/01/15 18:26:20 wiz Exp $
-
-Avoid conflicts with SSP read() macro in NetBSD's <ssp/unistd.h>
-(PR lib/43832: ssp causes common names to be defines)
-
---- hw/net/xilinx_axienet.c.orig	2013-11-27 22:15:55.000000000 +0000
-+++ hw/net/xilinx_axienet.c
-@@ -207,7 +207,7 @@ static uint16_t mdio_read_req(struct MDI
- 
-     phy = bus->devs[addr];
-     if (phy && phy->read) {
--        data = phy->read(phy, reg);
-+        data = (*phy->read)(phy, reg);
-     } else {
-         data = 0xffff;
-     }
diff --git a/qemu-nvmm/patches/patch-hw_usb_dev-mtp.c b/qemu-nvmm/patches/patch-hw_usb_dev-mtp.c
deleted file mode 100644
index ef27d99303..0000000000
--- a/qemu-nvmm/patches/patch-hw_usb_dev-mtp.c
+++ /dev/null
@@ -1,27 +0,0 @@
-$NetBSD: patch-hw_usb_dev-mtp.c,v 1.4 2019/06/28 17:11:14 jperkin Exp $
-
-Support NAME_MAX and compat for O_DIRECTORY.
-
---- hw/usb/dev-mtp.c.orig	2019-04-23 18:14:46.000000000 +0000
-+++ hw/usb/dev-mtp.c
-@@ -26,6 +26,10 @@
- #include "desc.h"
- #include "qemu/units.h"
- 
-+#ifndef NAME_MAX
-+#define NAME_MAX 255
-+#endif
-+
- /* ----------------------------------------------------------------------- */
- 
- enum mtp_container_type {
-@@ -614,6 +618,9 @@ static void usb_mtp_object_readdir(MTPSt
-     }
-     o->have_children = true;
- 
-+#ifndef O_DIRECTORY
-+#define O_DIRECTORY	0
-+#endif
-     fd = open(o->path, O_DIRECTORY | O_CLOEXEC | O_NOFOLLOW);
-     if (fd < 0) {
-         return;
diff --git a/qemu-nvmm/patches/patch-nvmm-support b/qemu-nvmm/patches/patch-nvmm-support
deleted file mode 100644
index e67fac5dc5..0000000000
--- a/qemu-nvmm/patches/patch-nvmm-support
+++ /dev/null
@@ -1,287 +0,0 @@
-$NetBSD$
-
-Add NVMM support.
-
---- accel/stubs/Makefile.objs.orig	2019-08-15 19:01:42.000000000 +0000
-+++ accel/stubs/Makefile.objs
-@@ -1,5 +1,6 @@
- obj-$(call lnot,$(CONFIG_HAX))  += hax-stub.o
- obj-$(call lnot,$(CONFIG_HVF))  += hvf-stub.o
- obj-$(call lnot,$(CONFIG_WHPX)) += whpx-stub.o
-+obj-$(call lnot,$(CONFIG_NVMM)) += nvmm-stub.o
- obj-$(call lnot,$(CONFIG_KVM))  += kvm-stub.o
- obj-$(call lnot,$(CONFIG_TCG))  += tcg-stub.o
---- configure.orig	2019-08-15 19:01:42.000000000 +0000
-+++ configure
-@@ -240,6 +240,17 @@ supported_whpx_target() {
-     return 1
- }
- 
-+supported_nvmm_target() {
-+    test "$nvmm" = "yes" || return 1
-+    glob "$1" "*-softmmu" || return 1
-+    case "${1%-softmmu}" in
-+        i386|x86_64)
-+            return 0
-+        ;;
-+    esac
-+    return 1
-+}
-+
- supported_target() {
-     case "$1" in
-         *-softmmu)
-@@ -267,6 +278,7 @@ supported_target() {
-     supported_hax_target "$1" && return 0
-     supported_hvf_target "$1" && return 0
-     supported_whpx_target "$1" && return 0
-+    supported_nvmm_target "$1" && return 0
-     print_error "TCG disabled, but hardware accelerator not available for '$target'"
-     return 1
- }
-@@ -386,6 +398,7 @@ kvm="no"
- hax="no"
- hvf="no"
- whpx="no"
-+nvmm="no"
- rdma=""
- pvrdma=""
- gprof="no"
-@@ -1187,6 +1200,10 @@ for opt do
-   ;;
-   --enable-whpx) whpx="yes"
-   ;;
-+  --disable-nvmm) nvmm="no"
-+  ;;
-+  --enable-nvmm) nvmm="yes"
-+  ;;
-   --disable-tcg-interpreter) tcg_interpreter="no"
-   ;;
-   --enable-tcg-interpreter) tcg_interpreter="yes"
-@@ -1785,6 +1802,7 @@ disabled with --disable-FEATURE, default
-   hax             HAX acceleration support
-   hvf             Hypervisor.framework acceleration support
-   whpx            Windows Hypervisor Platform acceleration support
-+  nvmm            NetBSD Virtual Machine Monitor acceleration support
-   rdma            Enable RDMA-based migration
-   pvrdma          Enable PVRDMA support
-   vde             support for vde network
-@@ -2757,6 +2775,20 @@ if test "$whpx" != "no" ; then
- fi
- 
- ##########################################
-+# NetBSD Virtual Machine Monitor (NVMM) accelerator check
-+if test "$nvmm" != "no" ; then
-+    if check_include "nvmm.h" ; then
-+        nvmm="yes"
-+	LIBS="-lnvmm $LIBS"
-+    else
-+        if test "$nvmm" = "yes"; then
-+            feature_not_found "NVMM" "NVMM is not available"
-+        fi
-+        nvmm="no"
-+    fi
-+fi
-+
-+##########################################
- # Sparse probe
- if test "$sparse" != "no" ; then
-   if has cgcc; then
-@@ -6404,6 +6436,7 @@ echo "KVM support       $kvm"
- echo "HAX support       $hax"
- echo "HVF support       $hvf"
- echo "WHPX support      $whpx"
-+echo "NVMM support      $nvmm"
- echo "TCG support       $tcg"
- if test "$tcg" = "yes" ; then
-     echo "TCG debug enabled $debug_tcg"
-@@ -7717,6 +7750,9 @@ fi
- if supported_whpx_target $target; then
-     echo "CONFIG_WHPX=y" >> $config_target_mak
- fi
-+if supported_nvmm_target $target; then
-+    echo "CONFIG_NVMM=y" >> $config_target_mak
-+fi
- if test "$target_bigendian" = "yes" ; then
-   echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
- fi
---- cpus.c.orig	2019-08-15 19:01:42.000000000 +0000
-+++ cpus.c
-@@ -41,6 +41,7 @@
- #include "sysemu/hax.h"
- #include "sysemu/hvf.h"
- #include "sysemu/whpx.h"
-+#include "sysemu/nvmm.h"
- #include "exec/exec-all.h"
- 
- #include "qemu/thread.h"
-@@ -1700,6 +1701,48 @@ static void *qemu_whpx_cpu_thread_fn(voi
-     return NULL;
- }
- 
-+static void *qemu_nvmm_cpu_thread_fn(void *arg)
-+{
-+    CPUState *cpu = arg;
-+    int r;
-+
-+    assert(nvmm_enabled());
-+
-+    rcu_register_thread();
-+
-+    qemu_mutex_lock_iothread();
-+    qemu_thread_get_self(cpu->thread);
-+    cpu->thread_id = qemu_get_thread_id();
-+    current_cpu = cpu;
-+
-+    r = nvmm_init_vcpu(cpu);
-+    if (r < 0) {
-+        fprintf(stderr, "nvmm_init_vcpu failed: %s\n", strerror(-r));
-+        exit(1);
-+    }
-+
-+    /* signal CPU creation */
-+    cpu->created = true;
-+    qemu_cond_signal(&qemu_cpu_cond);
-+
-+    do {
-+        if (cpu_can_run(cpu)) {
-+            r = nvmm_vcpu_exec(cpu);
-+            if (r == EXCP_DEBUG) {
-+                cpu_handle_guest_debug(cpu);
-+            }
-+        }
-+        qemu_wait_io_event(cpu);
-+    } while (!cpu->unplug || cpu_can_run(cpu));
-+
-+    nvmm_destroy_vcpu(cpu);
-+    cpu->created = false;
-+    qemu_cond_signal(&qemu_cpu_cond);
-+    qemu_mutex_unlock_iothread();
-+    rcu_unregister_thread();
-+    return NULL;
-+}
-+
- #ifdef _WIN32
- static void CALLBACK dummy_apc_func(ULONG_PTR unused)
- {
-@@ -2061,6 +2104,19 @@ static void qemu_whpx_start_vcpu(CPUStat
- #endif
- }
- 
-+static void qemu_nvmm_start_vcpu(CPUState *cpu)
-+{
-+    char thread_name[VCPU_THREAD_NAME_SIZE];
-+
-+    cpu->thread = g_malloc0(sizeof(QemuThread));
-+    cpu->halt_cond = g_malloc0(sizeof(QemuCond));
-+    qemu_cond_init(cpu->halt_cond);
-+    snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/NVMM",
-+             cpu->cpu_index);
-+    qemu_thread_create(cpu->thread, thread_name, qemu_nvmm_cpu_thread_fn,
-+                       cpu, QEMU_THREAD_JOINABLE);
-+}
-+
- static void qemu_dummy_start_vcpu(CPUState *cpu)
- {
-     char thread_name[VCPU_THREAD_NAME_SIZE];
-@@ -2101,6 +2157,8 @@ void qemu_init_vcpu(CPUState *cpu)
-         qemu_tcg_init_vcpu(cpu);
-     } else if (whpx_enabled()) {
-         qemu_whpx_start_vcpu(cpu);
-+    } else if (nvmm_enabled()) {
-+        qemu_nvmm_start_vcpu(cpu);
-     } else {
-         qemu_dummy_start_vcpu(cpu);
-     }
---- include/sysemu/hw_accel.h.orig	2019-08-15 19:01:42.000000000 +0000
-+++ include/sysemu/hw_accel.h
-@@ -15,6 +15,7 @@
- #include "sysemu/hax.h"
- #include "sysemu/kvm.h"
- #include "sysemu/whpx.h"
-+#include "sysemu/nvmm.h"
- 
- static inline void cpu_synchronize_state(CPUState *cpu)
- {
-@@ -27,6 +28,9 @@ static inline void cpu_synchronize_state
-     if (whpx_enabled()) {
-         whpx_cpu_synchronize_state(cpu);
-     }
-+    if (nvmm_enabled()) {
-+        nvmm_cpu_synchronize_state(cpu);
-+    }
- }
- 
- static inline void cpu_synchronize_post_reset(CPUState *cpu)
-@@ -40,6 +44,10 @@ static inline void cpu_synchronize_post_
-     if (whpx_enabled()) {
-         whpx_cpu_synchronize_post_reset(cpu);
-     }
-+    if (nvmm_enabled()) {
-+        nvmm_cpu_synchronize_post_reset(cpu);
-+    }
-+
- }
- 
- static inline void cpu_synchronize_post_init(CPUState *cpu)
-@@ -53,6 +61,9 @@ static inline void cpu_synchronize_post_
-     if (whpx_enabled()) {
-         whpx_cpu_synchronize_post_init(cpu);
-     }
-+    if (nvmm_enabled()) {
-+        nvmm_cpu_synchronize_post_init(cpu);
-+    }
- }
- 
- static inline void cpu_synchronize_pre_loadvm(CPUState *cpu)
-@@ -66,6 +77,9 @@ static inline void cpu_synchronize_pre_l
-     if (whpx_enabled()) {
-         whpx_cpu_synchronize_pre_loadvm(cpu);
-     }
-+    if (nvmm_enabled()) {
-+        nvmm_cpu_synchronize_pre_loadvm(cpu);
-+    }
- }
- 
- #endif /* QEMU_HW_ACCEL_H */
---- qemu-options.hx.orig	2019-08-15 19:01:43.000000000 +0000
-+++ qemu-options.hx
-@@ -31,7 +31,7 @@ DEF("machine", HAS_ARG, QEMU_OPTION_mach
-     "-machine [type=]name[,prop[=value][,...]]\n"
-     "                selects emulated machine ('-machine help' for list)\n"
-     "                property accel=accel1[:accel2[:...]] selects accelerator\n"
--    "                supported accelerators are kvm, xen, hax, hvf, whpx or tcg (default: tcg)\n"
-+    "                supported accelerators are kvm, xen, hax, hvf, nvmm, whpx or tcg (default: tcg)\n"
-     "                kernel_irqchip=on|off|split controls accelerated irqchip support (default=off)\n"
-     "                vmport=on|off|auto controls emulation of vmport (default: auto)\n"
-     "                kvm_shadow_mem=size of KVM shadow MMU in bytes\n"
-@@ -66,7 +66,7 @@ Supported machine properties are:
- @table @option
- @item accel=@var{accels1}[:@var{accels2}[:...]]
- This is used to enable an accelerator. Depending on the target architecture,
--kvm, xen, hax, hvf, whpx or tcg can be available. By default, tcg is used. If there is
-+kvm, xen, hax, hvf, nvmm, whpx or tcg can be available. By default, tcg is used. If there is
- more than one accelerator specified, the next one is used if the previous one
- fails to initialize.
- @item kernel_irqchip=on|off
---- target/i386/helper.c.orig	2019-08-15 19:01:43.000000000 +0000
-+++ target/i386/helper.c
-@@ -978,7 +978,7 @@ void cpu_report_tpr_access(CPUX86State *
-     X86CPU *cpu = env_archcpu(env);
-     CPUState *cs = env_cpu(env);
- 
--    if (kvm_enabled() || whpx_enabled()) {
-+    if (kvm_enabled() || whpx_enabled() || nvmm_enabled()) {
-         env->tpr_access_type = access;
- 
-         cpu_interrupt(cs, CPU_INTERRUPT_TPR);
---- target/i386/Makefile.objs.orig	2019-08-15 19:01:43.000000000 +0000
-+++ target/i386/Makefile.objs
-@@ -17,6 +17,7 @@ obj-$(CONFIG_HAX) += hax-all.o hax-mem.o
- endif
- obj-$(CONFIG_HVF) += hvf/
- obj-$(CONFIG_WHPX) += whpx-all.o
-+obj-$(CONFIG_NVMM) += nvmm-all.o
- endif
- obj-$(CONFIG_SEV) += sev.o
- obj-$(call lnot,$(CONFIG_SEV)) += sev-stub.o
diff --git a/qemu-nvmm/patches/patch-roms_u-boot_tools_imx8m__image.sh b/qemu-nvmm/patches/patch-roms_u-boot_tools_imx8m__image.sh
deleted file mode 100644
index 177dfaf2e8..0000000000
--- a/qemu-nvmm/patches/patch-roms_u-boot_tools_imx8m__image.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-$NetBSD: patch-roms_u-boot_tools_imx8m__image.sh,v 1.1 2019/04/24 13:59:32 ryoon Exp $
-
-* Improve POSIX shell portability
-
---- roms/u-boot/tools/imx8m_image.sh.orig	2019-04-23 18:16:46.000000000 +0000
-+++ roms/u-boot/tools/imx8m_image.sh
-@@ -12,7 +12,7 @@ blobs=`awk '/^SIGNED_HDMI/ {print $2} /^
- for f in $blobs; do
- 	tmp=$srctree/$f
- 
--	if [ $f == "spl/u-boot-spl-ddr.bin" ] || [ $f == "u-boot.itb" ]; then
-+	if [ $f = "spl/u-boot-spl-ddr.bin" ] || [ $f = "u-boot.itb" ]; then
- 		continue
- 	fi
- 
-@@ -28,7 +28,7 @@ for f in $blobs; do
- 	sed -in "s;$f;$tmp;" $file
- done
- 
--if [ $post_process == 1 ]; then
-+if [ $post_process = 1 ]; then
- 	if [ -f $srctree/lpddr4_pmu_train_1d_imem.bin ]; then
- 		objcopy -I binary -O binary --pad-to 0x8000 --gap-fill=0x0 $srctree/lpddr4_pmu_train_1d_imem.bin lpddr4_pmu_train_1d_imem_pad.bin
- 		objcopy -I binary -O binary --pad-to 0x4000 --gap-fill=0x0 $srctree/lpddr4_pmu_train_1d_dmem.bin lpddr4_pmu_train_1d_dmem_pad.bin


Home | Main Index | Thread Index | Old Index