• Huang Rui's avatar
    iommu/amd: Fix the left value check of cmd buffer · dc78a9e1
    Huang Rui authored
    commit 432abf68 upstream.
    
    The generic command buffer entry is 128 bits (16 bytes), so the offset
    of tail and head pointer should be 16 bytes aligned and increased with
    0x10 per command.
    
    When cmd buf is full, head = (tail + 0x10) % CMD_BUFFER_SIZE.
    
    So when left space of cmd buf should be able to store only two
    command, we should be issued one COMPLETE_WAIT additionally to wait
    all older commands completed. Then the left space should be increased
    after IOMMU fetching from cmd buf.
    
    So left check value should be left <= 0x20 (two commands).
    Signed-off-by: default avatarHuang Rui <ray.huang@amd.com>
    Fixes: ac0ea6e9 ('x86/amd-iommu: Improve handling of full command buffer')
    Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    dc78a9e1
amd_iommu.c 94 KB