From patchwork Tue Aug 11 14:10:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Kamil Rytarowski X-Patchwork-Id: 1343330 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=gmx.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=iuROyKxo; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4BQvvv17rYz9sTR for ; Wed, 12 Aug 2020 00:14:03 +1000 (AEST) Received: from localhost ([::1]:59578 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5V2O-0003G8-Nm for incoming@patchwork.ozlabs.org; Tue, 11 Aug 2020 10:14:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34920) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5V0j-0003FZ-8n for qemu-devel@nongnu.org; Tue, 11 Aug 2020 10:12:17 -0400 Received: from mout.gmx.net ([212.227.17.21]:55195) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5V0h-00010I-7K for qemu-devel@nongnu.org; Tue, 11 Aug 2020 10:12:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1597155118; bh=ZKmjV+nVw1aJ6gZD2QzOEI785zynAMn0St417dViqGo=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=iuROyKxoEcRyXQr8DcU4KbZuhSElkuMRVgcSe1YK9tequ8thuAx4vniTMmxsBdq4g WyOgH5QjqrVD9RIpMvJfaU1YyCsQhRlnv2YRTaJp7Huo2Pcg92bYmNCKWSxQVq2dZO eClQP3kEJcxsyOE9U+9u/2FDmqz6u9ngq+P5gYvw= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([89.79.191.25]) by mail.gmx.com (mrgmx105 [212.227.17.174]) with ESMTPSA (Nemesis) id 1MfYPY-1kcNz41Atc-00g0TP; Tue, 11 Aug 2020 16:11:58 +0200 From: Kamil Rytarowski To: rth@twiddle.net, ehabkost@redhat.com, slp@redhat.com, pbonzini@redhat.com, peter.maydell@linaro.org, philmd@redhat.com, max@m00nbsd.net, jmcneill@invisible.ca Subject: [PATCH v5 2/4] Add the NetBSD Virtual Machine Monitor accelerator. Date: Tue, 11 Aug 2020 16:10:47 +0200 Message-Id: <20200811141049.15824-2-n54@gmx.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200811141049.15824-1-n54@gmx.com> References: <20200811141049.15824-1-n54@gmx.com> MIME-Version: 1.0 X-Provags-ID: V03:K1:EBF400qziPdeoWj0QFP6WVI9R5fNOKzwzKBrXgrUIxATGfVGPYR G9A7FjxVbr1YVeepdsha67beeslF5MMlD09Z8QGvabhGtvpGwijY35IFfTS2BF/8BYI3RwS M8IA7NBxv5cWmNVjJ/KMKO/XhK7QsnOaXjLyM+JAjxz0d+mfJrOtIH1u5xti8Yt5ENx6+PN 5JF3Si9eyNPFYBv3MvtNA== X-UI-Out-Filterresults: notjunk:1;V03:K0:gUK/rav6dm8=:vufDX0i0Nod1+maNXyhLkk RWFccA/EVmDnJxYvkXZSR11QtI+gsGfWPwyGXrrD8pMBoXMbK9oHJK8H980dGTgSTOTD7TEJO YcS+ag9tei+wcxdnBFnfd+Xv8TPoe1MlXC0LKvZMBk9OMzs2dpO6W84mn7l9GSNu6Ui9d3gOJ Om22Bq3QYpMxVcwUGJeA+Yy/NcOMukw+RK+te77sbZ7x/cWUPtbO8l8bSjzo308qqNR+yB1Oi 2tenXU5hjG9t+XX+Z7BPHDdlIhsRSLg38Jnq8YcSYVm9Q0nGXnkryQBNYrfLPwGXMXLta/zIX rm3mEkuTW484tLi4LZry80aqJpAMlkC+EvFE+sNInK8cNTpXvXmRnA3ehA+aDB+uumVKQWgqM wzjmPSKnUi1hTSLGTqmTLtEgINgTv/euMh6g+mRyx+4VFrVM2yP4ZOM/9vWOs0y+EizJStv6J PILJFl8/rw1fMmQXNjF8HnK7rMK0KAMcueSJMjHfuKdcE3L43xmfXCGjIZ1e7g5cAFddazuAT GHPba1oNu+lXWeFsRXwGzFa4TNdK+3V8Uq74TQ36qFZ0i0Hk/C/jVAnUI/INC6hHWIWFsXYtf v1ZqAQ/JO4+E5aNpB8nj9aPZlINfttKsWjkjYKmP1Li8gaADEHZZKRYDwNhBxo7WY7BtMRfFD XhoNCim+gT4Kihd+sjLw15qwfy8EthzQGS3tMcOOYZVBcjdBhk+lAMA/OUxCOk4fvm3b7xDQB 9hZPr90CFNvwVuAKruvQfrl4gyZQoXMFaVvh6ZjR2diQFkhit+eeazae3wmD3rfxeG6Q80KC+ 4//djuf+pbx0fvZTytCR1C6gp5/YaJx3WUZPt61WY+jVlc9NcK0Yqsf67H9P2OKrTHuVIuk/7 l80gbmwlz2Gmbw5mTw68ziUZ4E3bw+hVtz+C1kaE6/0ox3QQhsRCyh38P8Xyvb8wNdgi/jjbx TEKCp4CLvJ218+o7o4Ki6E/lSUYA59aAH831sUZ0JrESFbTIuukigZa02DIAgtxyXkbUXkDHP NPhmSBRimZm6jMvb20/zDtJgp7j/j11x3XYsXA47jXJhyo8SlxbxDJjEsjTTcXW/AVZA0nmok piyeXJ59fczfnZJTKqClQDsnG8NxLAKW6dp7mV/1kCpaivH4wSqSNLDb1zmaLKxyMCDzvOJl6 +PW8CsW9ei9iWnHTIfCgCCnPv31KTnjigYRVpKC1onTk57EhSsbYmVnWcaUciSy5/fv9GRGIA 9wko4sWepKTlGiTgL Received-SPF: pass client-ip=212.227.17.21; envelope-from=n54@gmx.com; helo=mout.gmx.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/11 10:12:11 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] X-Spam_score_int: -32 X-Spam_score: -3.3 X-Spam_bar: --- X-Spam_report: (-3.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kamil Rytarowski , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Maxime Villard Introduces the configure support for the new NetBSD Virtual Machine Monitor that allows for hypervisor acceleration from usermode components on the NetBSD platform. Signed-off-by: Maxime Villard Signed-off-by: Kamil Rytarowski Reviewed-by: Sergio Lopez Reviewed-by: Philippe Mathieu-Daudé Tested-by: Jared McNeill --- configure | 37 +++++++++++++++++++++++++++++++++++++ qemu-options.hx | 10 +++++----- 2 files changed, 42 insertions(+), 5 deletions(-) -- 2.28.0 diff --git a/configure b/configure index 2acc4d1465..fb9ffba2bf 100755 --- a/configure +++ b/configure @@ -246,6 +246,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) @@ -273,6 +284,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 } @@ -395,6 +407,7 @@ kvm="no" hax="no" hvf="no" whpx="no" +nvmm="no" rdma="" pvrdma="" gprof="no" @@ -847,6 +860,7 @@ DragonFly) NetBSD) bsd="yes" hax="yes" + nvmm="yes" make="${MAKE-gmake}" audio_drv_list="oss try-sdl" audio_possible_drivers="oss sdl" @@ -1233,6 +1247,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" @@ -1879,6 +1897,7 @@ disabled with --disable-FEATURE, default is enabled if available: 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 @@ -2965,6 +2984,20 @@ if test "$whpx" != "no" ; then fi 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 @@ -6934,6 +6967,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" @@ -8332,6 +8366,9 @@ fi if test "$target_aligned_only" = "yes" ; then echo "TARGET_ALIGNED_ONLY=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 diff --git a/qemu-options.hx b/qemu-options.hx index 708583b4ce..697accaa7e 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -26,7 +26,7 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \ "-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" " vmport=on|off|auto controls emulation of vmport (default: auto)\n" " dump-guest-core=on|off include guest memory in a core dump (default=on)\n" " mem-merge=on|off controls memory merge support (default: on)\n" @@ -58,7 +58,7 @@ SRST ``accel=accels1[:accels2[:...]]`` This is used to enable an accelerator. Depending on the target - architecture, kvm, xen, hax, hvf, whpx or tcg can be available. + architecture, 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. @@ -119,7 +119,7 @@ ERST DEF("accel", HAS_ARG, QEMU_OPTION_accel, "-accel [accel=]accelerator[,prop[=value][,...]]\n" - " select accelerator (kvm, xen, hax, hvf, whpx or tcg; use 'help' for a list)\n" + " select accelerator (kvm, xen, hax, hvf, nvmm, whpx or tcg; use 'help' for a list)\n" " igd-passthru=on|off (enable Xen integrated Intel graphics passthrough, default=off)\n" " kernel-irqchip=on|off|split controls accelerated irqchip support (default=on)\n" " kvm-shadow-mem=size of KVM shadow MMU in bytes\n" @@ -128,8 +128,8 @@ DEF("accel", HAS_ARG, QEMU_OPTION_accel, SRST ``-accel name[,prop=value[,...]]`` 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 more than one accelerator + architecture, 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.