Skip to content

Commit 61985a0

Browse files
committed
x86/amd-iommu: Remove command buffer resetting logic
The logic to reset the command buffer caused more problems than it actually helped. The logic jumped in when the IOMMU hardware doesn't execute commands anymore but the reasons for this are usually not fixed by just resetting the command buffer. So the code can be removed to reduce complexity. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
1 parent 815b33f commit 61985a0

File tree

2 files changed

+1
-22
lines changed

2 files changed

+1
-22
lines changed

arch/x86/include/asm/amd_iommu_types.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -409,9 +409,6 @@ struct amd_iommu {
409409
/* if one, we need to send a completion wait command */
410410
bool need_sync;
411411

412-
/* becomes true if a command buffer reset is running */
413-
bool reset_in_progress;
414-
415412
/* default dma_ops domain for that IOMMU */
416413
struct dma_ops_domain *default_dom;
417414

arch/x86/kernel/amd_iommu.c

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ struct iommu_cmd {
5858
u32 data[4];
5959
};
6060

61-
static void reset_iommu_command_buffer(struct amd_iommu *iommu);
6261
static void update_domain(struct protection_domain *domain);
6362

6463
/****************************************************************************
@@ -323,8 +322,6 @@ static void iommu_print_event(struct amd_iommu *iommu, void *__evt)
323322
break;
324323
case EVENT_TYPE_ILL_CMD:
325324
printk("ILLEGAL_COMMAND_ERROR address=0x%016llx]\n", address);
326-
iommu->reset_in_progress = true;
327-
reset_iommu_command_buffer(iommu);
328325
dump_command(address);
329326
break;
330327
case EVENT_TYPE_CMD_HARD_ERR:
@@ -485,8 +482,7 @@ static int iommu_completion_wait(struct amd_iommu *iommu)
485482

486483
if (i == LOOP_TIMEOUT) {
487484
pr_alert("AMD-Vi: Completion-Wait loop timed out\n");
488-
iommu->reset_in_progress = true;
489-
reset_iommu_command_buffer(iommu);
485+
ret = -EIO;
490486
}
491487

492488
return 0;
@@ -628,20 +624,6 @@ void amd_iommu_flush_all_domains(void)
628624
spin_unlock_irqrestore(&amd_iommu_pd_lock, flags);
629625
}
630626

631-
static void reset_iommu_command_buffer(struct amd_iommu *iommu)
632-
{
633-
pr_err("AMD-Vi: Resetting IOMMU command buffer\n");
634-
635-
if (iommu->reset_in_progress)
636-
panic("AMD-Vi: ILLEGAL_COMMAND_ERROR while resetting command buffer\n");
637-
638-
amd_iommu_reset_cmd_buffer(iommu);
639-
amd_iommu_flush_all_devices();
640-
amd_iommu_flush_all_domains();
641-
642-
iommu->reset_in_progress = false;
643-
}
644-
645627
/****************************************************************************
646628
*
647629
* The functions below are used the create the page table mappings for

0 commit comments

Comments
 (0)