Browse Source

nvme: don't enable AEN if not supported

Avoid excuting set_feature command if there is no supported bit in
Optional Asynchronous Events Supported (OAES).

Fixes: c0561f82 ("nvme: submit AEN event configuration on startup")
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Weiping Zhang <zhangweiping@didichuxing.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Weiping Zhang 7 years ago
parent
commit
fa441b71aa
1 changed files with 7 additions and 4 deletions
  1. 7 4
      drivers/nvme/host/core.c

+ 7 - 4
drivers/nvme/host/core.c

@@ -1060,14 +1060,17 @@ EXPORT_SYMBOL_GPL(nvme_set_queue_count);
 
 
 static void nvme_enable_aen(struct nvme_ctrl *ctrl)
 static void nvme_enable_aen(struct nvme_ctrl *ctrl)
 {
 {
-	u32 result;
+	u32 result, supported_aens = ctrl->oaes & NVME_AEN_SUPPORTED;
 	int status;
 	int status;
 
 
-	status = nvme_set_features(ctrl, NVME_FEAT_ASYNC_EVENT,
-			ctrl->oaes & NVME_AEN_SUPPORTED, NULL, 0, &result);
+	if (!supported_aens)
+		return;
+
+	status = nvme_set_features(ctrl, NVME_FEAT_ASYNC_EVENT, supported_aens,
+			NULL, 0, &result);
 	if (status)
 	if (status)
 		dev_warn(ctrl->device, "Failed to configure AEN (cfg %x)\n",
 		dev_warn(ctrl->device, "Failed to configure AEN (cfg %x)\n",
-			 ctrl->oaes & NVME_AEN_SUPPORTED);
+			 supported_aens);
 }
 }
 
 
 static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
 static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)