diff options
author | jimharris <jimharris@FreeBSD.org> | 2013-04-12 17:41:24 +0000 |
---|---|---|
committer | jimharris <jimharris@FreeBSD.org> | 2013-04-12 17:41:24 +0000 |
commit | f877ea431a66684771bfaa630830899d78dce2f6 (patch) | |
tree | fb6bf1a0aca6783491a759a0d15129473c7b1303 | |
parent | d3af7eb2bf127dbb0d1bcb109e0febe6e27dfbde (diff) | |
download | FreeBSD-src-f877ea431a66684771bfaa630830899d78dce2f6.zip FreeBSD-src-f877ea431a66684771bfaa630830899d78dce2f6.tar.gz |
Add a mutex to each namespace, for general locking operations on the namespace.
Sponsored by: Intel
-rw-r--r-- | sys/dev/nvme/nvme_ns.c | 11 | ||||
-rw-r--r-- | sys/dev/nvme/nvme_private.h | 1 |
2 files changed, 12 insertions, 0 deletions
diff --git a/sys/dev/nvme/nvme_ns.c b/sys/dev/nvme/nvme_ns.c index 0051699..b492132 100644 --- a/sys/dev/nvme/nvme_ns.c +++ b/sys/dev/nvme/nvme_ns.c @@ -300,6 +300,17 @@ nvme_ns_construct(struct nvme_namespace *ns, uint16_t id, ns->ctrlr = ctrlr; ns->id = id; + /* + * Namespaces are reconstructed after a controller reset, so check + * to make sure we only call mtx_init once on each mtx. + * + * TODO: Move this somewhere where it gets called at controller + * construction time, which is not invoked as part of each + * controller reset. + */ + if (!mtx_initialized(&ns->lock)) + mtx_init(&ns->lock, "nvme ns lock", NULL, MTX_DEF); + #ifdef CHATHAM2 if (pci_get_devid(ctrlr->dev) == CHATHAM_PCI_ID) nvme_ns_populate_chatham_data(ns); diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h index 9fbef6d..c78b1ea 100644 --- a/sys/dev/nvme/nvme_private.h +++ b/sys/dev/nvme/nvme_private.h @@ -238,6 +238,7 @@ struct nvme_namespace { uint16_t flags; struct cdev *cdev; void *cons_cookie[NVME_MAX_CONSUMERS]; + struct mtx lock; }; /* |