From: Pranjal Shrivastava <praan@google.com>
To: Jason Gunthorpe <jgg@ziepe.ca>
Cc: Will Deacon <will@kernel.org>,
Kunkun Jiang <jiangkunkun@huawei.com>,
Baolu Lu <baolu.lu@linux.intel.com>,
Robin Murphy <robin.murphy@arm.com>,
Joerg Roedel <joro@8bytes.org>,
Nicolin Chen <nicolinc@nvidia.com>,
Michael Shavit <mshavit@google.com>,
Mostafa Saleh <smostafa@google.com>,
"moderated list:ARM SMMU DRIVERS"
<linux-arm-kernel@lists.infradead.org>,
iommu@lists.linux.dev, linux-kernel@vger.kernel.org,
wanghaibin.wang@huawei.com, yuzenghui@huawei.com,
tangnianyao@huawei.com
Subject: Re: [bug report] iommu/arm-smmu-v3: Event cannot be printed in some scenarios
Date: Tue, 6 Aug 2024 15:58:43 +0000 [thread overview]
Message-ID: <ZrJIM8-pS31grIVR@google.com> (raw)
In-Reply-To: <20240806124943.GF676757@ziepe.ca>
On Tue, Aug 06, 2024 at 09:49:43AM -0300, Jason Gunthorpe wrote:
> On Mon, Aug 05, 2024 at 03:32:50PM +0000, Pranjal Shrivastava wrote:
> > Here's the updated diff:
> > 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 a31460f9f3d4..ed2b106e02dd 100644
> > --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
> > @@ -1777,7 +1777,7 @@ static int arm_smmu_handle_evt(struct arm_smmu_device *smmu, u64 *evt)
> > goto out_unlock;
> > }
> >
> > - iommu_report_device_fault(master->dev, &fault_evt);
> > + ret = iommu_report_device_fault(master->dev, &fault_evt);
> > out_unlock:
> > mutex_unlock(&smmu->streams_mutex);
> > return ret;
> > diff --git a/drivers/iommu/intel/svm.c b/drivers/iommu/intel/svm.c
> > index 0e3a9b38bef2..7684e7562584 100644
> > --- a/drivers/iommu/intel/svm.c
> > +++ b/drivers/iommu/intel/svm.c
> > @@ -532,6 +532,9 @@ void intel_svm_page_response(struct device *dev, struct iopf_fault *evt,
> > bool last_page;
> > u16 sid;
> >
> > + if (!evt)
> > + return;
> > +
>
> I'm not sure this make sense??
>
> The point of this path is for the driver to retire the fault with a
> failure. This prevents that from happing on Intel and we are back to
> loosing track of a fault.
>
> All calls to iommu_report_device_fault() must result in
> page_response() properly retiring whatever the event was.
>
> > +static void iopf_error_response(struct device *dev, struct iommu_fault *fault)
> > +{
> > + const struct iommu_ops *ops = dev_iommu_ops(dev);
> > + struct iommu_page_response resp = {
> > + .pasid = fault->prm.pasid,
> > + .grpid = fault->prm.grpid,
> > + .code = IOMMU_PAGE_RESP_INVALID
> > + };
> > +
> > + ops->page_response(dev, NULL, &resp);
> > +}
>
> The issue originates here, why is this NULL?
>
> void iommu_report_device_fault(struct device *dev, struct iopf_fault *evt)
> {
>
> The caller has an evt? I think we should pass it down.
Hmm, I agree, I don't see `iommu_report_device_fault` be called anywhere
with a NULL evt. Hence, it does make sense to pass the evt down and
ensure we don't lose track of the event.
I'm assuming that we retired the if (!evt) check from intel->page
response since we didn't have any callers of intel->page_response
with a NULL evt. (Atleast, for now, I don't see that happen).
Lu, Will -- Any additional comments/suggestions for this?
>
> Looking at the abort_group path that is effectively what we do, but
> the evt is copied to the group's evt first.
>
> I also noticed we have another similar issue with the
> report_partial_fault() loosing the fault if memory allocation
> fails.. A goto for your new err label after report_partial_fault()
> would be appropriate too
Ahh, yes! I'll add that too in the follow up.
>
> Jason
Thanks,
Pranjal
next prev parent reply other threads:[~2024-08-06 15:58 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-24 1:42 [bug report] iommu/arm-smmu-v3: Event cannot be printed in some scenarios Kunkun Jiang
2024-07-24 9:15 ` Mostafa Saleh
2024-07-24 9:22 ` Kunkun Jiang
2024-07-24 10:24 ` Will Deacon
2024-07-24 13:03 ` Jason Gunthorpe
2024-07-25 7:35 ` Tian, Kevin
2024-07-25 12:58 ` Jason Gunthorpe
2024-07-26 0:04 ` Tian, Kevin
2024-07-29 5:29 ` Baolu Lu
2024-08-02 14:38 ` Pranjal Shrivastava
2024-08-05 12:13 ` Kunkun Jiang
2024-08-05 12:30 ` Will Deacon
2024-08-05 15:32 ` Pranjal Shrivastava
2024-08-06 0:09 ` Baolu Lu
2024-08-06 12:49 ` Jason Gunthorpe
2024-08-06 15:58 ` Pranjal Shrivastava [this message]
2024-08-07 5:35 ` Baolu Lu
2024-08-08 13:50 ` Pranjal Shrivastava
2024-08-13 17:56 ` Jason Gunthorpe
2024-08-14 9:02 ` Pranjal Shrivastava
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=ZrJIM8-pS31grIVR@google.com \
--to=praan@google.com \
--cc=baolu.lu@linux.intel.com \
--cc=iommu@lists.linux.dev \
--cc=jgg@ziepe.ca \
--cc=jiangkunkun@huawei.com \
--cc=joro@8bytes.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mshavit@google.com \
--cc=nicolinc@nvidia.com \
--cc=robin.murphy@arm.com \
--cc=smostafa@google.com \
--cc=tangnianyao@huawei.com \
--cc=wanghaibin.wang@huawei.com \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.com \
/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