ThinkPad S440 wifi和意外系统停止

就在几天前,我安装了新的wifi驱动程序 ,一切似乎在联想ThinkPad S440上运行良好。 但是现在我遇到了wifi的问题:速度减慢到零,没有页面可以在Web浏览器中加载。 第二个问题(不确定它们是否已连接但可能)是系统崩溃意外。 这是一个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  [ 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
那么,我该如何处理案件呢? 这是我在崩溃后看到的快照 。

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

现代计算机上的BIOS是一个巨大的传统kludge。 ACPI是BIOS的function。 有很多小芯片和传感器可以控制计算机上的所有小东西,一点gpio芯片倾倒风扇速度,另一个倾倒温度读数等等。它们就像小微控制器一样处理所有小东西并与之交谈硬件直接。 所有这些都馈入ACPI控制器,该控制器是其自己的芯片或不同芯片的一部分。 当人们谈论主板“芯片组”时,这是图片的一部分。 这些设备需要一种与较大系统通信的方式,以便您的操作系统(或BIOS)能够正确地决定它需要做什么(热关机,提高风扇速度等)。 最简单的方法是分割ACPI控制器将读取/写入的一小部分内存,具体到BIOS / mobo设计器的内存块的详细信息,但这无关紧要。 您的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的内存是免费的,os可以根据需要处理(内存地址指向一个字节的内存,这个数字是一个hex的64位地址所以它很容易计算范围内有多少字节)。 经过仔细检查,你会发现这真的只是4GB 32位地址以上的所有内存限制,直到内存控制器可以处理的最大地址(即使你的物理内存小于这个~10GB的限制)。 在列表中的上方,您可以看到由于各种原因(主要是遗留的),较低的4GB内存有多少部分由BIOS分离,但是较低的4GB的大部分标记为“可用”。 操作系统读取此信息,基本上知道它不能使用这些内存部分来映射一般的操作系统function和虚拟内存。 在中间,您为ACPI控制器刻下了大约70MB的内存。

现在,转向你的错误。

当OS加载时,各种驱动程序被加载并运行一些基本的初始化和检查(validation设备,打开它等)。 在很多时候,您会抱怨某些(低级别)系统驱动程序假设它们的内存块与操作系统认为应该存在的内容之间存在冲突。 结合关于无法确定某些设备的ACPI命名空间的警告消息,告诉我很可能不是每个人都在同一页面上关于需要去哪里的地方,这意味着有可能有人会覆盖他们不应该或其他恶作剧的一些内存页面。

至于你的崩溃消息。

kthread是内核进程的通用名称,内核进程是在内核空间而不是用户空间中启动的,因此它们可以直接访问系统内存,因此导致恶作剧的能力大大增加,通常它们代表驱动程序守护程序和其他低级别级内核函数。

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

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

  1. 我会恢复您添加到启动命令的任何ACPI标志
  2. 我会将wifi驱动程序恢复到以前的工作状态
  3. 我至少会更新系统内核,也许是整个系统。
  4. 我会尝试再次更新驱动程序
  5. 如果它不起作用,则提交有关驱动程序的错误报告