本文对 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