diff options
author | jimharris <jimharris@FreeBSD.org> | 2013-11-05 15:54:52 +0000 |
---|---|---|
committer | jimharris <jimharris@FreeBSD.org> | 2013-11-05 15:54:52 +0000 |
commit | 76e64e88a61d81b3667d049cb17dda24961289b3 (patch) | |
tree | aa2eb0036b0badb79837e445abaaf44045a626d7 | |
parent | e0562150fc1b95c93fd8f4cf4d578c184b61ec77 (diff) | |
download | FreeBSD-src-76e64e88a61d81b3667d049cb17dda24961289b3.zip FreeBSD-src-76e64e88a61d81b3667d049cb17dda24961289b3.tar.gz |
MFC r257534:
Create a unique unit number for each controller and namespace cdev.
Sponsored by: Intel
Approved by: re (glebius)
-rw-r--r-- | sys/dev/nvme/nvme_ctrlr.c | 4 | ||||
-rw-r--r-- | sys/dev/nvme/nvme_ns.c | 11 |
2 files changed, 11 insertions, 4 deletions
diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c index 322d5a4..de037b7 100644 --- a/sys/dev/nvme/nvme_ctrlr.c +++ b/sys/dev/nvme/nvme_ctrlr.c @@ -1150,8 +1150,8 @@ intx: if (status != 0) return (status); - ctrlr->cdev = make_dev(&nvme_ctrlr_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, - "nvme%d", device_get_unit(dev)); + ctrlr->cdev = make_dev(&nvme_ctrlr_cdevsw, device_get_unit(dev), + UID_ROOT, GID_WHEEL, 0600, "nvme%d", device_get_unit(dev)); if (ctrlr->cdev == NULL) return (ENXIO); diff --git a/sys/dev/nvme/nvme_ns.c b/sys/dev/nvme/nvme_ns.c index 24e0779..ed2214d 100644 --- a/sys/dev/nvme/nvme_ns.c +++ b/sys/dev/nvme/nvme_ns.c @@ -492,6 +492,7 @@ nvme_ns_construct(struct nvme_namespace *ns, uint16_t id, struct nvme_controller *ctrlr) { struct nvme_completion_poll_status status; + int unit; ns->ctrlr = ctrlr; ns->id = id; @@ -553,6 +554,12 @@ nvme_ns_construct(struct nvme_namespace *ns, uint16_t id, if (ns->cdev != NULL) return (0); + /* + * Namespace IDs start at 1, so we need to subtract 1 to create a + * correct unit number. + */ + unit = device_get_unit(ctrlr->dev) * NVME_MAX_NAMESPACES + ns->id - 1; + /* * MAKEDEV_ETERNAL was added in r210923, for cdevs that will never * be destroyed. This avoids refcounting on the cdev object. @@ -560,11 +567,11 @@ nvme_ns_construct(struct nvme_namespace *ns, uint16_t id, * surprise removal nor namespace deletion. */ #ifdef MAKEDEV_ETERNAL_KLD - ns->cdev = make_dev_credf(MAKEDEV_ETERNAL_KLD, &nvme_ns_cdevsw, 0, + ns->cdev = make_dev_credf(MAKEDEV_ETERNAL_KLD, &nvme_ns_cdevsw, unit, NULL, UID_ROOT, GID_WHEEL, 0600, "nvme%dns%d", device_get_unit(ctrlr->dev), ns->id); #else - ns->cdev = make_dev_credf(0, &nvme_ns_cdevsw, 0, + ns->cdev = make_dev_credf(0, &nvme_ns_cdevsw, unit, NULL, UID_ROOT, GID_WHEEL, 0600, "nvme%dns%d", device_get_unit(ctrlr->dev), ns->id); #endif |