svn commit: r328684 - stable/11/sys/dev/nvme
Alexander Motin
mav at FreeBSD.org
Thu Feb 1 16:45:09 UTC 2018
Author: mav
Date: Thu Feb 1 16:45:08 2018
New Revision: 328684
URL: https://svnweb.freebsd.org/changeset/base/328684
Log:
MFC r322443 (by nwhitehorn):
Move NVME controller shutdown from being called as part of module unloading
to being called through the newbus DEVICE_SHUTDOWN() path. This ensures that
the NVME controller gets shut down before the device and bus disappear
and prevents data corruption on shutdown on at least Samsung EVO 960 SSDs.
PR: kern/211852
Modified:
stable/11/sys/dev/nvme/nvme.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/dev/nvme/nvme.c
==============================================================================
--- stable/11/sys/dev/nvme/nvme.c Thu Feb 1 16:44:19 2018 (r328683)
+++ stable/11/sys/dev/nvme/nvme.c Thu Feb 1 16:45:08 2018 (r328684)
@@ -58,6 +58,7 @@ MALLOC_DEFINE(M_NVME, "nvme", "nvme(4) memory allocati
static int nvme_probe(device_t);
static int nvme_attach(device_t);
static int nvme_detach(device_t);
+static int nvme_shutdown(device_t);
static int nvme_modevent(module_t mod, int type, void *arg);
static devclass_t nvme_devclass;
@@ -67,6 +68,7 @@ static device_method_t nvme_pci_methods[] = {
DEVMETHOD(device_probe, nvme_probe),
DEVMETHOD(device_attach, nvme_attach),
DEVMETHOD(device_detach, nvme_detach),
+ DEVMETHOD(device_shutdown, nvme_shutdown),
{ 0, 0 }
};
@@ -180,22 +182,15 @@ nvme_unload(void)
{
}
-static void
-nvme_shutdown(void)
+static int
+nvme_shutdown(device_t dev)
{
- device_t *devlist;
struct nvme_controller *ctrlr;
- int dev, devcount;
- if (devclass_get_devices(nvme_devclass, &devlist, &devcount))
- return;
+ ctrlr = DEVICE2SOFTC(dev);
+ nvme_ctrlr_shutdown(ctrlr);
- for (dev = 0; dev < devcount; dev++) {
- ctrlr = DEVICE2SOFTC(devlist[dev]);
- nvme_ctrlr_shutdown(ctrlr);
- }
-
- free(devlist, M_TEMP);
+ return (0);
}
static int
@@ -208,9 +203,6 @@ nvme_modevent(module_t mod, int type, void *arg)
break;
case MOD_UNLOAD:
nvme_unload();
- break;
- case MOD_SHUTDOWN:
- nvme_shutdown();
break;
default:
break;
More information about the svn-src-stable
mailing list