diff options
author | 2020-03-02 16:31:22 +0000 | |
---|---|---|
committer | 2020-03-02 16:31:22 +0000 | |
commit | 98b2ae82cacc0074c17e74a51d6c0f0f9fb1ba30 (patch) | |
tree | d7eb920e0b06eb0d7427097b183b6b3c6b106f83 | |
parent | Fix endian swapping of trb_flags and trb_status in xhci(4). (diff) | |
download | wireguard-openbsd-98b2ae82cacc0074c17e74a51d6c0f0f9fb1ba30.tar.xz wireguard-openbsd-98b2ae82cacc0074c17e74a51d6c0f0f9fb1ba30.zip |
Shuffle logic a bit to make sizes/limits more obvious.
No functional change.
-rw-r--r-- | sys/dev/ic/nvme.c | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/sys/dev/ic/nvme.c b/sys/dev/ic/nvme.c index 5c301ef9e9e..b6583858f64 100644 --- a/sys/dev/ic/nvme.c +++ b/sys/dev/ic/nvme.c @@ -1,4 +1,4 @@ -/* $OpenBSD: nvme.c,v 1.69 2020/03/01 14:10:56 krw Exp $ */ +/* $OpenBSD: nvme.c,v 1.70 2020/03/02 16:31:22 krw Exp $ */ /* * Copyright (c) 2014 David Gwynne <dlg@openbsd.org> @@ -274,7 +274,6 @@ nvme_attach(struct nvme_softc *sc) struct scsibus_attach_args saa; u_int64_t cap; u_int32_t reg; - u_int mps = PAGE_SHIFT; u_int nccbs = 0; mtx_init(&sc->sc_ccb_mtx, IPL_BIO); @@ -297,13 +296,14 @@ nvme_attach(struct nvme_softc *sc) 1 << NVME_CAP_MPSMIN(cap), 1 << PAGE_SHIFT); return (1); } - if (NVME_CAP_MPSMAX(cap) < mps) - mps = NVME_CAP_MPSMAX(cap); + if (NVME_CAP_MPSMAX(cap) < PAGE_SHIFT) + sc->sc_mps = 1 << NVME_CAP_MPSMAX(cap); + else + sc->sc_mps = 1 << PAGE_SHIFT; sc->sc_rdy_to = NVME_CAP_TO(cap); - sc->sc_mps = 1 << mps; sc->sc_mdts = MAXPHYS; - sc->sc_max_sgl = 2; + sc->sc_max_sgl = sc->sc_mdts / sc->sc_mps; if (nvme_disable(sc) != 0) { printf("%s: unable to disable controller\n", DEVNAME(sc)); @@ -332,9 +332,7 @@ nvme_attach(struct nvme_softc *sc) goto disable; } - /* we know how big things are now */ - sc->sc_max_sgl = sc->sc_mdts / sc->sc_mps; - + /* We now know the real values of sc_mdts and sc_max_sgl. */ nvme_ccbs_free(sc, nccbs); if (nvme_ccbs_alloc(sc, 64) != 0) { printf("%s: unable to allocate ccbs\n", DEVNAME(sc)); @@ -1013,13 +1011,12 @@ nvme_q_complete(struct nvme_softc *sc, struct nvme_queue *q) } int -nvme_identify(struct nvme_softc *sc, u_int mps) +nvme_identify(struct nvme_softc *sc, u_int mpsmin) { char sn[41], mn[81], fr[17]; struct nvm_identify_controller *identify; struct nvme_dmamem *mem; struct nvme_ccb *ccb; - u_int mdts; int rv = 1; ccb = nvme_ccb_get(sc); @@ -1051,9 +1048,10 @@ nvme_identify(struct nvme_softc *sc, u_int mps) printf("%s: %s, firmware %s, serial %s\n", DEVNAME(sc), mn, fr, sn); if (identify->mdts > 0) { - mdts = (1 << identify->mdts) * (1 << mps); - if (mdts < sc->sc_mdts) - sc->sc_mdts = mdts; + sc->sc_mdts = (1 << identify->mdts) * (1 << mpsmin); + if (sc->sc_mdts > MAXPHYS) + sc->sc_mdts = MAXPHYS; + sc->sc_max_sgl = sc->sc_mdts / sc->sc_mps; } sc->sc_nn = lemtoh32(&identify->nn); |