From e68ee40a124275f853665b613e7ebd3303619e25 Mon Sep 17 00:00:00 2001
From: PROTechThor <patrathewhiz@gmail.com>
Date: Sat, 10 Oct 2020 09:50:00 +0100
Subject: [PATCH] Replace wireless troubleshooting with resume/suspend
 troubleshooting

---
 doc.md                                        |  25 ++--
 .../resume-suspend-troubleshooting.md         | 125 ++++++++++++++++++
 2 files changed, 140 insertions(+), 10 deletions(-)
 create mode 100644 user/troubleshooting/resume-suspend-troubleshooting.md

diff --git a/doc.md b/doc.md
index f782dfe9..dcfeecd2 100644
--- a/doc.md
+++ b/doc.md
@@ -122,16 +122,11 @@ Core documentation for Qubes users.
 
  * [Installation Troubleshooting](/doc/installation-troubleshooting)
  * [UEFI Troubleshooting](/doc/uefi-troubleshooting/)
- * [Home directory is out of disk space error](/doc/out-of-memory/)
- * [Installing on system with new AMD GPU (missing firmware problem)](https://groups.google.com/group/qubes-devel/browse_thread/thread/e27a57b0eda62f76)
- * [How to install an Nvidia driver in dom0](/doc/install-nvidia-driver/)
- * [Nvidia troubleshooting guide](/doc/nvidia-troubleshooting/)
- * [Lenovo ThinkPad Troubleshooting](/doc/thinkpad-troubleshooting/)
- * [Apple MacBook Troubleshooting](/doc/macbook-troubleshooting/)
- * [Getting Sony Vaio Z laptop to work with Qubes](/doc/sony-vaio-tinkering/)
- * [Fixing wireless on suspend & resume](/doc/wireless-troubleshooting/)
- * [How to remove VMs manually](/doc/remove-vm-manually/)
- * [Intel Integrated Graphics Troubleshooting](/doc/intel-igfx-troubleshooting/)
+ * [Suspend/Resume Troubleshooting](/doc/suspend-resume-troubleshooting/)
+ * [VM Troubleshooting](/doc/vm-troubleshooting/)
+ * [HVM Troubleshooting](/doc/hvm-troubleshooting/)
+ * [Disk Troubleshooting](/doc/disk-troubleshooting/)
+ * [GUI Troubleshooting](/doc/gui-troubleshooting/)
 
 ### Reference Pages
 
@@ -274,6 +269,16 @@ For more, please see [Qubes Community Documentation](https://github.com/Qubes-Co
  * [Dark Theme in Dom0 and DomU](/doc/dark-theme/)
  * [Safely Removing TemplateVM Packages (Example: Thunderbird)](/doc/removing-templatevm-packages/)
 
+### Troubleshooting
+
+ * [Installing on system with new AMD GPU (missing firmware problem)](https://groups.google.com/group/qubes-devel/browse_thread/thread/e27a57b0eda62f76)
+ * [How to install an Nvidia driver in dom0](/doc/install-nvidia-driver/)
+ * [Nvidia troubleshooting guide](/doc/nvidia-troubleshooting/)
+ * [Lenovo ThinkPad Troubleshooting](/doc/thinkpad-troubleshooting/)
+ * [Apple MacBook Troubleshooting](/doc/macbook-troubleshooting/)
+ * [Getting Sony Vaio Z laptop to work with Qubes](/doc/sony-vaio-tinkering/)
+ * [Intel Integrated Graphics Troubleshooting](/doc/intel-igfx-troubleshooting/)
+
 ### Building Guides
 
  * [Building a TemplateVM based on a new OS (ArchLinux example)](/doc/building-non-fedora-template/)
diff --git a/user/troubleshooting/resume-suspend-troubleshooting.md b/user/troubleshooting/resume-suspend-troubleshooting.md
new file mode 100644
index 00000000..124465d3
--- /dev/null
+++ b/user/troubleshooting/resume-suspend-troubleshooting.md
@@ -0,0 +1,125 @@
+---
+layout: doc
+title: Suspend/Resume Troubleshooting
+permalink: /doc/suspend-resume-troubleshooting/
+redirect_from:
+- /en/doc/wireless-troubleshooting/
+- /doc/wireless-troubleshooting/
+---
+
+# Troubleshooting problems relating to suspend/resume #
+
+## Network-Manager says “Device not ready” after suspend/resume ##
+
+These instructions may help with suspend/resume issues for more devices than just wireless cards, that is just the (unfortunately not uncommon) example used here.
+
+If your wireless card works, but after suspending and resuming your computer, the Network-Manager applet just says "Device not ready", then try un-loading and re-loading the driver.
+
+### Determining your wireless card driver ###
+
+First, determine which kernel module corresponds to your wireless card. There are several ways to do this.
+
+The easiest is via the output of `lspci -k` in your sys-net VM:
+
+~~~
+[user@sys-net ~]$ lspci -k
+00:00.0 Network controller: Intel Corporation Wireless 8260 (rev 3a)
+	Subsystem: Intel Corporation Device 0130
+	Kernel driver in use: iwlwifi
+	Kernel modules: iwlwifi
+~~~
+
+Here we see that the machine in question has an Intel wireless card, being used by the `iwlwifi` kernel module.
+
+
+### Checking logs for relevant messages ###
+
+View the output of `dmesg` in sys-net, and check if you see a bunch of wireless related errors. Depending on your hardware, they may look like the following (or not):
+
+~~~
+iwlwifi 0000:00:00.0: loaded firmware version 16.242414.0 op_mode iwlmvm
+iwlwifi 0000:00:00.0: Detected Intel(R) Dual Band Wireless AC 8260, REV=0x208
+...
+IPv6: ADDRCONF(NETDEV_UP): wlp0s0: link is not ready
+iwlwifi 0000:00:00.0: L1 Enabled - LTR Enabled
+iwlwifi 0000:00:00.0: L1 Enabled - LTR Enabled
+iwlwifi 0000:00:00.0: Failed to load firmware chunk!
+iwlwifi 0000:00:00.0: Could not load the [0] uCode section
+iwlwifi 0000:00:00.0: Failed to start INIT ucode: -110
+iwlwifi 0000:00:00.0: Failed to run INIT ucode: -110
+...
+iwlwifi 0000:00:00.0: Direct firmware load for iwlwifi-8000C-18.ucode failed with error -2
+~~~
+
+### Seeing what modules you have loaded ###
+
+You can check which drivers are currently loaded with `lsmod`, and view details about a module with `modinfo <module_name>`.
+
+For example, we list what modules we have loaded:
+
+~~~
+[user@sys-net ~]$ lsmod
+Module                  Size  Used by
+iwlmvm                315392  0
+iwlwifi               155648  1 iwlmvm
+mac80211              708608  1 iwlmvm
+cfg80211              557056  3 iwlwifi,mac80211,iwlmvm
+...
+~~~
+
+and check one:
+
+~~~
+[user@sys-net ~]$ modinfo iwlmvm | grep -E '^(description|author|depends):'
+author:         Copyright(c) 2003- 2015 Intel Corporation <ilw@linux.intel.com>
+description:    The new Intel(R) wireless AGN driver for Linux
+depends:        iwlwifi,mac80211,cfg80211
+~~~
+
+Hey, it's our wireless driver!
+
+Now, check if reloading the module makes wireless work again:
+
+~~~
+[user@sys-net ~]$ sudo rmmod iwlmvm
+[user@sys-net ~]$ sudo modprobe iwlmvm
+~~~
+
+and try reconnecting to a network that is known to work.
+
+If that is successful, see below about having Qubes automatically reload the driver for you. If not, try also reloading some dependent modules, in our example we must also reload iwlwifi:
+
+~~~
+[user@sys-net ~]$ modinfo iwlwifi | grep -E '^(description|author|depends):'
+author:         Copyright(c) 2003- 2015 Intel Corporation <ilw@linux.intel.com>
+description:    Intel(R) Wireless WiFi driver for Linux
+depends:        cfg80211
+~~~
+
+~~~
+[user@sys-net ~]$ sudo rmmod iwlmvm
+[user@sys-net ~]$ sudo rmmod iwlwifi
+[user@sys-net ~]$ sudo modprobe iwlwifi # note the reverse order of loading/unloading
+[user@sys-net ~]$ sudo modprobe iwlmvm
+~~~
+
+## Drivers do not reload automatically on suspend/resume ##
+
+If reloading the driver (which resets the hardware into a known-state) resolves your issue when done manually, you can have Qubes automatically un/reload them on suspend & resume by listing the relevant modules in `/rw/config/suspend-module-blacklist`.
+
+In the above example, it would look like this:
+
+~~~
+[user@sys-net config]$ cat /rw/config/suspend-module-blacklist
+# You can list here modules you want to be unloaded before going to sleep. This
+# file is used only if the VM has any PCI device assigned. Modules will be
+# automatically loaded after resume.
+iwlmvm
+iwlwifi
+~~~
+
+## Power consumption increases after suspend/resume ##
+
+This problem is related to the software method used to disable sibling threads and how it interacts with suspend/resume. 
+To solve the problem, disable hyperthreading in the BIOS. This [external guide](https://www.pcmag.com/news/how-to-disable-hyperthreading) explains how to disable hyperthreading. 
+Since Qubes does disable hyperthreading by default (by not using secondary threads), you won't pay any performance cost.