nvme fixes for Linux 6.2
- fix controller shutdown regression in nvme-apple (Janne Grunau) - fix a polling on timeout regression in nvme-pci (Keith Busch) -----BEGIN PGP SIGNATURE----- iQI/BAABCgApFiEEgdbnc3r/njty3Iq9D55TZVIEUYMFAmPKK8kLHGhjaEBsc3Qu ZGUACgkQD55TZVIEUYNwmg/9EUFeQ5KaJIVrJ5jtcO6oajcKW3B7vjYBS+lXR40w 30HXg2/qDcm8d/5UqGNu8OaPP6urHY6VKISBe55SMKDn7NFMqvFd3zEqN3ip95Sq VgqcIykPFN69NNRI7bwD5YjP3KeEMBJ4SwNLBjSzdJB4aE+s3tdQAtvqM1RCVpGC Y/jLai+b2eCHfoP9DDCqLKVEyxsCKCAH1Rc3xh6AJ7oZlYbgdmMGKiYPrrWEshFn yGaruEeMOWBCGRY1KlyIpuXzmQCv2I1dOIeQqm4nDxwa0o8n/xVa1zSWHIWCWK9n wOYHO5CODeL2aXwEzQNH9yQnohcIZ1jVzyntie475yZxCZIYIhVvjzU3YSdn16Wa oXHBcDITbHFXRPdKbLBq7hlBHrVNGBsU8gcLMHJ3/NHvwv5fPDLvndqSj+P3QcC0 +XCkb24ye6lxAdjD78q7DfHsMf5EFq/TjWSoGfqYuL/7/xJtf+zP2lAd0kKc/GTa YMd44TlOcwvGIYMLahu35ZhfoQp0V/QhL1Lf/lCgL6W+M4o9lXShZVZqVqjpHyw7 XFnO++rizokvY4ewiUPUQPgh0Oa/EmTgZsy/BhP1f3fo2b7BHf4qhaU39N1ptq7C lJyM+yyNavA1yHg3yjJD4qcbaNW3Yobl3aGa4b1dfyhYfvEMw1y3s58BftG95p/g 5gg= =u9Pc -----END PGP SIGNATURE----- Merge tag 'nvme-6.2-2023-01-20' of git://git.infradead.org/nvme into block-6.2 Pull NVMe fixes from Christoph: "nvme fixes for Linux 6.2 - fix controller shutdown regression in nvme-apple (Janne Grunau) - fix a polling on timeout regression in nvme-pci (Keith Busch)" * tag 'nvme-6.2-2023-01-20' of git://git.infradead.org/nvme: nvme-pci: fix timeout request state check nvme-apple: only reset the controller when RTKit is running nvme-apple: reset controller during shutdown
This commit is contained in:
Коммит
955bc12299
|
@ -829,7 +829,23 @@ static void apple_nvme_disable(struct apple_nvme *anv, bool shutdown)
|
|||
apple_nvme_remove_cq(anv);
|
||||
}
|
||||
|
||||
nvme_disable_ctrl(&anv->ctrl, shutdown);
|
||||
/*
|
||||
* Always disable the NVMe controller after shutdown.
|
||||
* We need to do this to bring it back up later anyway, and we
|
||||
* can't do it while the firmware is not running (e.g. in the
|
||||
* resume reset path before RTKit is initialized), so for Apple
|
||||
* controllers it makes sense to unconditionally do it here.
|
||||
* Additionally, this sequence of events is reliable, while
|
||||
* others (like disabling after bringing back the firmware on
|
||||
* resume) seem to run into trouble under some circumstances.
|
||||
*
|
||||
* Both U-Boot and m1n1 also use this convention (i.e. an ANS
|
||||
* NVMe controller is handed off with firmware shut down, in an
|
||||
* NVMe disabled state, after a clean shutdown).
|
||||
*/
|
||||
if (shutdown)
|
||||
nvme_disable_ctrl(&anv->ctrl, shutdown);
|
||||
nvme_disable_ctrl(&anv->ctrl, false);
|
||||
}
|
||||
|
||||
WRITE_ONCE(anv->ioq.enabled, false);
|
||||
|
@ -985,11 +1001,11 @@ static void apple_nvme_reset_work(struct work_struct *work)
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (anv->ctrl.ctrl_config & NVME_CC_ENABLE)
|
||||
apple_nvme_disable(anv, false);
|
||||
|
||||
/* RTKit must be shut down cleanly for the (soft)-reset to work */
|
||||
if (apple_rtkit_is_running(anv->rtk)) {
|
||||
/* reset the controller if it is enabled */
|
||||
if (anv->ctrl.ctrl_config & NVME_CC_ENABLE)
|
||||
apple_nvme_disable(anv, false);
|
||||
dev_dbg(anv->dev, "Trying to shut down RTKit before reset.");
|
||||
ret = apple_rtkit_shutdown(anv->rtk);
|
||||
if (ret)
|
||||
|
|
|
@ -1362,7 +1362,7 @@ static enum blk_eh_timer_return nvme_timeout(struct request *req)
|
|||
else
|
||||
nvme_poll_irqdisable(nvmeq);
|
||||
|
||||
if (blk_mq_request_completed(req)) {
|
||||
if (blk_mq_rq_state(req) != MQ_RQ_IN_FLIGHT) {
|
||||
dev_warn(dev->ctrl.device,
|
||||
"I/O %d QID %d timeout, completion polled\n",
|
||||
req->tag, nvmeq->qid);
|
||||
|
|
Загрузка…
Ссылка в новой задаче