From nobody Fri Jun 16 06:14:19 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 4Qj84q49h9z4fGZD; Fri, 16 Jun 2023 06:14:19 +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 4Qj84q31Hdz3qR1; Fri, 16 Jun 2023 06:14:19 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1686896059; 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=cJ1plMSe7BqQf/5C3py8MynClIljKbDSbkuyIjF2Bus=; b=SywCda7GCgOaUq501mfzIbwhVh4xKtsfo9AO6IRQQzBX4BdAX06Ov5NgA/gtSpmJ/nnRW+ 7zgZw5iMWyLgue3bji23VGQffKDZwA8jME/ECLkqtvSVP3B8jdvY+v7lBve3utemc6itJn W67o67CJaZSB2afp2UyehB9/nlqszPVYBXyNVu3bNq3jOh/7PJunlBzb+jl6fthKoHiIR3 H55hvbT/IBndPxyKCnWiitrTosGYv+hT31sTZBRDk74zQLYZZ6guxKrX4+KpUTZrMC3I7P 0JyBj7p0Z/PPcXAA25/fi6ems7+IBYK8JPWIxvyRLTgmNhq852Oy+m/pYOe3vw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1686896059; 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=cJ1plMSe7BqQf/5C3py8MynClIljKbDSbkuyIjF2Bus=; b=upiXqYO5HVmUYMBty4cEniqpkqb0qZjr1Lpmc3o24q3xHgf6jEfKmr4Tj0uB9KoTrzOnog Dfc3q4F2Q+6zvuWpStbA+rEyXlp6xvTMgEsIygrFPQwyNm/2rppTfEZIWPUcIuk1gUtTA0 3kw++YCq9FCwhGo0l+uYA9XOd9zmrujZmWN37wa9QZC+t9tMKi75sxteqjEQpO9zkdXahw tGikNx7dGAfLi/I14hCGborBki5atHh4sj1URcAa8+hSypZJNPUqF/G3m9jCg63bsQRS8Z ZHhK8GqYLH2aTtDjdAnd79PaAHTM39eoIMsVfETgWhj4BHAP+QPe7wpJZfhMMg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1686896059; a=rsa-sha256; cv=none; b=yp24yKi6NRDffL34IQfxRBM3GfPnrXleNW8xnTB5lh8/Odp18pi7028/xEBZoZ1k4pbvGa g21zdCZ1qrlve72ZdEo3CWzNlwV0BS8Bn5FJw8weUoJZD7xjgK5D+/zHQ9QKHqXvOzupZZ 3dXY9Rj3J7Sji9bnrchTQ1cDYEpFtUg8KgTMnyFtWO3hpMEZU15g7iS7n3a3sYEuZ99LTO P5NSKfTypRgdTzhieJadSE5Ihe9dTTuVeTUkSnTxpFhSFnmAzeClkNAHdgMDc+mAIiYyA+ Cem5XiQUxUk5mDyM8DFGcerob1wRvIc4FUxMtO9fKH74kOziRrRL4s+KguF6CQ== 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 4Qj84q1qhSzHbL; Fri, 16 Jun 2023 06:14:19 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 35G6EJ7G035222; Fri, 16 Jun 2023 06:14:19 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 35G6EJhK035221; Fri, 16 Jun 2023 06:14:19 GMT (envelope-from git) Date: Fri, 16 Jun 2023 06:14:19 GMT Message-Id: <202306160614.35G6EJhK035221@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: =?utf-8?Q?Corvin=20K=C3=B6hne?= Subject: git: 1115cdcf7af1 - main - 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/main X-Git-Reftype: branch X-Git-Commit: 1115cdcf7af12fd06ca255b981cb579a7bb7a147 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by corvink: URL: https://cgit.FreeBSD.org/src/commit/?id=1115cdcf7af12fd06ca255b981cb579a7bb7a147 commit 1115cdcf7af12fd06ca255b981cb579a7bb7a147 Author: Corvin Köhne AuthorDate: 2023-05-10 11:39:56 +0000 Commit: Corvin Köhne CommitDate: 2023-06-16 05:55:05 +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 --- 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 = {