git: 32557d16e2c3 - main - bhyve nvme: Add NQN value

From: Chuck Tuffli <chuck_at_FreeBSD.org>
Date: Thu, 12 Oct 2023 23:48:29 UTC
The branch main has been updated by chuck:

URL: https://cgit.FreeBSD.org/src/commit/?id=32557d16e2c3c24c04eccfafd895e1514dc65b35

commit 32557d16e2c3c24c04eccfafd895e1514dc65b35
Author:     Chuck Tuffli <chuck@FreeBSD.org>
AuthorDate: 2023-10-12 22:04:17 +0000
Commit:     Chuck Tuffli <chuck@FreeBSD.org>
CommitDate: 2023-10-12 22:08:05 +0000

    bhyve nvme: Add NQN value
    
    Add a NVMe Qualified Name (NQN) to the Controller Data structure using
    the "first format" (i.e., "... used by any organization that owns a
    domain name" Section 7.9 NVM-Express 1.4c 2021.06.28 Ratified).
    
    This avoids a Linux kernel warning about a missing or invalid NQN.
    
    Reviewed by:    jhb
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D42058
---
 usr.sbin/bhyve/pci_nvme.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/usr.sbin/bhyve/pci_nvme.c b/usr.sbin/bhyve/pci_nvme.c
index d1b15d6f3a3c..2fd49a84c768 100644
--- a/usr.sbin/bhyve/pci_nvme.c
+++ b/usr.sbin/bhyve/pci_nvme.c
@@ -514,6 +514,7 @@ static void
 pci_nvme_init_ctrldata(struct pci_nvme_softc *sc)
 {
 	struct nvme_controller_data *cd = &sc->ctrldata;
+	int ret;
 
 	cd->vid = 0xFB5D;
 	cd->ssvid = 0x0000;
@@ -583,6 +584,13 @@ pci_nvme_init_ctrldata(struct pci_nvme_softc *sc)
 	    NVME_CTRLR_DATA_FNA_FORMAT_ALL_SHIFT;
 
 	cd->vwc = NVME_CTRLR_DATA_VWC_ALL_NO << NVME_CTRLR_DATA_VWC_ALL_SHIFT;
+
+	ret = snprintf(cd->subnqn, sizeof(cd->subnqn),
+	    "nqn.2013-12.org.freebsd:bhyve-%s-%u-%u-%u",
+	    get_config_value("name"), sc->nsc_pi->pi_bus,
+	    sc->nsc_pi->pi_slot, sc->nsc_pi->pi_func);
+	if ((ret < 0) || ((unsigned)ret > sizeof(cd->subnqn)))
+		EPRINTLN("%s: error setting subnqn (%d)", __func__, ret);
 }
 
 static void
@@ -3309,7 +3317,6 @@ pci_nvme_init(struct pci_devinst *pi, nvlist_t *nvl)
 	pci_nvme_aen_init(sc);
 
 	pci_nvme_reset(sc);
-
 done:
 	return (error);
 }