diff options
Diffstat (limited to 'drivers/nvme/host/core.c')
| -rw-r--r-- | drivers/nvme/host/core.c | 14 | 
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 329381a28edf..79e679d12f3b 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -554,7 +554,7 @@ int nvme_identify_ctrl(struct nvme_ctrl *dev, struct nvme_id_ctrl **id)  	/* gcc-4.4.4 (at least) has issues with initializers and anon unions */  	c.identify.opcode = nvme_admin_identify; -	c.identify.cns = cpu_to_le32(1); +	c.identify.cns = cpu_to_le32(NVME_ID_CNS_CTRL);  	*id = kmalloc(sizeof(struct nvme_id_ctrl), GFP_KERNEL);  	if (!*id) @@ -572,7 +572,7 @@ static int nvme_identify_ns_list(struct nvme_ctrl *dev, unsigned nsid, __le32 *n  	struct nvme_command c = { };  	c.identify.opcode = nvme_admin_identify; -	c.identify.cns = cpu_to_le32(2); +	c.identify.cns = cpu_to_le32(NVME_ID_CNS_NS_ACTIVE_LIST);  	c.identify.nsid = cpu_to_le32(nsid);  	return nvme_submit_sync_cmd(dev->admin_q, &c, ns_list, 0x1000);  } @@ -900,9 +900,9 @@ static int nvme_revalidate_ns(struct nvme_ns *ns, struct nvme_id_ns **id)  		return -ENODEV;  	} -	if (ns->ctrl->vs >= NVME_VS(1, 1)) +	if (ns->ctrl->vs >= NVME_VS(1, 1, 0))  		memcpy(ns->eui, (*id)->eui64, sizeof(ns->eui)); -	if (ns->ctrl->vs >= NVME_VS(1, 2)) +	if (ns->ctrl->vs >= NVME_VS(1, 2, 0))  		memcpy(ns->uuid, (*id)->nguid, sizeof(ns->uuid));  	return 0; @@ -1086,6 +1086,8 @@ static int nvme_wait_ready(struct nvme_ctrl *ctrl, u64 cap, bool enabled)  	int ret;  	while ((ret = ctrl->ops->reg_read32(ctrl, NVME_REG_CSTS, &csts)) == 0) { +		if (csts == ~0) +			return -ENODEV;  		if ((csts & NVME_CSTS_RDY) == bit)  			break; @@ -1240,7 +1242,7 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)  	}  	page_shift = NVME_CAP_MPSMIN(cap) + 12; -	if (ctrl->vs >= NVME_VS(1, 1)) +	if (ctrl->vs >= NVME_VS(1, 1, 0))  		ctrl->subsystem = NVME_CAP_NSSRC(cap);  	ret = nvme_identify_ctrl(ctrl, &id); @@ -1840,7 +1842,7 @@ static void nvme_scan_work(struct work_struct *work)  		return;  	nn = le32_to_cpu(id->nn); -	if (ctrl->vs >= NVME_VS(1, 1) && +	if (ctrl->vs >= NVME_VS(1, 1, 0) &&  	    !(ctrl->quirks & NVME_QUIRK_IDENTIFY_CNS)) {  		if (!nvme_scan_ns_list(ctrl, nn))  			goto done;  |