Linux | nvme | 常见问题不完全总结

该文深入探讨了NVMe驱动在使用过程中遇到的‘Devicenotready’错误,通过分析源码`nvme_wait_ready`函数,解释了当设备在设定的时间限制内未达到预期状态时,如何返回ENODEV错误的情况。主要关注点包括状态检查、超时机制以及中断处理。
摘要由CSDN通过智能技术生成

本文对 nvme 驱动的使用中常见问题进行不完全汇总。

更新: 2022 / 12 / 31


文章目录


问题:Device not ready
源码:
nvme_wait_ready 1 中,如果在 jiffies 或者 timeout_jiffies 的时长后,device 还是处于 err 状态,则 ENODEV

static int nvme_wait_ready(struct nvme_ctrl *ctrl, u32 mask, u32 val,
		u32 timeout, const char *op)
{
	unsigned long timeout_jiffies = jiffies + timeout * HZ;
	u32 csts;
	int ret;

	while ((ret = ctrl->ops->reg_read32(ctrl, NVME_REG_CSTS, &csts)) == 0) {
		if (csts == ~0)
			return -ENODEV;
		if ((csts & mask) == val)
			break;

		usleep_range(1000, 2000);
		if (fatal_signal_pending(current))
			return -EINTR;
		if (time_after(jiffies, timeout_jiffies)) {
			dev_err(ctrl->device,
				"Device not ready; aborting %s, CSTS=0x%x\n",
				op, csts);
			return -ENODEV;
		}
	}

	return ret;
}

参考链接

#Mark


  1. linux/drivers/nvme/host/core.c ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值