Skip to content

Commit 432abf6

Browse files
huangruijoergroedel
authored andcommitted
iommu/amd: Fix the left value check of cmd buffer
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: Huang Rui <ray.huang@amd.com> Fixes: ac0ea6e ('x86/amd-iommu: Improve handling of full command buffer') Signed-off-by: Joerg Roedel <jroedel@suse.de>
1 parent 65ca7f5 commit 432abf6

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

drivers/iommu/amd_iommu.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1023,7 +1023,7 @@ static int __iommu_queue_command_sync(struct amd_iommu *iommu,
10231023
next_tail = (tail + sizeof(*cmd)) % CMD_BUFFER_SIZE;
10241024
left = (head - next_tail) % CMD_BUFFER_SIZE;
10251025

1026-
if (left <= 2) {
1026+
if (left <= 0x20) {
10271027
struct iommu_cmd sync_cmd;
10281028
int ret;
10291029

0 commit comments

Comments
 (0)