Public bug reported:

Summary
On kernel 7.0 (Ubuntu 7.0.0-27 … 7.0.0-34-generic) with Intel VT-d in DMA-FQ 
mode, an HP Smart Array P440 (hpsa) logical volume livelocks 1–2 minutes after 
boot under bursty concurrent I/O. `iommu_dma_map_sg()` fails because 
`vtdss_map_range()` returns -EADDRINUSE for an IOVA that `alloc_iova_fast()` 
has just handed out. The IOMMU page table still holds a mapping for an IOVA 
range the allocator considers free. hpsa turns the mapping failure into 
`SCSI_MLQUEUE_HOST_BUSY`, so blk-mq retries the same request (same IOVA, same 
failure) forever and the whole device stalls. No errors are logged. Booting 
with `iommu=pt` avoids it completely (same workload, repeated tests).

Hardware / software
- HP ProLiant ML30 Gen9, Xeon E3-1220 v6 (Kaby Lake), 16 GB, System ROM U23 
v2.50 (2017-10-02)
- Smart Array P440 (PCI 0000:03:00.0, [103c:3239], fw 7.20), hpsa 3.4.20-200, 
one RAID 5 LV, mq-deadline, max_sectors_kb 1024, max_segments 543
- Kernel: Ubuntu 7.0.0-34-generic (traced); the same symptom has occurred since 
at least 7.0.0-27 (July 2026). No iommu cmdline options; IOMMU group type 
`DMA-FQ`. 7.0.0-38 and mainline not yet tested without the workaround (the 
system now runs 7.0.0-38 with iommu=pt).
- Also present: Intel C236 SATA (ahci, RAID mode) with a SATA SSD (unaffected), 
BCM5720 NIC

Reproduction
Boot, mount ext4-on-LVM on the P440 LV, start ~20 Docker containers whose data 
lives on it (burst of reads/writes, load ~9). Within 1–2 minutes all I/O to the 
LV stops. Happens on most boots; occasionally a boot survives.

Observed state during the hang
- `/sys/kernel/debug/block/sdX/sched/queued: 0 240 0`, `owned_by_driver: 0 1 
0`, `hctx0/state: TAG_ACTIVE|SCHED_RESTART`, `hctx0/flags: TAG_QUEUE_SHARED`, 
`dispatch_busy: 9`, driver tags busy=0/1013, sched_tags busy=237/256
- `device_busy 0`, `host_busy 0`, hpsa `commands_outstanding 0`, 
`lockup_detected ld=0`, `iorequest_cnt == iodone_cnt`
- Hung tasks: jbd2, writeback kworkers (`do_get_write_access`, 
`__wait_on_buffer`, `blk_mq_get_tag`, `rq_qos_wait`)

Trace 1: blk-mq retry loop (function_graph on blk_mq_run_hw_queue + events, 2 s)
block_rq_issue: 8,0 RA 1048576 () 3562792960 + 2048 be,0,4 [kworker/1:1H]
scsi_dispatch_cmd_error: host_no=8 channel=1 id=0 lun=0 data_sgl=16 ... 
driver_tag=897 scheduler_tag=141
  cmnd=(READ_16 lba=3562792960 txlen=2048 ...) rtn=SCSI_MLQUEUE_HOST_BUSY
... same request repeated 54 times in 2 s

Trace 2: inside hpsa_scsi_queue_command (function_graph, funcgraph-retval)
hpsa_scsi_queue_command() {
  hpsa_ioaccel_submit();                         /* ret=0x1 */
  hpsa_ciss_submit() {
    hpsa_scatter_gather() {
      scsi_dma_map() {
        dma_map_sg_attrs() {
          __dma_map_sg_attrs() {
            iommu_dma_map_sg() {
              iommu_get_dma_domain();
              iommu_dma_sync_sg_for_device();    /* ret=0x0 */
              iommu_dma_alloc_iova() {
                alloc_iova_fast()                /* ret=0x7bf00 */
              }                                  /* ret=0x7bf00000 */
              iommu_map_sg() {
                iommu_map_nosync() {
                  vtdss_map_range();             /* ret=-98 */
                  iommu_unmap();                 /* ret=0x23000 */
                }                                /* ret=-98 */
                iommu_unmap();                   /* ret=0x0 */
              }                                  /* ret=-98 */
              iommu_dma_free_iova() { free_iova_fast(); }
            }                                    /* iommu_dma_map_sg ret=-22 */
          }
        }
      }                                          /* scsi_dma_map ret=-12 */
    }                                            /* hpsa_scatter_gather ret=-12 
*/
  }                                              /* hpsa_ciss_submit ret=0x1055 
*/
}                                                /* SCSI_MLQUEUE_HOST_BUSY */
Every retry gets the same IOVA (0x7bf00000) and the same -EADDRINUSE, so it 
never recovers. Note that the partial-map rollback unmapped 0x23000 bytes, i.e. 
part of the range mapped before hitting the occupied PTEs.

