From: Vasant Hegde <vasant.hegde@amd.com>
To: "Jörg Rödel" <joro@8bytes.org>,
"Dheeraj Kumar Srivastava" <dheerajkumar.srivastava@amd.com>
Cc: will@kernel.org, robin.murphy@arm.com, iommu@lists.linux.dev,
linux-kernel@vger.kernel.org, suravee.suthikulpanit@amd.com,
Santosh.Shukla@amd.com
Subject: Re: [PATCH] iommu/amd: Enhance "Completion-wait Time-out" error message
Date: Tue, 28 Oct 2025 14:45:16 +0530 [thread overview]
Message-ID: <01c81b5e-d6a3-41fa-9758-37661e115483@amd.com> (raw)
In-Reply-To: <tgugv7ebuxtnp6ou5jnt7od7jmccsipblqityiinhkgratosu6@bxsr73hpiiny>
Joerg,
On 10/27/2025 6:19 PM, Jörg Rödel wrote:
> Hey Dheeraj,
>
> On Thu, Oct 16, 2025 at 08:38:09PM +0530, Dheeraj Kumar Srivastava wrote:
>> static int wait_on_sem(struct amd_iommu *iommu, u64 data)
>> {
>> - int i = 0;
>> + struct iommu_cmd *cmd;
>> + int i = 0, j;
>>
>> while (*iommu->cmd_sem != data && i < LOOP_TIMEOUT) {
>> udelay(1);
>> @@ -1166,7 +1167,33 @@ static int wait_on_sem(struct amd_iommu *iommu, u64 data)
>> }
>>
>> if (i == LOOP_TIMEOUT) {
>> - pr_alert("Completion-Wait loop timed out\n");
>> + int head, tail;
>> +
>> + head = readl(iommu->mmio_base + MMIO_CMD_HEAD_OFFSET);
>> + tail = readl(iommu->mmio_base + MMIO_CMD_TAIL_OFFSET);
>> +
>> + pr_alert("IOMMU %04x:%02x:%02x.%01x: Completion-Wait loop timed out\n",
>> + iommu->pci_seg->id, PCI_BUS_NUM(iommu->devid),
>> + PCI_SLOT(iommu->devid), PCI_FUNC(iommu->devid));
>
> Better use dev_err(&amd_iommu->dev->dev, ...) here.
>
>> + if (!amd_iommu_dump) {
>> + /*
>> + * On command buffer completion timeout, step back by 2 commands
>> + * to locate the actual command that is causing the issue.
>> + */
>> + tail = (MMIO_CMD_BUFFER_TAIL(tail) - 2) & (CMD_BUFFER_ENTRIES - 1);
>> + cmd = (struct iommu_cmd *)(iommu->cmd_buf + tail * sizeof(*cmd));
>> + dump_command(iommu_virt_to_phys(cmd));
>> + } else {
>> + /* Dump entire command buffer along with head and tail indices */
>> + pr_alert("CMD Buffer head=%d tail=%d\n", (int)(MMIO_CMD_BUFFER_HEAD(head)),
>> + (int)(MMIO_CMD_BUFFER_TAIL(tail)));
>> + for (j = 0; j < CMD_BUFFER_ENTRIES; j++) {
>> + cmd = (struct iommu_cmd *)(iommu->cmd_buf + j * sizeof(*cmd));
>> + pr_err("%3d: %08x %08x %08x %08x\n", j, cmd->data[0], cmd->data[1],
>> + cmd->data[2], cmd->data[3]);
>> + }
>> + }
>
> I don't think it makes much sense to just print the command before the failed
> completion wait. In case of a timeout and amd_iommu_dump == true, just dump the
> whole pending command buffer, from head to tail.
We have debugfs support to extract entire command buffer. Also many cases once
we hit completion wait timeout, buffer won't progress.. and we will hit
completion wait repetitively. Hence in V2 he has removed printing entire command
buffer.
Do you want to log entire buffer once to dmesg if amd_iommu_dump=1 ? (for first
completion wait timeout event).
-Vasant
next prev parent reply other threads:[~2025-10-28 9:15 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-16 15:08 Dheeraj Kumar Srivastava
2025-10-27 12:49 ` Jörg Rödel
2025-10-28 9:15 ` Vasant Hegde [this message]
2025-10-29 8:30 ` Jörg Rödel
2025-10-29 10:48 ` Vasant Hegde
2025-10-29 11:16 ` Dheeraj Kumar Srivastava
2025-11-05 6:43 ` Dheeraj Kumar Srivastava
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=01c81b5e-d6a3-41fa-9758-37661e115483@amd.com \
--to=vasant.hegde@amd.com \
--cc=Santosh.Shukla@amd.com \
--cc=dheerajkumar.srivastava@amd.com \
--cc=iommu@lists.linux.dev \
--cc=joro@8bytes.org \
--cc=linux-kernel@vger.kernel.org \
--cc=robin.murphy@arm.com \
--cc=suravee.suthikulpanit@amd.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®