** Description changed: + SRU Justification: + + Impact: + On Intel VMD 8086:ad0b / Arrow Lake-HX systems, Ubuntu 26.04 with the 7.0.x kernel has two VMD-related problems. + + First, the stock VMD driver does not support Bus Offset Setting 3. On + the affected MSI Vector this results in: + + vmd 0000:00:0e.0: Unknown Bus Offset Setting (3) + + and prevents enumeration of the internal NVMe device behind VMD. + + After adding the required second-rootbus / Bus Offset 3 support, a + second issue is exposed: repeated NVMe + + timeout, completion polled + + events caused by the Intel Arrow Lake ARL004 interrupt-ordering erratum. + These events cause severe storage stalls and make the system practically + unusable under sustained I/O. + + Launchpad bug #2166325 is now Confirmed and affects multiple users. + + Fix: + The fix is implemented as two logically separate changes: + + Add Intel VMD second-rootbus / Bus Offset 3 support so that NVMe devices behind VMD 8086:ad0b can be enumerated correctly. + Apply an ARL004-specific interrupt-ordering workaround for VMD 8086:ad0b and child PCI_CLASS_STORAGE_EXPRESS devices. Before dispatching the child interrupt with generic_handle_irq(), perform a dummy PCI configuration-space read from the MSI-initiating NVMe device. The read is serialized with the existing VMD configuration-space lock. + + The workaround is deliberately limited to VMD 8086:ad0b and NVMe-class + child devices, so other VMD devices and non-NVMe children are + unaffected. + + The stock drivers/pci/controller/vmd.c in Ubuntu 7.0.0-30.30 and + 7.0.0-31.31 is byte-for-byte identical: + + SHA256: b631d449d8e1e896bcf1fa1e4ade53789d28db3c86c6a15fb7fb7e506cd274c8 + + The patched vmd.c used successfully with Ubuntu 7.0.0-31-generic is: + + SHA256: 0a27aa1379e8b7fc22f509b8d06ed3676a211d7bb3226a3f9b3dadfc208be7a3 + + Testcase: + Hardware: MSI Vector 17 HX AI, Intel VMD 8086:ad0b, NVMe behind VMD. + + With the stock driver: + + Boot Ubuntu 26.04 with the affected 7.0.x kernel. + Verify that Bus Offset Setting 3 causes the VMD driver to fail NVMe enumeration. + After Bus Offset 3 support is added but without the ARL004 workaround, run sustained sequential NVMe reads and monitor the kernel log. + Repeated nvme nvme0: I/O tag ... timeout, completion polled events occur at approximately 30-second intervals. + A 1 GiB sequential read took approximately 121 seconds (~8.8 MB/s). + + With both fixes applied: + + The internal NVMe is enumerated normally. + The recurring timeout, completion polled events disappear. + The same 1 GiB read completes in approximately 0.88 seconds (~1.2 GB/s). + A subsequent 10 GiB sequential read also completes normally. + The same patched implementation is currently running successfully on Ubuntu 7.0.0-31-generic. + + Source and patch series: + + https://github.com/gvozd188/vmd-arl004 + + Original public implementation: + + https://github.com/gvozd188/vmd-arl004/commit/5438c83 Hardware ======== Laptop: MSI Vector 17 HX AI Platform: Intel Arrow Lake Intel VMD: 8086:ad0b VMD PCI address: 0000:00:0e.0 Subsystem: 1462:149c Internal NVMe SSD: Phison 1TB ESR01TBYCCA4-EDJ-2MS Controller: Phison PS5029-E29T PCIe 4.0 NVMe PCI ID: 1987:5029 (rev 01) Firmware: ETFM50.0 Ubuntu: 26.04 Current/final tested kernel: 7.0.0-30-generic Secure Boot: enabled - Problem 1: Intel VMD Bus Offset 3 ================================ With the stock Ubuntu VMD driver the internal NVMe SSD is not exposed. The kernel reports: - vmd 0000:00:0e.0: Unknown Bus Offset Setting (3) + vmd 0000:00:0e.0: Unknown Bus Offset Setting (3) and no internal /dev/nvme* device is available. Linux 6.14 was also tested on this machine and did not solve the VMD problem. The system firmware does not expose a usable BIOS option to disable Intel VMD/RST. Intel's public VMD second-rootbus patch series was integrated into the Ubuntu VMD source: - [PATCH v3 0/8] VMD add second rootbus support + [PATCH v3 0/8] VMD add second rootbus support https://www.spinics.net/lists/linux-pci/msg163096.html After integrating the second-rootbus support, Linux successfully enumerates the internal NVMe controller and SSD. - Problem 2: NVMe completion stalls ================================= After the SSD became accessible through the modified VMD driver, a second problem became visible. Kernel messages repeatedly contained: - nvme nvme0: I/O tag ... timeout, completion polled + nvme nvme0: I/O tag ... timeout, completion polled The stalls occurred at approximately 30-second intervals. A diagnostic sequential read before the workaround: - sudo dd if=/dev/nvme0n1 of=/dev/null bs=16M count=64 status=progress + sudo dd if=/dev/nvme0n1 of=/dev/null bs=16M count=64 status=progress Result: - 1 GiB in approximately 121.339 seconds - approximately 8.8 MB/s + 1 GiB in approximately 121.339 seconds + approximately 8.8 MB/s CPU and memory were not saturated. Disabling ASPM was tested and did not solve the problem. - ARL004 investigation ==================== The official Intel RST/VMD Windows driver distributed by MSI for this machine was examined by static analysis for comparison. The relevant Windows driver path performs a PCI configuration-space read after MSI handling when the completion state requires ordering. This behavior is consistent with the Intel Arrow Lake ARL004 erratum, where an MSI from a VMD-owned device may pass a preceding memory write. An experimental Linux workaround was implemented for the tested 8086:ad0b VMD/NVMe path. It performs a dummy PCI configuration-space read before the subsequent interrupt handling path. - Result ====== With the experimental ARL004 workaround: - sudo dd if=/dev/nvme0n1 of=/dev/null bs=16M count=64 status=progress + sudo dd if=/dev/nvme0n1 of=/dev/null bs=16M count=64 status=progress completed in: - 1 GiB in 0.88206 seconds - approximately 1.2 GB/s + 1 GiB in 0.88206 seconds + approximately 1.2 GB/s A subsequent 10 GiB sequential diagnostic read also completed normally. After booting with the final tested module: - sudo journalctl -k -b | grep -E 'timeout|completion polled' + sudo journalctl -k -b | grep -E 'timeout|completion polled' produced no matching messages. The approximately 136x difference above is only a diagnostic comparison on this specific machine and is not intended as a general SSD benchmark. - Reproduction / reference implementation ======================================= The complete investigation, tested source, separate patches, combined patch, known-working module, SHA256 checksums, installation/bootstrap procedure and recovery procedure are published here: https://github.com/gvozd188/vmd-arl004 Exact reference commit: https://github.com/gvozd188/vmd-arl004/commit/5438c83 Relevant files: - 0001-vmd-second-rootbus-intel.patch - Integration of Intel's second-rootbus support. - - 0002-vmd-ad0b-arl004-workaround.patch - Experimental ARL004 workaround. - - vmd-arl004.patch - Combined patch. - - vmd-ubuntu-7.0.0-30.c - Ubuntu VMD source used as the patch base. - - vmd.c - Final tested source. - - vmd.ko - Known-working reference module for 7.0.0-30-generic. - + 0001-vmd-second-rootbus-intel.patch + Integration of Intel's second-rootbus support. + + 0002-vmd-ad0b-arl004-workaround.patch + Experimental ARL004 workaround. + + vmd-arl004.patch + Combined patch. + + vmd-ubuntu-7.0.0-30.c + Ubuntu VMD source used as the patch base. + + vmd.c + Final tested source. + + vmd.ko + Known-working reference module for 7.0.0-30-generic. Known-working source SHA256: - 0a27aa1379e8b7fc22f509b8d06ed3676a211d7bb3226a3f9b3dadfc208be7a3 + 0a27aa1379e8b7fc22f509b8d06ed3676a211d7bb3226a3f9b3dadfc208be7a3 Known-working module SHA256: - b2c9eacb720d45fcaab15ff09ad3fdc2e97b8a6dd215c80fa282090ff8d2b2cd - + b2c9eacb720d45fcaab15ff09ad3fdc2e97b8a6dd215c80fa282090ff8d2b2cd Installation history ==================== Because the stock VMD driver could not expose the internal SSD, an existing Ubuntu HDD from another laptop was connected to the MSI Vector through a SATA-to-USB adapter. The MSI Vector was booted directly from that HDD. That Ubuntu environment was running kernel 7.0.0-30-generic. The modified VMD driver was used there to expose the internal NVMe SSD. Ubuntu was then manually deployed onto the dedicated Ubuntu partition of the internal SSD without modifying the existing Windows and data partitions. The manually deployed SSD installation initially contained kernel 7.0.0-14-generic. This kernel was not intentionally selected as a VMD workaround; it was simply the kernel present in the manually deployed system at that stage. A compatible custom VMD module was installed for 7.0.0-14-generic and added to its initramfs, allowing the first independent boot from the internal SSD. Only after that successful SSD boot was DKMS configured. The SSD installation was subsequently updated to 7.0.0-30-generic, where the final VMD/ARL004 development and testing was performed. - Expected result =============== The stock Ubuntu kernel should: 1. correctly enumerate the second-rootbus / Bus Offset 3 topology on Intel - VMD 8086:ad0b; + VMD 8086:ad0b; 2. expose the internal NVMe SSD; 3. handle NVMe completion ordering without repeated approximately 30-second - completion timeouts. - + completion timeouts. Actual result ============= With the stock VMD driver, the internal SSD is not exposed because Bus Offset Setting 3 is rejected. After adding second-rootbus support alone, the SSD becomes visible but repeated NVMe completion stalls occur on this hardware. The experimental ARL004 ordering workaround eliminates the observed stalls on the tested system. - Notes ===== The ARL004 workaround is experimental and platform-specific. I am reporting the observed hardware behavior and the tested workaround rather than claiming that this implementation is the appropriate final upstream fix. The Windows driver binary is not redistributed in the GitHub repository. Only identification information, hashes and static-analysis notes are provided. ProblemType: Bug DistroRelease: Ubuntu 26.04 Package: linux-image-7.0.0-30-generic 7.0.0-30.30 ProcVersionSignature: Ubuntu 7.0.0-30.30-generic 7.0.12 Uname: Linux 7.0.0-30-generic x86_64 ApportVersion: 2.34.1-0ubuntu0.1 Architecture: amd64 AudioDevicesInUse: - USER PID ACCESS COMMAND - /dev/snd/controlC1: gvozd188 2323 F.... pipewire - gvozd188 2360 F.... wireplumber - /dev/snd/controlC0: gvozd188 2360 F.... wireplumber - /dev/snd/seq: gvozd188 2323 F.... pipewire + USER PID ACCESS COMMAND + /dev/snd/controlC1: gvozd188 2323 F.... pipewire + gvozd188 2360 F.... wireplumber + /dev/snd/controlC0: gvozd188 2360 F.... wireplumber + /dev/snd/seq: gvozd188 2323 F.... pipewire CasperMD5CheckResult: unknown CurrentDesktop: ubuntu:GNOME Date: Thu Sep 3 13:08:10 2026 MachineType: Micro-Star International Co., Ltd. Vector 17 HX AI A2XWIG ProcFB: 0 i915drmfb ProcKernelCmdLine: BOOT_IMAGE=/boot/vmlinuz-7.0.0-30-generic root=UUID=fef65fb9-b1c4-4bbe-9c02-92a4a7280fee ro quiet splash iommu=pt crashkernel=2G-4G:320M,4G-32G:512M,32G-64G:1024M,64G-128G:2048M,128G-:4096M SourcePackage: linux UpgradeStatus: No upgrade log present (probably fresh install) WifiSyslog: - + dmi.bios.date: 04/20/2026 dmi.bios.release: 1.18 dmi.bios.vendor: American Megatrends International, LLC. dmi.bios.version: E17S3IMS.112 dmi.board.asset.tag: Default string dmi.board.name: MS-17S3 dmi.board.vendor: Micro-Star International Co., Ltd. dmi.board.version: REV:1.0 dmi.chassis.asset.tag: No Asset Tag dmi.chassis.type: 10 dmi.chassis.vendor: Micro-Star International Co., Ltd. dmi.chassis.version: N/A dmi.modalias: dmi:bvnAmericanMegatrendsInternational,LLC.:bvrE17S3IMS.112:bd04/20/2026:br1.18:svnMicro-StarInternationalCo.,Ltd.:pnVector17HXAIA2XWIG:pvrREV1.0:rvnMicro-StarInternationalCo.,Ltd.:rnMS-17S3:rvrREV1.0:cvnMicro-StarInternationalCo.,Ltd.:ct10:cvrN/A:sku17S3.1:pfaVector: dmi.product.family: Vector dmi.product.name: Vector 17 HX AI A2XWIG dmi.product.sku: 17S3.1 dmi.product.version: REV:1.0 dmi.sys.vendor: Micro-Star International Co., Ltd. -- You received this bug notification because you are subscribed to linux in Ubuntu. Matching subscriptions: Bgg, Bmail, Nb https://bugs.launchpad.net/bugs/2166325 Title: Intel VMD 8086:ad0b: Bus Offset 3 prevents NVMe enumeration and ARL004 causes NVMe completion stalls Status in linux package in Ubuntu: Confirmed Bug description: SRU Justification: Impact: On Intel VMD 8086:ad0b / Arrow Lake-HX systems, Ubuntu 26.04 with the 7.0.x kernel has two VMD-related problems. First, the stock VMD driver does not support Bus Offset Setting 3. On the affected MSI Vector this results in: vmd 0000:00:0e.0: Unknown Bus Offset Setting (3) and prevents enumeration of the internal NVMe device behind VMD. After adding the required second-rootbus / Bus Offset 3 support, a second issue is exposed: repeated NVMe timeout, completion polled events caused by the Intel Arrow Lake ARL004 interrupt-ordering erratum. These events cause severe storage stalls and make the system practically unusable under sustained I/O. Launchpad bug #2166325 is now Confirmed and affects multiple users. Fix: The fix is implemented as two logically separate changes: Add Intel VMD second-rootbus / Bus Offset 3 support so that NVMe devices behind VMD 8086:ad0b can be enumerated correctly. Apply an ARL004-specific interrupt-ordering workaround for VMD 8086:ad0b and child PCI_CLASS_STORAGE_EXPRESS devices. Before dispatching the child interrupt with generic_handle_irq(), perform a dummy PCI configuration-space read from the MSI-initiating NVMe device. The read is serialized with the existing VMD configuration-space lock. The workaround is deliberately limited to VMD 8086:ad0b and NVMe-class child devices, so other VMD devices and non-NVMe children are unaffected. The stock drivers/pci/controller/vmd.c in Ubuntu 7.0.0-30.30 and 7.0.0-31.31 is byte-for-byte identical: SHA256: b631d449d8e1e896bcf1fa1e4ade53789d28db3c86c6a15fb7fb7e506cd274c8 The patched vmd.c used successfully with Ubuntu 7.0.0-31-generic is: SHA256: 0a27aa1379e8b7fc22f509b8d06ed3676a211d7bb3226a3f9b3dadfc208be7a3 Testcase: Hardware: MSI Vector 17 HX AI, Intel VMD 8086:ad0b, NVMe behind VMD. With the stock driver: Boot Ubuntu 26.04 with the affected 7.0.x kernel. Verify that Bus Offset Setting 3 causes the VMD driver to fail NVMe enumeration. After Bus Offset 3 support is added but without the ARL004 workaround, run sustained sequential NVMe reads and monitor the kernel log. Repeated nvme nvme0: I/O tag ... timeout, completion polled events occur at approximately 30-second intervals. A 1 GiB sequential read took approximately 121 seconds (~8.8 MB/s). With both fixes applied: The internal NVMe is enumerated normally. The recurring timeout, completion polled events disappear. The same 1 GiB read completes in approximately 0.88 seconds (~1.2 GB/s). A subsequent 10 GiB sequential read also completes normally. The same patched implementation is currently running successfully on Ubuntu 7.0.0-31-generic. Source and patch series: https://github.com/gvozd188/vmd-arl004 Original public implementation: https://github.com/gvozd188/vmd-arl004/commit/5438c83 Hardware ======== Laptop: MSI Vector 17 HX AI Platform: Intel Arrow Lake Intel VMD: 8086:ad0b VMD PCI address: 0000:00:0e.0 Subsystem: 1462:149c Internal NVMe SSD: Phison 1TB ESR01TBYCCA4-EDJ-2MS Controller: Phison PS5029-E29T PCIe 4.0 NVMe PCI ID: 1987:5029 (rev 01) Firmware: ETFM50.0 Ubuntu: 26.04 Current/final tested kernel: 7.0.0-30-generic Secure Boot: enabled Problem 1: Intel VMD Bus Offset 3 ================================ With the stock Ubuntu VMD driver the internal NVMe SSD is not exposed. The kernel reports: vmd 0000:00:0e.0: Unknown Bus Offset Setting (3) and no internal /dev/nvme* device is available. Linux 6.14 was also tested on this machine and did not solve the VMD problem. The system firmware does not expose a usable BIOS option to disable Intel VMD/RST. Intel's public VMD second-rootbus patch series was integrated into the Ubuntu VMD source: [PATCH v3 0/8] VMD add second rootbus support https://www.spinics.net/lists/linux-pci/msg163096.html After integrating the second-rootbus support, Linux successfully enumerates the internal NVMe controller and SSD. Problem 2: NVMe completion stalls ================================= After the SSD became accessible through the modified VMD driver, a second problem became visible. Kernel messages repeatedly contained: nvme nvme0: I/O tag ... timeout, completion polled The stalls occurred at approximately 30-second intervals. A diagnostic sequential read before the workaround: sudo dd if=/dev/nvme0n1 of=/dev/null bs=16M count=64 status=progress Result: 1 GiB in approximately 121.339 seconds approximately 8.8 MB/s CPU and memory were not saturated. Disabling ASPM was tested and did not solve the problem. ARL004 investigation ==================== The official Intel RST/VMD Windows driver distributed by MSI for this machine was examined by static analysis for comparison. The relevant Windows driver path performs a PCI configuration-space read after MSI handling when the completion state requires ordering. This behavior is consistent with the Intel Arrow Lake ARL004 erratum, where an MSI from a VMD-owned device may pass a preceding memory write. An experimental Linux workaround was implemented for the tested 8086:ad0b VMD/NVMe path. It performs a dummy PCI configuration-space read before the subsequent interrupt handling path. Result ====== With the experimental ARL004 workaround: sudo dd if=/dev/nvme0n1 of=/dev/null bs=16M count=64 status=progress completed in: 1 GiB in 0.88206 seconds approximately 1.2 GB/s A subsequent 10 GiB sequential diagnostic read also completed normally. After booting with the final tested module: sudo journalctl -k -b | grep -E 'timeout|completion polled' produced no matching messages. The approximately 136x difference above is only a diagnostic comparison on this specific machine and is not intended as a general SSD benchmark. Reproduction / reference implementation ======================================= The complete investigation, tested source, separate patches, combined patch, known-working module, SHA256 checksums, installation/bootstrap procedure and recovery procedure are published here: https://github.com/gvozd188/vmd-arl004 Exact reference commit: https://github.com/gvozd188/vmd-arl004/commit/5438c83 Relevant files: 0001-vmd-second-rootbus-intel.patch Integration of Intel's second-rootbus support. 0002-vmd-ad0b-arl004-workaround.patch Experimental ARL004 workaround. vmd-arl004.patch Combined patch. vmd-ubuntu-7.0.0-30.c Ubuntu VMD source used as the patch base. vmd.c Final tested source. vmd.ko Known-working reference module for 7.0.0-30-generic. Known-working source SHA256: 0a27aa1379e8b7fc22f509b8d06ed3676a211d7bb3226a3f9b3dadfc208be7a3 Known-working module SHA256: b2c9eacb720d45fcaab15ff09ad3fdc2e97b8a6dd215c80fa282090ff8d2b2cd Installation history ==================== Because the stock VMD driver could not expose the internal SSD, an existing Ubuntu HDD from another laptop was connected to the MSI Vector through a SATA-to-USB adapter. The MSI Vector was booted directly from that HDD. That Ubuntu environment was running kernel 7.0.0-30-generic. The modified VMD driver was used there to expose the internal NVMe SSD. Ubuntu was then manually deployed onto the dedicated Ubuntu partition of the internal SSD without modifying the existing Windows and data partitions. The manually deployed SSD installation initially contained kernel 7.0.0-14-generic. This kernel was not intentionally selected as a VMD workaround; it was simply the kernel present in the manually deployed system at that stage. A compatible custom VMD module was installed for 7.0.0-14-generic and added to its initramfs, allowing the first independent boot from the internal SSD. Only after that successful SSD boot was DKMS configured. The SSD installation was subsequently updated to 7.0.0-30-generic, where the final VMD/ARL004 development and testing was performed. Expected result =============== The stock Ubuntu kernel should: 1. correctly enumerate the second-rootbus / Bus Offset 3 topology on Intel VMD 8086:ad0b; 2. expose the internal NVMe SSD; 3. handle NVMe completion ordering without repeated approximately 30-second completion timeouts. Actual result ============= With the stock VMD driver, the internal SSD is not exposed because Bus Offset Setting 3 is rejected. After adding second-rootbus support alone, the SSD becomes visible but repeated NVMe completion stalls occur on this hardware. The experimental ARL004 ordering workaround eliminates the observed stalls on the tested system. Notes ===== The ARL004 workaround is experimental and platform-specific. I am reporting the observed hardware behavior and the tested workaround rather than claiming that this implementation is the appropriate final upstream fix. The Windows driver binary is not redistributed in the GitHub repository. Only identification information, hashes and static-analysis notes are provided. ProblemType: Bug DistroRelease: Ubuntu 26.04 Package: linux-image-7.0.0-30-generic 7.0.0-30.30 ProcVersionSignature: Ubuntu 7.0.0-30.30-generic 7.0.12 Uname: Linux 7.0.0-30-generic x86_64 ApportVersion: 2.34.1-0ubuntu0.1 Architecture: amd64 AudioDevicesInUse: USER PID ACCESS COMMAND /dev/snd/controlC1: gvozd188 2323 F.... pipewire gvozd188 2360 F.... wireplumber /dev/snd/controlC0: gvozd188 2360 F.... wireplumber /dev/snd/seq: gvozd188 2323 F.... pipewire CasperMD5CheckResult: unknown CurrentDesktop: ubuntu:GNOME Date: Thu Sep 3 13:08:10 2026 MachineType: Micro-Star International Co., Ltd. Vector 17 HX AI A2XWIG ProcFB: 0 i915drmfb ProcKernelCmdLine: BOOT_IMAGE=/boot/vmlinuz-7.0.0-30-generic root=UUID=fef65fb9-b1c4-4bbe-9c02-92a4a7280fee ro quiet splash iommu=pt crashkernel=2G-4G:320M,4G-32G:512M,32G-64G:1024M,64G-128G:2048M,128G-:4096M SourcePackage: linux UpgradeStatus: No upgrade log present (probably fresh install) WifiSyslog: dmi.bios.date: 04/20/2026 dmi.bios.release: 1.18 dmi.bios.vendor: American Megatrends International, LLC. dmi.bios.version: E17S3IMS.112 dmi.board.asset.tag: Default string dmi.board.name: MS-17S3 dmi.board.vendor: Micro-Star International Co., Ltd. dmi.board.version: REV:1.0 dmi.chassis.asset.tag: No Asset Tag dmi.chassis.type: 10 dmi.chassis.vendor: Micro-Star International Co., Ltd. dmi.chassis.version: N/A dmi.modalias: dmi:bvnAmericanMegatrendsInternational,LLC.:bvrE17S3IMS.112:bd04/20/2026:br1.18:svnMicro-StarInternationalCo.,Ltd.:pnVector17HXAIA2XWIG:pvrREV1.0:rvnMicro-StarInternationalCo.,Ltd.:rnMS-17S3:rvrREV1.0:cvnMicro-StarInternationalCo.,Ltd.:ct10:cvrN/A:sku17S3.1:pfaVector: dmi.product.family: Vector dmi.product.name: Vector 17 HX AI A2XWIG dmi.product.sku: 17S3.1 dmi.product.version: REV:1.0 dmi.sys.vendor: Micro-Star International Co., Ltd. To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2166325/+subscriptions
Комментариев нет:
Отправить комментарий