From nobody Fri Aug 18 07:41:52 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4RRv2n5NYXz4qrJ5; Fri, 18 Aug 2023 07:41:53 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4RRv2m4tQhz3GN3; Fri, 18 Aug 2023 07:41:52 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1692344512; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=sUnZLy3KcVE+sdeo6K5RDBf3zzbeH64cHXM9lMNnVL4=; b=BGouMFjMGGnvuVZIWnD5/XliNmxP6sKQKwSJzKjeGnBnHiHAES7MCaIPDaBx0XXFm0bWO1 ongB6Ul4Ixwel5G7Qn176cQbSG/SRUjklHCInaXb4ndEjgd4Y/kYoDLWes9/3rm1E2pzxh Uf1aNAZ2+a/JTnTNt/KIOGlSP4IAQqRpUSqght5aLticQJLWrprZxAWiW3x5JldHOw53dp c+KWVqkMm9v3j1tR05F9q1ND2y5jnMX32u4lTI43zSYnH6ShWutqADWbtkoOn26TRKqY1Z LCIXqPSGTv6/5axvpBwwdoarSO7eTRdhoOlcyhWYNR2NL52fJ5BNgtLvvhLeMw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1692344512; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=sUnZLy3KcVE+sdeo6K5RDBf3zzbeH64cHXM9lMNnVL4=; b=RonSsoRu0+IOufBh2eyek3udCSvzUIf+gWHkk8I34ULHqCvJv9EUFJQicsCPz4mBiltTYf xt2C5isHL+baNsITeFuud2eK84LoHLnKAvq8cB+ejzsv8FD39IegrjaNN19p3ZTpw5+sYf AY+3qXJHE+3SVOXb6iQva7uL7IxniFodQ+H8VPhjNUBU2dXuP8P3G0hn7v3v5UfRj2xY+8 h+xcN26NgxYKtfyq068sRT+ntEffLAjXjovy+xove/TeB1I+AnsVMUB0e9zmUDQ73HUVRR QwTMa7EEi1D/EI9JhXfZCOB+GcdacP4Y18AFYKh/EcVKpFeFM8tGIE668uvbZA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1692344512; a=rsa-sha256; cv=none; b=SFccRgmUCW204S51sz/VAC0IY8fh/em1dEojbtagu1JENt8hML/T5ruY+OOjaCsGRm3Y1e a509q/TQ3POL4exCKrwHFVRZjPvEVSD7I8q4uL8FQWAOnXC2Z1u0FOvxNPtysYxu6NCRAP NP8kxVurYII4WGuvOLYz/x8j+KfYm7ZYiHwkFwf26dYNH4smoWs/Zo3C2nkUYqyzeFgzYM kVJxYQAVk/ICM90bCk58mbTVBiMny4gbrXYq11m9v22Dk6ZcXncQVf7oTI/ATug0fLaz/L fES3Mxix256cntsl2wLtjGW2Spp3MPDtrTxgKaifUhVDTsMwig+2thzZ+q39fw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4RRv2m3zXRz16V3; Fri, 18 Aug 2023 07:41:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 37I7fqeK066934; Fri, 18 Aug 2023 07:41:52 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 37I7fqi5066931; Fri, 18 Aug 2023 07:41:52 GMT (envelope-from git) Date: Fri, 18 Aug 2023 07:41:52 GMT Message-Id: <202308180741.37I7fqi5066931@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Corvin =?utf-8?Q?K=C3=B6hne?= Subject: git: 04e774846c9d - stable/13 - bhyve: copy OpRegion into guest memory List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: corvink X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 04e774846c9d2e37287a1ddd6e7b0cde5d994ed1 Auto-Submitted: auto-generated The branch stable/13 has been updated by corvink: URL: https://cgit.FreeBSD.org/src/commit/?id=04e774846c9d2e37287a1ddd6e7b0cde5d994ed1 commit 04e774846c9d2e37287a1ddd6e7b0cde5d994ed1 Author: Corvin Köhne AuthorDate: 2023-05-10 11:39:56 +0000 Commit: Corvin Köhne CommitDate: 2023-08-18 07:32:08 +0000 bhyve: copy OpRegion into guest memory This makes the OpRegion accessible by the guest. However, the guest doesn't know the address of the OpRegion. This will be fixed by an upcoming commit. The range of the OpRegion is added to the e820 table. This allows the guest firmware to easily pick up this range and to reserve it properly. Reviewed by: markj MFC after: 1 week Sponsored by: Beckhoff Automation GmbH & Co. KG Differential Revision: https://reviews.freebsd.org/D40041 (cherry picked from commit 1115cdcf7af12fd06ca255b981cb579a7bb7a147) --- usr.sbin/bhyve/pci_gvt-d.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/usr.sbin/bhyve/pci_gvt-d.c b/usr.sbin/bhyve/pci_gvt-d.c index fd3b48c3e5b7..4616bc84d275 100644 --- a/usr.sbin/bhyve/pci_gvt-d.c +++ b/usr.sbin/bhyve/pci_gvt-d.c @@ -222,8 +222,40 @@ gvt_d_setup_opregion(struct pci_devinst *const pi) opregion->len = header->size * KB; munmap(header, sizeof(header)); + opregion->hva = mmap(NULL, opregion->len * KB, PROT_READ, MAP_SHARED, + memfd, opregion->hpa); + if (opregion->hva == MAP_FAILED) { + warn("%s: Unable to map host OpRegion", __func__); + close(memfd); + return (-1); + } close(memfd); + opregion->gpa = gvt_d_alloc_mmio_memory(opregion->hpa, opregion->len, + E820_ALIGNMENT_NONE, E820_TYPE_NVS); + if (opregion->gpa == 0) { + warnx( + "%s: Unable to add OpRegion to E820 table (hpa 0x%lx len 0x%lx)", + __func__, opregion->hpa, opregion->len); + e820_dump_table(); + return (-1); + } + opregion->gva = vm_map_gpa(pi->pi_vmctx, opregion->gpa, opregion->len); + if (opregion->gva == NULL) { + warnx("%s: Unable to map guest OpRegion", __func__); + return (-1); + } + if (opregion->gpa != opregion->hpa) { + /* + * A 1:1 host to guest mapping is not required but this could + * change in the future. + */ + warnx( + "Warning: Unable to reuse host address of OpRegion. GPU passthrough might not work properly."); + } + + memcpy(opregion->gva, opregion->hva, opregion->len); + return (0); } @@ -247,8 +279,18 @@ done: } static void -gvt_d_deinit(struct pci_devinst *const pi __unused) +gvt_d_deinit(struct pci_devinst *const pi) { + struct passthru_softc *sc; + struct passthru_mmio_mapping *opregion; + + sc = pi->pi_arg; + + opregion = passthru_get_mmio(sc, GVT_D_MAP_OPREGION); + + /* HVA is only set, if it's initialized */ + if (opregion->hva) + munmap((void *)opregion->hva, opregion->len); } static struct passthru_dev gvt_d_dev = {