From: Christoph Hellwig <hch@lst.de> To: linux-nvme@lists.infradead.org Cc: Jens Axboe <axboe@kernel.dk>, Keith Busch <keith.busch@intel.com>, Sagi Grimberg <sagi@grimberg.me>, Hannes Reinecke <hare@suse.de>, linux-block@vger.kernel.org Subject: [PATCH 10/14] nvmet: mask pending AERs Date: Sat, 26 May 2018 12:27:31 +0200 [thread overview] Message-ID: <20180526102735.31404-11-hch@lst.de> (raw) In-Reply-To: <20180526102735.31404-1-hch@lst.de> Per section 5.2 of the NVMe 1.3 spec: "When the controller posts a completion queue entry for an outstanding Asynchronous Event Request command and thus reports an asynchronous event, subsequent events of that event type are automatically masked by the controller until the host clears that event. An event is cleared by reading the log page associated with that event using the Get Log Page command (see section 5.14)." Signed-off-by: Christoph Hellwig <hch@lst.de> --- drivers/nvme/target/admin-cmd.c | 1 + drivers/nvme/target/core.c | 2 ++ drivers/nvme/target/nvmet.h | 1 + 3 files changed, 4 insertions(+) diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cmd.c index 20d9ce5064f8..d7b6293e830b 100644 --- a/drivers/nvme/target/admin-cmd.c +++ b/drivers/nvme/target/admin-cmd.c @@ -141,6 +141,7 @@ static void nvmet_execute_get_log_changed_ns(struct nvmet_req *req) if (!status) status = nvmet_zero_sgl(req, len, req->data_len - len); ctrl->nr_changed_ns = 0; + clear_bit(NVME_AEN_CFG_NS_ATTR, &ctrl->aen_masked); mutex_unlock(&ctrl->lock); out: nvmet_req_complete(req, status); diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c index 53e2386b73cf..932bdc46cd5c 100644 --- a/drivers/nvme/target/core.c +++ b/drivers/nvme/target/core.c @@ -164,6 +164,8 @@ static void nvmet_ns_changed(struct nvmet_subsys *subsys, u32 nsid) nvmet_add_to_changed_ns_log(ctrl, nsid); if (!(READ_ONCE(ctrl->aen_enabled) & NVME_AEN_CFG_NS_ATTR)) continue; + if (test_and_set_bit(NVME_AEN_CFG_NS_ATTR, &ctrl->aen_masked)) + continue; nvmet_add_async_event(ctrl, NVME_AER_TYPE_NOTICE, NVME_AER_NOTICE_NS_CHANGED, NVME_LOG_CHANGED_NS); diff --git a/drivers/nvme/target/nvmet.h b/drivers/nvme/target/nvmet.h index 50c8300ea572..e63ab3c0c655 100644 --- a/drivers/nvme/target/nvmet.h +++ b/drivers/nvme/target/nvmet.h @@ -126,6 +126,7 @@ struct nvmet_ctrl { u32 kato; u32 aen_enabled; + unsigned long aen_masked; struct nvmet_req *async_event_cmds[NVMET_ASYNC_EVENTS]; unsigned int nr_async_event_cmds; struct list_head async_events; -- 2.17.0
WARNING: multiple messages have this Message-ID (diff)
From: hch@lst.de (Christoph Hellwig) Subject: [PATCH 10/14] nvmet: mask pending AERs Date: Sat, 26 May 2018 12:27:31 +0200 [thread overview] Message-ID: <20180526102735.31404-11-hch@lst.de> (raw) In-Reply-To: <20180526102735.31404-1-hch@lst.de> Per section 5.2 of the NVMe 1.3 spec: "When the controller posts a completion queue entry for an outstanding Asynchronous Event Request command and thus reports an asynchronous event, subsequent events of that event type are automatically masked by the controller until the host clears that event. An event is cleared by reading the log page associated with that event using the Get Log Page command (see section 5.14)." Signed-off-by: Christoph Hellwig <hch at lst.de> --- drivers/nvme/target/admin-cmd.c | 1 + drivers/nvme/target/core.c | 2 ++ drivers/nvme/target/nvmet.h | 1 + 3 files changed, 4 insertions(+) diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cmd.c index 20d9ce5064f8..d7b6293e830b 100644 --- a/drivers/nvme/target/admin-cmd.c +++ b/drivers/nvme/target/admin-cmd.c @@ -141,6 +141,7 @@ static void nvmet_execute_get_log_changed_ns(struct nvmet_req *req) if (!status) status = nvmet_zero_sgl(req, len, req->data_len - len); ctrl->nr_changed_ns = 0; + clear_bit(NVME_AEN_CFG_NS_ATTR, &ctrl->aen_masked); mutex_unlock(&ctrl->lock); out: nvmet_req_complete(req, status); diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c index 53e2386b73cf..932bdc46cd5c 100644 --- a/drivers/nvme/target/core.c +++ b/drivers/nvme/target/core.c @@ -164,6 +164,8 @@ static void nvmet_ns_changed(struct nvmet_subsys *subsys, u32 nsid) nvmet_add_to_changed_ns_log(ctrl, nsid); if (!(READ_ONCE(ctrl->aen_enabled) & NVME_AEN_CFG_NS_ATTR)) continue; + if (test_and_set_bit(NVME_AEN_CFG_NS_ATTR, &ctrl->aen_masked)) + continue; nvmet_add_async_event(ctrl, NVME_AER_TYPE_NOTICE, NVME_AER_NOTICE_NS_CHANGED, NVME_LOG_CHANGED_NS); diff --git a/drivers/nvme/target/nvmet.h b/drivers/nvme/target/nvmet.h index 50c8300ea572..e63ab3c0c655 100644 --- a/drivers/nvme/target/nvmet.h +++ b/drivers/nvme/target/nvmet.h @@ -126,6 +126,7 @@ struct nvmet_ctrl { u32 kato; u32 aen_enabled; + unsigned long aen_masked; struct nvmet_req *async_event_cmds[NVMET_ASYNC_EVENTS]; unsigned int nr_async_event_cmds; struct list_head async_events; -- 2.17.0
next prev parent reply other threads:[~2018-05-26 10:27 UTC|newest] Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-05-26 10:27 nvme/nvmet AEN and log page fixups Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig 2018-05-26 10:27 ` [PATCH 01/14] block: unexport check_disk_size_change Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig 2018-05-28 6:33 ` Johannes Thumshirn 2018-05-28 6:33 ` Johannes Thumshirn 2018-05-26 10:27 ` [PATCH 02/14] block: don't print a message when the device went away Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig 2018-05-28 6:34 ` Johannes Thumshirn 2018-05-28 6:34 ` Johannes Thumshirn 2018-05-26 10:27 ` [PATCH 03/14] nvme.h: untangle AEN notice definitions Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig 2018-05-28 6:35 ` Johannes Thumshirn 2018-05-28 6:35 ` Johannes Thumshirn 2018-05-26 10:27 ` [PATCH 04/14] nvme.h: add the changed namespace list log Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig 2018-05-28 6:35 ` Johannes Thumshirn 2018-05-28 6:35 ` Johannes Thumshirn 2018-05-26 10:27 ` [PATCH 05/14] nvme.h: add AER configuration symbols Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig 2018-05-28 6:35 ` Johannes Thumshirn 2018-05-28 6:35 ` Johannes Thumshirn 2018-05-26 10:27 ` [PATCH 06/14] nvmet: add a new nvmet_zero_sgl helper Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig 2018-05-28 6:36 ` Johannes Thumshirn 2018-05-28 6:36 ` Johannes Thumshirn 2018-05-29 8:13 ` Christoph Hellwig 2018-05-29 8:13 ` Christoph Hellwig 2018-05-26 10:27 ` [PATCH 07/14] nvmet: split log page implementation Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig 2018-05-28 6:38 ` Johannes Thumshirn 2018-05-28 6:38 ` Johannes Thumshirn 2018-05-26 10:27 ` [PATCH 08/14] nvmet: implement the changed namespaces log Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig 2018-05-28 6:53 ` Johannes Thumshirn 2018-05-28 6:53 ` Johannes Thumshirn 2018-05-29 8:17 ` Christoph Hellwig 2018-05-29 8:17 ` Christoph Hellwig 2018-05-29 8:16 ` Johannes Thumshirn 2018-05-29 8:16 ` Johannes Thumshirn 2018-05-29 8:24 ` Christoph Hellwig 2018-05-29 8:24 ` Christoph Hellwig 2018-05-29 16:59 ` Verkamp, Daniel 2018-05-29 16:59 ` Verkamp, Daniel 2018-05-29 17:24 ` Christoph Hellwig 2018-05-29 17:24 ` Christoph Hellwig 2018-05-29 20:44 ` Daniel Verkamp 2018-05-29 20:44 ` Daniel Verkamp 2018-05-26 10:27 ` [PATCH 09/14] nvmet: Add AEN configuration support Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig 2018-05-28 6:54 ` Johannes Thumshirn 2018-05-28 6:54 ` Johannes Thumshirn 2018-05-29 17:15 ` Verkamp, Daniel 2018-05-29 17:15 ` Verkamp, Daniel 2018-05-29 17:29 ` Christoph Hellwig 2018-05-29 17:29 ` Christoph Hellwig 2018-05-29 17:35 ` Verkamp, Daniel 2018-05-29 17:35 ` Verkamp, Daniel 2018-05-29 17:45 ` Christoph Hellwig 2018-05-29 17:45 ` Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig [this message] 2018-05-26 10:27 ` [PATCH 10/14] nvmet: mask pending AERs Christoph Hellwig 2018-05-28 6:56 ` Johannes Thumshirn 2018-05-28 6:56 ` Johannes Thumshirn 2018-05-26 10:27 ` [PATCH 11/14] nvme: submit AEN event configuration on startup Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig 2018-05-28 6:56 ` Johannes Thumshirn 2018-05-28 6:56 ` Johannes Thumshirn 2018-05-26 10:27 ` [PATCH 12/14] nvme: mark nvme_queue_scan static Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig 2018-05-28 6:57 ` Johannes Thumshirn 2018-05-28 6:57 ` Johannes Thumshirn 2018-05-26 10:27 ` [PATCH 13/14] nvme: use the changed namespaces list log to clear ns data changed AENs Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig 2018-05-26 12:05 ` Popuri, Sriram 2018-05-26 12:05 ` Popuri, Sriram 2018-05-26 12:21 ` Christoph Hellwig 2018-05-26 12:21 ` Christoph Hellwig 2018-05-26 13:02 ` Knight, Frederick 2018-05-28 6:59 ` Johannes Thumshirn 2018-05-28 6:59 ` Johannes Thumshirn 2018-06-04 19:59 ` Keith Busch 2018-06-04 19:59 ` Keith Busch 2018-06-05 4:47 ` Christoph Hellwig 2018-06-05 4:47 ` Christoph Hellwig 2018-06-05 14:37 ` Keith Busch 2018-06-05 14:37 ` Keith Busch 2018-05-26 10:27 ` [PATCH 14/14] nvme: limit warnings from nvme_identify_ns Christoph Hellwig 2018-05-26 10:27 ` Christoph Hellwig 2018-05-28 7:00 ` Johannes Thumshirn 2018-05-28 7:00 ` Johannes Thumshirn
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180526102735.31404-11-hch@lst.de \ --to=hch@lst.de \ --cc=axboe@kernel.dk \ --cc=hare@suse.de \ --cc=keith.busch@intel.com \ --cc=linux-block@vger.kernel.org \ --cc=linux-nvme@lists.infradead.org \ --cc=sagi@grimberg.me \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.