Ubuntu видит только один из двух дисков nvme, которые видны для Bios и Windows 10: Проблема PCI

Я обновил ноутбук MSI GT73VR, который имеет два слота NVME (и один слот SATA). Я обнаружил, что Ubuntu 20.04 и 18.04 может видеть только один из дисков (в первом слоте). Переключение карт M.2 позволяет увидеть любой диск в первом слоте. BIOS и Windows 10 могут видеть диски, а Windows имеет доступ к обоим. Один диск - это ADATA SX8100NP, видимый в данный момент, другой - Intel 660

. В BIOS установлен режим доступа AHCI. Проблема может быть больше связана с Linux, чем с Ubuntu как таковая, поскольку, когда я пробовал ISO-образы установки Manjaro и OpenSUSE с USB-накопителя, они также могли видеть только один диск NVME: /dev/nvme0n1.

$ ls /dev/nvme*
/dev/nvme0    /dev/nvme0n1p1   /dev/nvme0n1p11  /dev/nvme0n1p13  /dev/nvme0n1p2  /dev/nvme0n1p4  /dev/nvme0n1p6  /dev/nvme0n1p8
/dev/nvme0n1  /dev/nvme0n1p10  /dev/nvme0n1p12  /dev/nvme0n1p14  /dev/nvme0n1p3  /dev/nvme0n1p5  /dev/nvme0n1p7  /dev/nvme0n1p9

При попытке отладки я вижу, что проблема связана с шиной PCIE, так как оба диска nvme видны на шине PCI.

$ lspci |grep memory
02:00.0 Non-Volatile memory controller: Realtek Semiconductor Co., Ltd. Device 5762 (rev 01)
3f:00.0 Non-Volatile memory controller: Intel Corporation Device f1a8 (rev 03)

Подробнее о невидимом диске nvme:

~$ sudo lspci -v -s 3f:00.0 
3f:00.0 Non-Volatile memory controller: Intel Corporation Device f1a8 (rev 03) (prog-if 02 [NVM Express])
        Subsystem: Intel Corporation Device 390d
        Flags: bus master, fast devsel, latency 0, IRQ 255, NUMA node 0
        Memory at <ignored> (64-bit, non-prefetchable)
        Capabilities: [40] Power Management version 3
        Capabilities: [50] MSI: Enable- Count=1/8 Maskable+ 64bit+
        Capabilities: [70] Express Endpoint, MSI 00
        Capabilities: [b0] MSI-X: Enable- Count=16 Masked-
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [158] #19
        Capabilities: [178] Latency Tolerance Reporting
        Capabilities: [180] L1 PM Substates
        Kernel modules: nvme

Теперь это привело меня к проверке dmesg:

[    0.646094] pci 0000:3f:00.0: [8086:f1a8] type 00 class 0x010802
[    0.646529] pci 0000:3f:00.0: reg 0x10: [mem 0xdc200000-0xdc203fff 64bit]
[    0.648075] pci 0000:3f:00.0: 8.000 Gb/s available PCIe bandwidth, limited by 2.5 GT/s PCIe x4 link at 0000:07:04.0 (capable of 31.504 Gb/s with 8.0 GT/s PCIe x4 link)
[    0.815140] pci 0000:3f:00.0: can't claim BAR 0 [mem 0xdc200000-0xdc203fff 64bit]: no compatible bridge window
[    0.846800] pci 0000:3f:00.0: BAR 0: no space for [mem size 0x00004000 64bit]
[    0.846801] pci 0000:3f:00.0: BAR 0: trying firmware assignment [mem 0xdc200000-0xdc203fff 64bit]
[    0.846803] pci 0000:3f:00.0: BAR 0: [mem 0xdc200000-0xdc203fff 64bit] conflicts with PCI Bus 0000:00 [mem 0x40000000-0xdfffffff window]
[    0.846804] pci 0000:3f:00.0: BAR 0: failed to assign [mem size 0x00004000 64bit]
[    1.978833] pci 0000:3f:00.0: Adding to iommu group 21

Похоже, это связано с невозможность назначить память устройству PCI, возможно, из-за конфликта шины.

Кто-нибудь знает, как решить эту проблему? Проблема существует в ядре 5.4.0.26, а также в основном ядре 5.9.12, которое я временно установил, и независимо от того, какие ядра находятся на другом установочном носителе Linux, который я пробовал.

Параметры, с которыми было загружено ядро, включали изменение максимальной задержки приводов nvme, но это не повлияло ни на что:

$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-5.4.0-26-generic root=UUID=f91c3fe3-d5c2-45c7-bb74-b2200f7d4057 ro quiet splash intel_iommu=on nvme_core.default_ps_max_latency_us=5500

Есть ли другие параметры ядра, которые можно попробовать? Спасибо!

0
задан 8 December 2020 в 11:09

1 ответ

Мне удалось решить проблему, добавив параметр ядра pci=assign-busses

Теперь мы dmesg показывает:

$ sudo dmesg |grep 0c:00
[    0.645602] pci 0000:0c:00.0: [8086:f1a8] type 00 class 0x010802
[    0.645831] pci 0000:0c:00.0: reg 0x10: [mem 0xdc200000-0xdc203fff 64bit]
[    2.012831] pci 0000:0c:00.0: Adding to iommu group 22
[    2.435258] nvme nvme1: pci function 0000:0c:00.0

и список nvme показывает

$ sudo nvme list
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev  
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     2K482919EDEF         ADATA SX8100NP                           1           2.05  TB /   2.05  TB    512   B +  0 B   VB421D57
/dev/nvme1n1     PHNH920600M92P0C     INTEL SSDPEKNW020T8                      1           2.05  TB /   2.05  TB    512   B +  0 B   004C 

Другие сообщения в dmesg во время проблемы содержали "busn ... скрыто за мостом..." Я искал параметр, который переназначить устройства PCI, игнорируя прошивку. Из документации:

"The `pci=assign-busses' Argument
This tells the kernel to always assign all PCI bus numbers, overriding whatever the firmware may have done."

Это работает не только для Ubuntu Bionic и Focal, но и для всех дистрибутивов Linux, которые я пробовал: OpenSuse Tumbleweed, Debian и Manjaro. Надеюсь, кто-то еще найдет это полезным.

2
ответ дан 10 December 2020 в 17:55

Другие вопросы по тегам:

Похожие вопросы: