On 2019-08-20 2:53 a.m., Nadav Amit wrote: > set_msi_sid_cb() is used to determine whether device aliases share the > same bus, but it can provide false indications that aliases use the same > bus when in fact they do not. The reason is that set_msi_sid_cb() > assumes that pdev is fixed, while actually pci_for_each_dma_alias() can > call fn() when pdev is set to a subordinate device. > > As a result, running an VM on ESX with VT-d emulation enabled can > results in the log warning such as: > > DMAR: [INTR-REMAP] Request device [00:11.0] fault index 3b [fault reason 38] Blocked an interrupt request due to source-id verification failure > > This seems to cause additional ata errors such as: > ata3.00: qc timeout (cmd 0xa1) > ata3.00: failed to IDENTIFY (I/O error, err_mask=0x4) > > These timeouts also cause boot to be much longer and other errors. > > Fix it by checking comparing the alias with the previous one instead. > > Fixes: 3f0c625c6ae71 ("iommu/vt-d: Allow interrupts from the entire bus for aliased devices") > Cc: stable@xxxxxxxxxxxxxxx > Cc: Logan Gunthorpe <logang@xxxxxxxxxxxx> > Cc: David Woodhouse <dwmw2@xxxxxxxxxxxxx> > Cc: Joerg Roedel <joro@xxxxxxxxxx> > Cc: Jacob Pan <jacob.jun.pan@xxxxxxxxxxxxxxx> > Signed-off-by: Nadav Amit <namit@xxxxxxxxxx> This looks good to me. Reviewed-by: Logan Gunthorpe <logang@xxxxxxxxxxxx> Thanks! Logan