On Fri, Sep 25, 2020 at 11:45:05AM +0000, Suravee Suthikulpanit wrote: > When using 128-bit interrupt-remapping table entry (IRTE) (a.k.a GA mode), > current driver disables interrupt remapping when it updates the IRTE > so that the upper and lower 64-bit values can be updated safely. > > However, this creates a small window, where the interrupt could > arrive and result in IO_PAGE_FAULT (for interrupt) as shown below. > > IOMMU Driver Device IRQ > ============ =========== > irte.RemapEn=0 > ... > change IRTE IRQ from device ==> IO_PAGE_FAULT !! > ... > irte.RemapEn=1 > > This scenario has been observed when changing irq affinity on a system > running I/O-intensive workload, in which the destination APIC ID > in the IRTE is updated. > > Instead, use cmpxchg_double() to update the 128-bit IRTE at once without > disabling the interrupt remapping. However, this means several features, > which require GA (128-bit IRTE) support will also be affected if cmpxchg16b > is not supported (which is unprecedented for AMD processors w/ IOMMU). > > Cc: stable@xxxxxxxxxxxxxxx > Fixes: 880ac60e2538 ("iommu/amd: Introduce interrupt remapping ops structure") > Reported-by: Sean Osborne <sean.m.osborne@xxxxxxxxxx> > Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx> > Tested-by: Erik Rockstrom <erik.rockstrom@xxxxxxxxxx> > Reviewed-by: Joao Martins <joao.m.martins@xxxxxxxxxx> > Link: https://lore.kernel.org/r/20200903093822.52012-3-suravee.suthikulpanit@xxxxxxx > Signed-off-by: Joerg Roedel <jroedel@xxxxxxx> > --- > Note: This patch is the back-port on top of the stable branch linux-5.4.y > for the upstream commit e52d58d54a32 ("iommu/amd: Use cmpxchg_double() when > updating 128-bit IRTE") since the original patch does not apply cleanly. Now queued up, thanks. greg k-h