Workaround
`iommu=pt` (verified with a Docker-only start and a full normal boot, each 30 
min clean, where the same start-up previously hung within ~2 min; also stable 
on 7.0.0-38 since) (group type `identity`): the identical workload has run 
clean through start-up and beyond on several boots.

Possibly related
- April 2026 report of stale-PTE warnings on IOVA reuse in the lazy-flush 
(`__iommu_dma_unmap_sg` / `free_iova_fast`) path under ATA/SCSI load on 6.12.y 
(series rejected; root cause disputed): 
https://ratatoskr.run/linux-iommu/2026/04/3525711/t
- Our case differs: the stale PTE is persistent (dozens of retries over 
minutes), not a transient TLB race. That suggests a mapping whose IOVA was 
freed without its PTEs ever being cleared.
- Separately, hpsa turning any `scsi_dma_map()` failure into HOST_BUSY (with no 
log message) means a deterministic mapping failure becomes a silent permanent 
livelock. Logging it, or failing the command after N retries, would make this 
kind of fault visible.

Full traces and debugfs dumps available on request.

ProblemType: Bug
DistroRelease: Ubuntu 26.04
Package: linux-image-7.0.0-38-generic 7.0.0-38.38
ProcVersionSignature: Ubuntu 7.0.0-38.38-generic 7.0.14
Uname: Linux 7.0.0-38-generic x86_64
AlsaDevices:
 total 0
 crw-rw---- 1 root audio 116,  1 Oct  1 21:04 seq
 crw-rw---- 1 root audio 116, 33 Oct  1 21:04 timer
AplayDevices: Error: [Errno 2] No such file or directory: 'aplay'
ApportVersion: 2.34.1-0ubuntu0.1
Architecture: amd64
ArecordDevices: Error: [Errno 2] No such file or directory: 'arecord'
AudioDevicesInUse: Error: command ['fuser', '-v', '/dev/snd/seq', 
'/dev/snd/timer'] failed with exit code 1:
CRDA: N/A
CasperMD5CheckResult: pass
CurrentDmesg: Error: command ['dmesg'] failed with exit code 1: dmesg: read 
kernel buffer failed: Operation not permitted
Date: Thu Oct  1 21:13:10 2026
InstallationDate: Installed on 2026-05-26 (128 days ago)
InstallationMedia: Ubuntu-Server 26.04 "Resolute Raccoon" - Release amd64 
(20260420.1)
Lsusb:
 Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
 Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
 Bus 002 Device 002: ID 0424:2660 Microchip Technology, Inc. (formerly SMSC) Hub
 Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Lsusb-t:
 /:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=uhci_hcd/2p, 12M
 /:  Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/16p, 480M
     |__ Port 003: Dev 002, If 0, Class=Hub, Driver=hub/2p, 480M
 /:  Bus 003.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/10p, 5000M
MachineType: HP ProLiant ML30 Gen9
PciMultimedia:
 
ProcEnviron:
 LANG=en_US.UTF-8
 PATH=(custom, no user)
 SHELL=/bin/bash
 TERM=xterm-256color
 XDG_RUNTIME_DIR=<set>
ProcFB: 0 mgag200drmfb
ProcKernelCmdLine: BOOT_IMAGE=/vmlinuz-7.0.0-38-generic 
root=/dev/mapper/ssd--vg-root ro iommu=pt 
crashkernel=2G-4G:320M,4G-32G:512M,32G-64G:1024M,64G-128G:2048M,128G-:4096M
RfKill: Error: [Errno 2] No such file or directory: 'rfkill'
SourcePackage: linux
UpgradeStatus: No upgrade log present (probably fresh install)
acpidump:
 
dmi.bios.date: 10/02/2017
dmi.bios.release: 2.50
dmi.bios.vendor: HP
dmi.bios.version: U23
dmi.board.name: ProLiant ML30 Gen9
dmi.board.vendor: HP
dmi.chassis.type: 7
dmi.chassis.vendor: HP
dmi.ec.firmware.release: 2.77
dmi.modalias: 
dmi:bvnHP:bvrU23:bd10/02/2017:br2.50:efr2.77:svnHP:pnProLiantML30Gen9:pvr:rvnHP:rnProLiantML30Gen9:rvr:cvnHP:ct7:cvr:sku823403-B21:pfaProLiant:
dmi.product.family: ProLiant
dmi.product.name: ProLiant ML30 Gen9
dmi.product.sku: 823403-B21
dmi.sys.vendor: HP

** Affects: linux (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: amd64 apport-bug dma hang hpsa intel-iommu iommu resolute storage vt-d

** Attachment added: "Traces from affected system"
   
https://bugs.launchpad.net/bugs/2169238/+attachment/6004668/+files/hpsa-iommu-traces.tar.gz

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2169238

Title:
  hpsa P440 livelocks: VT-d iommu_map -EADDRINUSE on fresh IOVA (DMA-
  FQ), works with iommu=pt

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2169238/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to