• Joerg Roedel's avatar
    iommu/amd: Don't put completion-wait semaphore on stack · 4bf5beef
    Joerg Roedel authored
    The semaphore used by the AMD IOMMU to signal command
    completion lived on the stack until now, which was safe as
    the driver busy-waited on the semaphore with IRQs disabled,
    so the stack can't go away under the driver.
    
    But the recently introduced vmap-based stacks break this as
    the physical address of the semaphore can't be determinded
    easily anymore. The driver used the __pa() macro, but that
    only works in the direct-mapping. The result were
    Completion-Wait timeout errors seen by the IOMMU driver,
    breaking system boot.
    
    Since putting the semaphore on the stack is bad design
    anyway, move the semaphore into 'struct amd_iommu'. It is
    protected by the per-iommu lock and now in the direct
    mapping again. This fixes the Completion-Wait timeout errors
    and makes AMD IOMMU systems boot again with vmap-based
    stacks enabled.
    Reported-by: default avatarBorislav Petkov <bp@alien8.de>
    Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    4bf5beef
amd_iommu.c 91.8 KB