Cannot suspend with NVMe M.2 SSD

I've installed a Samsung Pro 960 SSD, which is an NVMe M.2 Gen 3.0 x 4 Solid State Drive but in Ubuntu 16.04 it freezes trying to suspend and resume. It works ok in Windows 10.

lsblk information

$ lsdrv
NAME        FSTYPE LABEL            MOUNTPOINT   SIZE MODEL
sda                                            931.5G HGST HTS721010A9
├─sda4      ntfs   WINRETOOLS                    450M 
├─sda2                                           128M 
├─sda5      ntfs   Image                        11.4G 
├─sda3      ntfs   HGST_Win10       /mnt/d       919G 
└─sda1      vfat   ESP                           500M 
nvme0n1                                          477G Samsung SSD 960 PRO 512GB 
├─nvme0n1p5 ext4   NVMe_Ubuntu_16.0 /           44.6G 
├─nvme0n1p3                                       16M 
├─nvme0n1p1 ntfs                                 450M 
├─nvme0n1p6 swap   Linux Swap       [SWAP]       7.9G 
├─nvme0n1p4 ntfs   NVMe_Win10       /mnt/c     414.9G 
├─nvme0n1p2 vfat                    /boot/efi     99M 
└─nvme0n1p7 ntfs   Shared_WSL+Linux /mnt/e         9G 

lspci information

$ lspci
00:00.0 Host bridge: Intel Corporation Sky Lake Host Bridge/DRAM Registers (rev 07)
00:01.0 PCI bridge: Intel Corporation Sky Lake PCIe Controller (x16) (rev 07)
00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
00:04.0 Signal processing controller: Intel Corporation Skylake Processor Thermal Subsystem (rev 07)
00:14.0 USB controller: Intel Corporation Sunrise Point-H USB 3.0 xHCI Controller (rev 31)
00:14.2 Signal processing controller: Intel Corporation Sunrise Point-H Thermal subsystem (rev 31)
00:16.0 Communication controller: Intel Corporation Sunrise Point-H CSME HECI #1 (rev 31)
00:17.0 SATA controller: Intel Corporation Sunrise Point-H SATA Controller [AHCI mode] (rev 31)
00:1c.0 PCI bridge: Intel Corporation Sunrise Point-H PCI Express Root Port #1 (rev f1)
00:1c.4 PCI bridge: Intel Corporation Sunrise Point-H PCI Express Root Port #5 (rev f1)
00:1c.5 PCI bridge: Intel Corporation Sunrise Point-H PCI Express Root Port #6 (rev f1)
00:1c.6 PCI bridge: Intel Corporation Sunrise Point-H PCI Express Root Port #7 (rev f1)
00:1d.0 PCI bridge: Intel Corporation Sunrise Point-H PCI Express Root Port #9 (rev f1)
00:1f.0 ISA bridge: Intel Corporation Sunrise Point-H LPC Controller (rev 31)
00:1f.2 Memory controller: Intel Corporation Sunrise Point-H PMC (rev 31)
00:1f.3 Audio device: Intel Corporation Sunrise Point-H HD Audio (rev 31)
00:1f.4 SMBus: Intel Corporation Sunrise Point-H SMBus (rev 31)
01:00.0 3D controller: NVIDIA Corporation GM204M [GeForce GTX 970M] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GM204 High Definition Audio Controller (rev a1)
02:00.0 PCI bridge: Intel Corporation Device 1576
03:00.0 PCI bridge: Intel Corporation Device 1576
03:01.0 PCI bridge: Intel Corporation Device 1576
03:02.0 PCI bridge: Intel Corporation Device 1576
39:00.0 USB controller: Intel Corporation Device 15b5
3b:00.0 Ethernet controller: Qualcomm Atheros Killer E2400 Gigabit Ethernet Controller (rev 10)
3c:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 32)
3d:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5227 PCI Express Card Reader (rev 01)
3e:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a804

NVMe SSD suspend/resume is a know bug

This problem has been reported on Launchpad and ArchLinux. The solution is to edit /etc/default/grub with sudo powers and find the line:

GRUB_CMDLINE_LINUX_DEFAULT="quiet kaslr acpiphp.disable=1 pcie_aspm=off nloglevel=3 udev.log-priority=3"

Your options will be different but add the option acpiphp.disable=1 between the double quotes.

Save the file and run sudo update-grub

Reboot and then suspend and resume will work, unless it's a different problem.

What does acpiphp.disable=1 do?

According to the kernel developer in 2013 this disables ACPI hot-plugging. However that doesn't mean hot-plugging is disabled on your machine. For example, replugging the USB cord to your Android phone brings up Nautilus to view files as it should. Also power cycling a second TV connected to your laptop via USB-C ThunderBolt 3 to Displayport to HDMI adapter reorganizes windows across workspaces as it should.


A patch https://patchwork.kernel.org/patch/10212201/ is going to fix this issue properly, it should be backported to older kernels too, so hopefully going forward your NVMe drives won't require any workarounds, it should also fix USB-C detection too