From: Pranjal Shrivastava <praan@google.com>
To: Daniel Mentz <danielmentz@google.com>
Cc: Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org>,
Robin Murphy <robin.murphy@arm.com>,
Jason Gunthorpe <jgg@ziepe.ca>,
Nicolin Chen <nicolinc@nvidia.com>,
Mostafa Saleh <smostafa@google.com>,
iommu@lists.linux.dev
Subject: Re: [RFC PATCH v2 10/10] iommu/arm-smmu-v3: Invoke pm_runtime before hw access
Date: Mon, 5 May 2025 16:10:53 +0000 [thread overview]
Message-ID: <aBjjDUhpffTEgPQi@google.com> (raw)
In-Reply-To: <CAE2F3rDKZpUGHc1oUm6zAJfb=XW7HOjs7vodgt_CDgWsDWUS2g@mail.gmail.com>
On Sun, May 04, 2025 at 01:29:04PM -0700, Daniel Mentz wrote:
> On Fri, Apr 18, 2025 at 4:35 PM Pranjal Shrivastava <praan@google.com> wrote:
> > @@ -139,6 +147,7 @@ static int arm_smmu_attach_dev_nested(struct iommu_domain *domain,
> > .old_domain = iommu_get_domain_for_dev(dev),
> > .ssid = IOMMU_NO_PASID,
> > };
> > + struct arm_smmu_device *smmu = master->smmu;
>
> Appears unused.
>
Yes, left it by mistake, the kernel test robot complains about it too,
will remove this.
> > @@ -130,10 +130,10 @@ static int arm_smmu_rpm_get_if_active(struct arm_smmu_device *smmu)
> > if (pm_runtime_enabled(smmu->dev))
> > return pm_runtime_get_if_in_use(smmu->dev);
> >
> > - return 0;
> > + return 1;
>
> Can we fix this in the commit that added this function?
>
Ugh, yes, my bad. Will move it to the appropriate commit.
> > @@ -2365,6 +2437,10 @@ static void __arm_smmu_tlb_inv_range(struct arm_smmu_cmdq_ent *cmd,
> > if (!size)
> > return;
> >
> > + /* No need to invalidate TLBs if smmu is suspended */
>
> The code doesn't check if the SMMU is suspended but rather whether the
> usage count is zero which is different. I'm concerned about the
> following sequence of events:
>
> * usage count drops to 0
> * TLB invalidations are elided, stale TLB entries remain
> * usage count becomes non-zero
>
> This would result in stale TLB entries staying permanently. I propose
> adding a new member like "is_suspended" to struct arm_smmu_device that
> stores whether the SMMU device is suspended. If this value reads true
> (i.e. SMMU is suspended) then you can rely on the driver issuing
> TLBI_NSNH_ALL before re-enabling SMMU. Use proper acquire and release
> semantics when accessing this variable.
Hmm.. we aren't relying on the refcount alone but the rpm state as well.
Pasting the following lines from pm_runtime_get_if_in_use's doc strings:
* Increment the runtime PM usage counter of @dev if its runtime PM
* status is %RPM_ACTIVE and its runtime PM usage counter is greater
* than 0, in which case it returns 1.
Thus, we aren't only eliding the invalidations when the refcount == 0
but also when rpm state != RPM_ACTIVE which is checked first[1].
I believe you're suggesting a case where the rpm_state == RPM_ACTIVE
but the refcount bounces between 0 & 1 without changing the rpm state?
Skimming through the core runtime pm code[2], it seems it does nothing
to resume if current_state and/or last_state were RPM_ACTIVE.
Let me dig deeper into the core runtime code to see if we're missing
something here.. otherwise, I agree with your suggestion to have a bool
to check if the smmu is really suspended.
Thanks,
Praan
[1]
https://elixir.bootlin.com/linux/v6.15-rc4/source/drivers/base/power/runtime.c#L1217
[2]
https://elixir.bootlin.com/linux/v6.15-rc4/source/drivers/base/power/runtime.c#L784
prev parent reply other threads:[~2025-05-05 16:11 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-18 23:33 [RFC PATCH v2 00/10] iommu/arm-smmu-v3: Implement Runtime/System Sleep ops Pranjal Shrivastava
2025-04-18 23:34 ` [RFC PATCH v2 01/10] iommu/arm-smmu-v3: Refactor arm_smmu_setup_irqs Pranjal Shrivastava
2025-05-02 19:14 ` Nicolin Chen
2025-04-18 23:34 ` [RFC PATCH v2 02/10] iommu/arm-smmu-v3: Add a helper to drain all queues Pranjal Shrivastava
2025-05-02 19:32 ` Nicolin Chen
2025-05-05 15:14 ` Pranjal Shrivastava
2025-05-04 20:28 ` Daniel Mentz
2025-05-05 15:10 ` Pranjal Shrivastava
2025-04-18 23:34 ` [RFC PATCH v2 03/10] iommu/tegra241-cmdqv: Add a helper to drain VCMDQs Pranjal Shrivastava
2025-04-23 6:34 ` Nicolin Chen
2025-04-18 23:34 ` [RFC PATCH v2 04/10] iommu/arm-smmu-v3: Cache and restore MSI config Pranjal Shrivastava
2025-05-02 19:43 ` Nicolin Chen
2025-05-05 15:16 ` Pranjal Shrivastava
2025-04-18 23:34 ` [RFC PATCH v2 05/10] iommu/arm-smmu-v3: Implement pm_runtime & system sleep ops Pranjal Shrivastava
2025-05-04 20:29 ` Daniel Mentz
2025-05-05 15:22 ` Pranjal Shrivastava
2025-04-18 23:34 ` [RFC PATCH v2 06/10] iommu: Add a helper to check for user ownership Pranjal Shrivastava
2025-04-19 14:03 ` kernel test robot
2025-04-18 23:34 ` [RFC PATCH v2 07/10] iommu/arm-smmu-v3: Track masters with user-owned groups Pranjal Shrivastava
2025-04-18 23:34 ` [RFC PATCH v2 08/10] iommu/arm-smmu-v3: Avoid suspend when user owns DMA Pranjal Shrivastava
2025-05-04 20:28 ` Daniel Mentz
2025-05-05 15:22 ` Pranjal Shrivastava
2025-04-18 23:34 ` [RFC PATCH v2 09/10] iommu/arm-smmu-v3: Enable pm_runtime and setup devlinks Pranjal Shrivastava
2025-04-18 23:34 ` [RFC PATCH v2 10/10] iommu/arm-smmu-v3: Invoke pm_runtime before hw access Pranjal Shrivastava
2025-04-19 14:13 ` kernel test robot
2025-05-04 20:29 ` Daniel Mentz
2025-05-05 16:10 ` Pranjal Shrivastava [this message]
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=aBjjDUhpffTEgPQi@google.com \
--to=praan@google.com \
--cc=danielmentz@google.com \
--cc=iommu@lists.linux.dev \
--cc=jgg@ziepe.ca \
--cc=joro@8bytes.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.