ThinkPad S440 wifi 和意外系统停止

ThinkPad S440 wifi 和意外系统停止

就在几天前,我安装了新的 wifi 驱动程序一切似乎在联想 ThinkPad S440 上都运行良好。但现在我遇到了 wifi 问题:速度慢到零,网页浏览器无法加载任何页面。第二个问题(不确定它们是否已连接,但可能)是系统意外崩溃。这是 dmesg 的 pastebin输出,以便您看到正在发生的事情。当系统崩溃时,X 和所有其他程序都会崩溃。我甚至无法切换到tty并重新启动 X。无法重现。不知道如何向您显示我在屏幕上看到的输出。

更新
我在联想 ThinkPad S440 上的 Ubuntu 12.04 上使用了一个内核启动标志,acpi_os=Windows noapic因为我认为如果他们在构建它时考虑到了 Windows8+,它可能会有所帮助,但我不确定。在这个Pastebin您可以从 读取所有输出/var/log/syslog

更新 2
这是什么?我运行了 memtest86 几次,一切正常,没有错误,但是:

[    0.000000] PM: Registered nosave memory: 00000000be97f000 - 00000000c2e7f000

连续重复几次。

[    5.170944] AMD IOMMUv2 driver by Joerg Roedel <[email protected]>
[    5.170948] AMD IOMMUv2 functionality not available on this system
[    5.186546] ACPI Warning: 0x0000000000001828-0x000000000000182f SystemIO conflicts with Region \PMIO 1 (20121018/utaddress-251)
[    5.186556] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
[    5.186560] ACPI Warning: 0x0000000000000830-0x000000000000083f SystemIO conflicts with Region \GPRL 1 (20121018/utaddress-251)
[    5.186564] ACPI Warning: 0x0000000000000830-0x000000000000083f SystemIO conflicts with Region \GPR_ 2 (20121018/utaddress-251)
[    5.186567] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
[    5.186568] ACPI Warning: 0x0000000000000800-0x000000000000082f SystemIO conflicts with Region \GPRL 1 (20121018/utaddress-251)
[    5.186571] ACPI Warning: 0x0000000000000800-0x000000000000082f SystemIO conflicts with Region \GPR_ 2 (20121018/utaddress-251)
[    5.186574] ACPI Warning: 0x0000000000000800-0x000000000000082f SystemIO conflicts with Region \IO_D 3 (20121018/utaddress-251)
[    5.186577] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver


什么是 drm?

[   12.535066] [drm] GMBUS [i915 gmbus dpb] timed out, falling back to bit banging on pin 5
[   12.614067] fbcon: inteldrmfb (fb0) is primary device
[   13.805535] [drm] Enabling RC6 states: RC6 on, RC6p off, RC6pp off
[   14.129091] [drm:intel_dp_set_link_train] *ERROR* Timed out waiting for DP idle patterns
[   14.129093] [drm:i915_write32] *ERROR* Unknown unclaimed register before writing to 64040


我猜测这一行可能是内核启动参数的结果acpi_os=Windows noapic

[   14.189856] [Firmware Bug]: ACPI(PEGP) defines _DOD but not _DOS


[   14.194131] ACPI Error: [\_SB_.PCI0.GFX0.DD02._BCL] Namespace lookup failure, AE_NOT_FOUND (20121018/psargs-359)
[   14.194139] ACPI Error: Method parse/execution failed [\_SB_.PCI0.RP05.PEGP.DD02._BCL] (Node ffff88012920ded8), AE_NOT_FOUND (20121018/psparse-537)


[  322.663766] [drm:i915_write8] *ERROR* Unknown unclaimed register before writing to 3b4


[  326.687401] [drm:i915_write32] *ERROR* Unclaimed write to 70030
[  326.689118] i915 0000:00:02.0: More than 8 outputs detected
[  326.894826] usb 2-7: reset full-speed USB device number 5 using xhci_hcd
[  326.904666] dpm_run_callback(): pnp_bus_resume+0x0/0x70 returns -19
[  326.904668] PM: Device 00:06 failed to resume: error -19
[  326.913169] xhci_hcd 0000:00:14.0: xHCI xhci_drop_endpoint called with disabled ep ffff880124c65000
[  326.913171] xhci_hcd 0000:00:14.0: xHCI xhci_drop_endpoint called with disabled ep ffff880124c65040
[  326.913172] xhci_hcd 0000:00:14.0: xHCI xhci_drop_endpoint called with disabled ep ffff880124c65080
[  326.913173] xhci_hcd 0000:00:14.0: xHCI xhci_drop_endpoint called with disabled ep ffff880124c650c0


[  328.005875] [drm:intel_dp_set_link_train] *ERROR* Timed out waiting for DP idle patterns
[  328.005879] [drm:i915_write32] *ERROR* Unknown unclaimed register before writing to 64040


