From nobody Mon Feb 21 21:57:54 2022 X-Original-To: dev-commits-src-branches@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 E6C6519EADE8; Mon, 21 Feb 2022 21:57:55 +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 4K2bl71458z4gP1; Mon, 21 Feb 2022 21:57:54 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1645480675; 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=EJQNInqLSSLCjR3hJJ4hsKQ2VeKNPE2/JiTOYiZPCvQ=; b=xZy/Ig3t1nL/gtW7A1qznBxLJIBTZ3+0wNSc0Gy7Ga2LXJwROrMpm6bphpdkuEXDogJ7YE AzcTbeq56r2Wc6JaNm6XALh8frittzloOMozClig9Bh2osj2uB551t7Q96K4idnWetR+73 o8XM2w7Ho+XVOIHArAutUb78/GW/KzWspAs9h3rFmpsumYG/gYt70CBFQmpT6GsB5nMhHa NcMQtRvdfRafgfxUOoMOxJLkpp5Uax9wYGua11jWcKyglYwnvfOTEVRF1b0sotSl1Q3QES xXBkFlmHxoTJt3eVnrWPXMhoodh5S0Y7U37KuzYmfUciIym5fkPIeIH3KKtSTg== 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 76FD418322; Mon, 21 Feb 2022 21:57:54 +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 21LLvseN052064; Mon, 21 Feb 2022 21:57:54 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 21LLvsw3052063; Mon, 21 Feb 2022 21:57:54 GMT (envelope-from git) Date: Mon, 21 Feb 2022 21:57:54 GMT Message-Id: <202202212157.21LLvsw3052063@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Chuck Tuffli Subject: git: 8f65e94045f4 - stable/13 - bhyve nvme: Implement Log Page Offset List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: chuck X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 8f65e94045f492a665523ac5b224861be9fccbf0 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1645480675; 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=EJQNInqLSSLCjR3hJJ4hsKQ2VeKNPE2/JiTOYiZPCvQ=; b=ndfmGU2EI+9o53ibQ2zvACmL1tI+R0IK6k0KgFpbrxV3OFXcW2DY025oI4V10OOMJmroAb IAIc72OCijA4XFTy3yDcV56digRr0Vix8MEWUh6rKaPTCRfX1xjAfq5/PQS3zODjJkx8m6 aKNZwcnvXBNI0OiCnKKf98UosWEGxqvK0j+fZ50qQ/xpdC5H3pNRUeZE/6LC/YUW1AsVvV q6+3h3zLjnD+pqi4/9PQNT+Pu1dtIllIdkufDJo/B3zg33zNQIPo7AL6LzxzNoYO3dXvxR 3HNv0W1VcxPKmZ/p1I71TmWWLR+2pr49KAT5PbpKmPN/3oj9Bfr6h42DM3a+9g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1645480675; a=rsa-sha256; cv=none; b=uu19flmKK4I0t0dJhhA4a0BGT6iibCsBMQJUgeRA+4jfR7MD5iMtQ9chq+RO4+LZHAZkf3 RJJe69U9Iv7deqe3/rJzolhxjsxuO5PgpvlniTncHqswOXeR3Y5ayfBrJ6iIazGGO54Hli a+pKDZwLjlMsp5CgvFIOlzVtWaRuuRSBNQ/6jspvIcjZ9j6/C4GW9BS6wxzzjT3mpEdDW9 Hn2QTjTUyPxTrov6Vzr9ghW/4agy0atNc/70py1wrZURgXZggB8YR3jZClj9pds8wrr8TS g+U0ywatl6tAUdyveA4cg4pas5fgj5ys8yVR+aOnXT3wBT/PpaEmscAJyER+pw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by chuck: URL: https://cgit.FreeBSD.org/src/commit/?id=8f65e94045f492a665523ac5b224861be9fccbf0 commit 8f65e94045f492a665523ac5b224861be9fccbf0 Author: Chuck Tuffli AuthorDate: 2022-01-30 07:06:46 +0000 Commit: Chuck Tuffli CommitDate: 2022-02-22 03:25:51 +0000 bhyve nvme: Implement Log Page Offset Modify the Get Log Page command to parse the Log Page Offset fields to support more recent versions of the NVMe specification. Fixes various tests for UNH Test 1.3.* (cherry picked from commit b1b2a4d9e87e0eec413781e4580cd14edf74af7f) --- usr.sbin/bhyve/pci_nvme.c | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/usr.sbin/bhyve/pci_nvme.c b/usr.sbin/bhyve/pci_nvme.c index e1de57c26e84..78af3077f623 100644 --- a/usr.sbin/bhyve/pci_nvme.c +++ b/usr.sbin/bhyve/pci_nvme.c @@ -1329,6 +1329,7 @@ static int nvme_opc_get_log_page(struct pci_nvme_softc* sc, struct nvme_command* command, struct nvme_completion* compl) { + uint64_t logoff; uint32_t logsize; uint8_t logpage = command->cdw10 & 0xFF; @@ -1342,15 +1343,28 @@ nvme_opc_get_log_page(struct pci_nvme_softc* sc, struct nvme_command* command, */ logsize = ((command->cdw11 << 16) | (command->cdw10 >> 16)) + 1; logsize *= sizeof(uint32_t); + logoff = ((uint64_t)(command->cdw13) << 32) | command->cdw12; switch (logpage) { case NVME_LOG_ERROR: + if (logoff >= sizeof(sc->err_log)) { + pci_nvme_status_genc(&compl->status, + NVME_SC_INVALID_FIELD); + break; + } + nvme_prp_memcpy(sc->nsc_pi->pi_vmctx, command->prp1, - command->prp2, (uint8_t *)&sc->err_log, - MIN(logsize, sizeof(sc->err_log)), + command->prp2, (uint8_t *)&sc->err_log + logoff, + MIN(logsize - logoff, sizeof(sc->err_log)), NVME_COPY_TO_PRP); break; case NVME_LOG_HEALTH_INFORMATION: + if (logoff >= sizeof(sc->health_log)) { + pci_nvme_status_genc(&compl->status, + NVME_SC_INVALID_FIELD); + break; + } + pthread_mutex_lock(&sc->mtx); memcpy(&sc->health_log.data_units_read, &sc->read_data_units, sizeof(sc->health_log.data_units_read)); @@ -1363,20 +1377,32 @@ nvme_opc_get_log_page(struct pci_nvme_softc* sc, struct nvme_command* command, pthread_mutex_unlock(&sc->mtx); nvme_prp_memcpy(sc->nsc_pi->pi_vmctx, command->prp1, - command->prp2, (uint8_t *)&sc->health_log, - MIN(logsize, sizeof(sc->health_log)), + command->prp2, (uint8_t *)&sc->health_log + logoff, + MIN(logsize - logoff, sizeof(sc->health_log)), NVME_COPY_TO_PRP); break; case NVME_LOG_FIRMWARE_SLOT: + if (logoff >= sizeof(sc->fw_log)) { + pci_nvme_status_genc(&compl->status, + NVME_SC_INVALID_FIELD); + break; + } + nvme_prp_memcpy(sc->nsc_pi->pi_vmctx, command->prp1, - command->prp2, (uint8_t *)&sc->fw_log, - MIN(logsize, sizeof(sc->fw_log)), + command->prp2, (uint8_t *)&sc->fw_log + logoff, + MIN(logsize - logoff, sizeof(sc->fw_log)), NVME_COPY_TO_PRP); break; case NVME_LOG_CHANGED_NAMESPACE: + if (logoff >= sizeof(sc->ns_log)) { + pci_nvme_status_genc(&compl->status, + NVME_SC_INVALID_FIELD); + break; + } + nvme_prp_memcpy(sc->nsc_pi->pi_vmctx, command->prp1, - command->prp2, (uint8_t *)&sc->ns_log, - MIN(logsize, sizeof(sc->ns_log)), + command->prp2, (uint8_t *)&sc->ns_log + logoff, + MIN(logsize - logoff, sizeof(sc->ns_log)), NVME_COPY_TO_PRP); memset(&sc->ns_log, 0, sizeof(sc->ns_log)); break;