Linux IOMMU Development
 help / color / mirror / Atom feed
From: Pranjal Shrivastava <praan@google.com>
To: Will Deacon <will@kernel.org>
Cc: Joerg Roedel <joro@8bytes.org>,
	Robin Murphy <robin.murphy@arm.com>,
	catalin.marinas@arm.com, kernel-team@android.com,
	Mostafa Saleh <smostafa@google.com>,
	Nicolin Chen <nicolinc@nvidia.com>,
	iommu@lists.linux.dev, Daniel Mentz <danielmentz@google.com>,
	Jason Gunthorpe <jgg@ziepe.ca>
Subject: Re: [PATCH v6 0/2] iommu/arm-smmu-v3: Parse out event records
Date: Mon, 6 Jan 2025 11:29:00 +0000	[thread overview]
Message-ID: <Z3u-fJSL7JurZXDc@google.com> (raw)
In-Reply-To: <173378062404.4091733.5462540525505481045.b4-ty@kernel.org>

On Tue, Dec 10, 2024 at 12:17:29AM +0000, Will Deacon wrote:
> On Tue, 03 Dec 2024 18:49:04 +0000, Pranjal Shrivastava wrote:
> > Enhance the arm-smmu-v3 driver to parse out useful information from
> > event records into a structure for better event handling & logging.
> > 
> > Some sample events, powered by QEMU:
> > 
> > 1. Bad StreamID:
> > 
> > [...]
> 
> Applied to will (for-joerg/arm-smmu/updates), thanks!
> 
> [1/2] iommu/arm-smmu-v3: Introduce struct arm_smmu_event
>       https://git.kernel.org/will/c/43ca55f5555b
> [2/2] iommu/arm-smmu-v3: Log better event records
>       https://git.kernel.org/will/c/d814b70b9b90
> 
> One thing I noticed when playing around with this on Qemu, however, is
> that we print the raw hex dump in reverse compared to the way in which
> the record tables are described in the spec. What do you think about
> doing something like the following on top of your series?
> 
> 
> diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> index 143ff6336a95..d33a150b29ef 100644
> --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> @@ -1880,8 +1880,8 @@ static void arm_smmu_dump_raw_event(struct arm_smmu_device *smmu, u64 *raw,
>  
>  	dev_err(smmu->dev, "event 0x%02x received:\n", event->id);
>  
> -	for (i = 0; i < EVTQ_ENT_DWORDS; ++i)
> -		dev_err(smmu->dev, "\t0x%016llx\n", raw[i]);
> +	for (i = EVTQ_ENT_DWORDS - 1; i >= 0; --i)
> +		dev_err(smmu->dev, "[%u]\t0x%016llx\n", i, raw[i]);
>  }
>  
>  #define ARM_SMMU_EVT_KNOWN(e)	((e)->id < ARRAY_SIZE(event_str) && event_str[(e)->id])
> 
> 
> Then, for example, a permission fault looks like:
> 
> [   32.543815] arm-smmu-v3 arm-smmu-v3.0.auto: event 0x13 received:
> [   32.545115] arm-smmu-v3 arm-smmu-v3.0.auto: [3]	0x0000000000000000
> [   32.546361] arm-smmu-v3 arm-smmu-v3.0.auto: [2]	0x00000000fffff040
> [   32.548672] arm-smmu-v3 arm-smmu-v3.0.auto: [1]	0x0000020000000000
> [   32.550209] arm-smmu-v3 arm-smmu-v3.0.auto: [0]	0x0000002000000013
> [   32.551990] arm-smmu-v3 arm-smmu-v3.0.auto: event: F_PERMISSION client: 0000:00:04.0 sid: 0x20 ssid: 0x0 iova: 0xfffff040 ipa: 0x0
> [   32.553952] arm-smmu-v3 arm-smmu-v3.0.auto: unpriv data write s1 "Input address caused fault" stag: 0x0
> 
> I started going a step further and printing the records 32 bits at a
> time (again, to match the spec), but then I realised that the current
> code doesn't look like it handles big-endian properly...

Ack. I think I can post another series to refactor this to match the
spec by logging 32-bits at a time in Little-endian. I'll give it a go..

> 
> Finally, coccinelle suggests you could use str_read_write() instead of:
> 
> 	evt->read ? "read" : "write",
> 
> which I suppose we could.

Ack. I'll use `str_read_write` do you want me to club it with the above
refactor in a series?

> 
> Cheers,
> -- 
> Will

Thanks,
Praan

  reply	other threads:[~2025-01-06 11:29 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-03 18:49 [PATCH v6 0/2] iommu/arm-smmu-v3: Parse out event records Pranjal Shrivastava
2024-12-03 18:49 ` [PATCH v6 1/2] iommu/arm-smmu-v3: Introduce struct arm_smmu_event Pranjal Shrivastava
2024-12-03 18:49 ` [PATCH v6 2/2] iommu/arm-smmu-v3: Log better event records Pranjal Shrivastava
2024-12-10  0:17 ` [PATCH v6 0/2] iommu/arm-smmu-v3: Parse out " Will Deacon
2025-01-06 11:29   ` Pranjal Shrivastava [this message]
2025-01-07 13:00     ` Will Deacon

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=Z3u-fJSL7JurZXDc@google.com \
    --to=praan@google.com \
    --cc=catalin.marinas@arm.com \
    --cc=danielmentz@google.com \
    --cc=iommu@lists.linux.dev \
    --cc=jgg@ziepe.ca \
    --cc=joro@8bytes.org \
    --cc=kernel-team@android.com \
    --cc=nicolinc@nvidia.com \
    --cc=robin.murphy@arm.com \
    --cc=smostafa@google.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