更新 3
那么,我该如何处理这个案子呢?以下是快照这是我在事故发生后看到的情况。

答案1

决定将我的评论移至答案,我没有完整的答案,但至少我可以帮助解释您看到的消息并为您指明正确的方向。

现代计算机上的 BIOS 是一个巨大的遗留问题。ACPI 是 BIOS 的一个功能。有很多小芯片和传感器控制着计算机上的所有小东西,一个小的 gpio 芯片转储风扇速度,另一个转储温度读数等。它们就像处理所有小东西并直接与硬件对话的微型控制器。所有这些都输入到 ACPI 控制器中,该控制器要么是它自己的芯片,要么是另一个芯片的一部分。当人们谈论主板“芯片组”时,这是其中的一部分。这些设备需要一种与更大的系统通信的方式,以便您的操作系统(或 BIOS)能够正确决定它需要做什么(热关机、提高风扇速度等)。最简单的方法是只划分一点内存,ACPI 控制器将从中读取/写入,具体哪个内存块的细节取决于 BIOS/主板设计者,但这并不重要。您的 ACPI 驱动程序将查找(或知道)该内存部分是什么并直接写入它。作为用户,这些内容中的大多数对您来说是完全透明的,只有当驱动程序、内核和 BIOS 对正在发生的事情意见不一致时,它才会成为问题。

Memcheck 会通过以下方式让你了解这些小细节

[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009cfff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d000-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000afc61fff] usable
[    0.000000] BIOS-e820: [mem 0x00000000afc62000-0x00000000afe63fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000afe64000-0x00000000be97efff] usable
[    0.000000] BIOS-e820: [mem 0x00000000be97f000-0x00000000c2e7efff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000c2e7f000-0x00000000c2f7efff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x00000000c2f7f000-0x00000000c2ffefff] ACPI data
[    0.000000] BIOS-e820: [mem 0x00000000c2fff000-0x00000000c2ffffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000c3000000-0x00000000cf9fffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000f8000000-0x00000000fbffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fe101000-0x00000000fe112fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed08000-0x00000000fed08fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed10000-0x00000000fed19fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed1c000-0x00000000fed1ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000ffc00000-0x00000000ffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000012f5fffff] usable

如果您计算一下,最后一行会告诉您最后 6.5 GB 的内存可供操作系统随意使用(内存地址指向一个字节的内存,该数字是十六进制的 64 位地址,因此很容易计算出该范围内有多少字节)。仔细检查后,您会发现这实际上只是超过 4GB 32 位地址限制的所有内存,直到内存控制器可以处理的最大地址(即使您的物理内存小于这个 ~10GB 限制)。在列表的上方,您可以看到 BIOS 由于各种原因(主要是遗留原因)将 4GB 以下内存中的某些部分分割出来,但 4GB 以下的大部分内存标记为“可用”。操作系统读取此信息并基本上知道它不能使用这些内存部分来映射一般操作系统功能和虚拟内存。在中间,您有大约 70MB 的内存被分割出来用于 ACPI 控制器。

现在,谈谈你的错误。

在操作系统加载时,各种驱动程序都会加载并运行一些基本的初始化和检查(验证设备、打开设备等)。很多时候,您会收到投诉,称某些(低级)系统驱动程序假设的内存块与操作系统认为应该存在的内存块存在冲突。结合无法确定某些设备的 ACPI 命名空间的警告消息,我了解到,很有可能不是每个人都对什么应该放在哪里有相同的看法,这意味着可能会有人覆盖一些他们不应该覆盖的内存页面或进行其他恶作剧。

至于您的崩溃信息。

kthread 是内核进程的通用名称,内核进程在内核空间而不是用户空间启动,因此其造成危害的能力大大增强,因为它们可以直接访问系统内存,通常它们代表驱动程序守护进程和其他低级内核功能。

您的计算机因 kthread 崩溃并出现污染警告,这意味着内核已确定(通过各种复杂的算法)进程正在处理的内存或输入不可信,并且它不会冒险继续运行,而是引发内核恐慌并使系统崩溃。污染分析和污染检测是一种动态捕获和防止攻击者利用漏洞的方法,但在这种情况下捕获了一个内核错误,该错误很可能与您的 ACPI/wifi 问题有关。

最后,找到问题的解决方案。 很难确定确切地仅从这些日志和快照就可以看出是什么导致了恶作剧,但是可以肯定地说,wifi驱动程序无法正常工作,并且您尝试的 ACPI 修复只会使问题变得更加复杂,因此我建议按照以下步骤操作。

  1. 我将恢复你在启动命令中添加的所有 ACPI 标志
  2. 我会将 WiFi 驱动程序恢复到之前的状态
  3. 我至少会更新系统内核,甚至可能更新整个系统。
  4. 我会尝试再次更新驱动程序
  5. 如果不起作用,请提交驱动程序的错误报告

相关内容