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