From: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
To: Jason Gunthorpe <jgg@ziepe.ca>
Cc: Lu Baolu <baolu.lu@linux.intel.com>,
Kevin Tian <kevin.tian@intel.com>, Joerg Roedel <joro@8bytes.org>,
Will Deacon <will@kernel.org>,
Robin Murphy <robin.murphy@arm.com>,
Jean-Philippe Brucker <jean-philippe@linaro.org>,
Nicolin Chen <nicolinc@nvidia.com>, Yi Liu <yi.l.liu@intel.com>,
Jacob Pan <jacob.jun.pan@linux.intel.com>,
"iommu@lists.linux.dev" <iommu@lists.linux.dev>,
"linux-kselftest@vger.kernel.org"
<linux-kselftest@vger.kernel.org>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: RE: [PATCH v2 4/6] iommufd: Deliver fault messages to user space
Date: Mon, 15 Jan 2024 17:44:13 +0000 [thread overview]
Message-ID: <b1663110e1ca4301834f403270357bea@huawei.com> (raw)
In-Reply-To: <20240115164723.GB50608@ziepe.ca>
> -----Original Message-----
> From: Jason Gunthorpe <jgg@ziepe.ca>
> Sent: Monday, January 15, 2024 4:47 PM
> To: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
> Cc: Lu Baolu <baolu.lu@linux.intel.com>; Kevin Tian <kevin.tian@intel.com>;
> Joerg Roedel <joro@8bytes.org>; Will Deacon <will@kernel.org>; Robin
> Murphy <robin.murphy@arm.com>; Jean-Philippe Brucker <jean-
> philippe@linaro.org>; Nicolin Chen <nicolinc@nvidia.com>; Yi Liu
> <yi.l.liu@intel.com>; Jacob Pan <jacob.jun.pan@linux.intel.com>;
> iommu@lists.linux.dev; linux-kselftest@vger.kernel.org;
> virtualization@lists.linux-foundation.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH v2 4/6] iommufd: Deliver fault messages to user space
>
> On Fri, Jan 12, 2024 at 05:46:13PM +0000, Shameerali Kolothum Thodi wrote:
> >
> >
> > > -----Original Message-----
> > > From: Lu Baolu <baolu.lu@linux.intel.com>
> > > Sent: Thursday, October 26, 2023 3:49 AM
> > > To: Jason Gunthorpe <jgg@ziepe.ca>; Kevin Tian <kevin.tian@intel.com>;
> Joerg
> > > Roedel <joro@8bytes.org>; Will Deacon <will@kernel.org>; Robin
> Murphy
> > > <robin.murphy@arm.com>; Jean-Philippe Brucker <jean-
> philippe@linaro.org>;
> > > Nicolin Chen <nicolinc@nvidia.com>; Yi Liu <yi.l.liu@intel.com>; Jacob
> Pan
> > > <jacob.jun.pan@linux.intel.com>
> > > Cc: iommu@lists.linux.dev; linux-kselftest@vger.kernel.org;
> > > virtualization@lists.linux-foundation.org; linux-kernel@vger.kernel.org;
> Lu
> > > Baolu <baolu.lu@linux.intel.com>
> > > Subject: [PATCH v2 4/6] iommufd: Deliver fault messages to user space
> > >
> > [...]
> >
> > Hi,
> >
> > > +static ssize_t hwpt_fault_fops_write(struct file *filep,
> > > + const char __user *buf,
> > > + size_t count, loff_t *ppos)
> > > +{
> > > + size_t response_size = sizeof(struct iommu_hwpt_page_response);
> > > + struct hw_pgtable_fault *fault = filep->private_data;
> > > + struct iommu_hwpt_page_response response;
> > > + struct iommufd_hw_pagetable *hwpt;
> > > + struct iopf_group *iter, *group;
> > > + struct iommufd_device *idev;
> > > + size_t done = 0;
> > > + int rc = 0;
> > > +
> > > + if (*ppos || count % response_size)
> > > + return -ESPIPE;
> > > +
> > > + mutex_lock(&fault->mutex);
> > > + while (!list_empty(&fault->response) && count > done) {
> > > + rc = copy_from_user(&response, buf + done, response_size);
> > > + if (rc)
> > > + break;
> > > +
> > > + /* Get the device that this response targets at. */
> > > + idev = container_of(iommufd_get_object(fault->ictx,
> > > + response.dev_id,
> > > + IOMMUFD_OBJ_DEVICE),
> > > + struct iommufd_device, obj);
> > > + if (IS_ERR(idev)) {
> > > + rc = PTR_ERR(idev);
> > > + break;
> > > + }
> > > +
> > > + /*
> > > + * Get the hw page table that this response was generated
> for.
> > > + * It must match the one stored in the fault data.
> > > + */
> > > + hwpt = container_of(iommufd_get_object(fault->ictx,
> > > + response.hwpt_id,
> > > +
> > > IOMMUFD_OBJ_HW_PAGETABLE),
> > > + struct iommufd_hw_pagetable, obj);
> > > + if (IS_ERR(hwpt)) {
> > > + iommufd_put_object(&idev->obj);
> > > + rc = PTR_ERR(hwpt);
> > > + break;
> > > + }
> > > +
> > > + if (hwpt != fault->hwpt) {
> > > + rc = -EINVAL;
> > > + goto put_obj;
> > > + }
> > > +
> > > + group = NULL;
> > > + list_for_each_entry(iter, &fault->response, node) {
> > > + if (response.grpid != iter->last_fault.fault.prm.grpid)
> > > + continue;
> > > +
> > > + if (idev->dev != iter->dev)
> > > + continue;
> > > +
> > > + if ((iter->last_fault.fault.prm.flags &
> > > + IOMMU_FAULT_PAGE_REQUEST_PASID_VALID)
> &&
> > > + response.pasid != iter->last_fault.fault.prm.pasid)
> > > + continue;
> >
> > I am trying to get vSVA working with this series and got hit by the above
> check.
> > On ARM platforms, page responses to stall events(CMD_RESUME) do not
> have
> > an associated pasid. I think, either we need to check here using
> > IOMMU_FAULT_PAGE_RESPONSE_NEEDS_PASID or remove the check
> > as it will be eventually done in iommu_page_response().
>
> That doesn't sound right..
>
> The PASID is the only information we have for userspace to identify
> the domain that is being faulted. It cannot be optional on the request
> side.
>
Yes, it is valid on the request side. But this is on the response side.
> If it is valid when userspace does read() then it should be valid when
> userspace does write() too.
>
> It is the only way the kernel can actually match request and response
> here.
The kernel currently checks the pasid only if IOMMU_FAULT_PAGE_RESPONSE_NEEDS_PASID
is set.
https://lore.kernel.org/linux-iommu/20200616144712.748818-1-jean-philippe@linaro.org/
> So, I think you have a userspace issue to not provide the right
> pasid??
This is not just ARM stall resume case, but for some PCI devices as well as per
the above commit log. So do we really need to track this in userspace ?
Thanks,
Shameer
next prev parent reply other threads:[~2024-01-15 17:44 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20231204150747eucas1p2365e92a7ac33ba99b801d7c800acaf6a@eucas1p2.samsung.com>
2023-10-26 2:49 ` [PATCH v2 0/6] IOMMUFD: Deliver IO page faults to user space Lu Baolu
2023-10-26 2:49 ` [PATCH v2 1/6] iommu: Add iommu page fault cookie helpers Lu Baolu
2023-12-01 14:38 ` Jason Gunthorpe
2023-12-08 6:24 ` Baolu Lu
2023-10-26 2:49 ` [PATCH v2 2/6] iommufd: Add iommu page fault uapi data Lu Baolu
2023-12-01 15:14 ` Jason Gunthorpe
2023-12-08 6:35 ` Baolu Lu
2023-10-26 2:49 ` [PATCH v2 3/6] iommufd: Initializing and releasing IO page fault data Lu Baolu
2023-12-12 13:10 ` Joel Granados
2023-12-12 14:12 ` Jason Gunthorpe
2023-12-13 2:04 ` Baolu Lu
2023-12-13 2:15 ` Tian, Kevin
2023-12-13 13:19 ` Jason Gunthorpe
2023-10-26 2:49 ` [PATCH v2 4/6] iommufd: Deliver fault messages to user space Lu Baolu
2023-12-01 15:24 ` Jason Gunthorpe
2023-12-08 11:43 ` Baolu Lu
2023-12-07 16:34 ` Joel Granados
2023-12-07 17:17 ` Jason Gunthorpe
2023-12-08 5:47 ` Baolu Lu
2023-12-08 13:41 ` Jason Gunthorpe
2024-01-12 17:46 ` Shameerali Kolothum Thodi
2024-01-15 16:47 ` Jason Gunthorpe
2024-01-15 17:44 ` Shameerali Kolothum Thodi [this message]
2024-01-15 17:58 ` Jason Gunthorpe
2023-10-26 2:49 ` [PATCH v2 5/6] iommufd/selftest: Add IOMMU_TEST_OP_TRIGGER_IOPF test support Lu Baolu
2023-10-26 2:49 ` [PATCH v2 6/6] iommufd/selftest: Add coverage for IOMMU_TEST_OP_TRIGGER_IOPF Lu Baolu
2023-11-02 12:47 ` [PATCH v2 0/6] IOMMUFD: Deliver IO page faults to user space Jason Gunthorpe
2023-11-07 8:35 ` Tian, Kevin
2023-11-07 17:54 ` Jason Gunthorpe
2023-11-08 8:53 ` Tian, Kevin
2023-11-08 17:39 ` Jason Gunthorpe
[not found] ` <c774e157-9b47-4fb8-80dd-37441c69b43d@linux.intel.com>
2023-11-15 13:58 ` Jason Gunthorpe
2023-11-16 1:42 ` Liu, Jing2
2023-11-21 0:14 ` Jason Gunthorpe
2023-11-29 9:08 ` Shameerali Kolothum Thodi
2023-11-30 3:44 ` Baolu Lu
2023-12-01 14:24 ` Jason Gunthorpe
2023-12-08 5:57 ` Baolu Lu
2023-12-08 13:43 ` Jason Gunthorpe
2023-12-04 15:07 ` Joel Granados
2023-12-04 15:32 ` Jason Gunthorpe
2023-12-08 5:10 ` Baolu Lu
2024-01-12 21:56 ` Joel Granados
2024-01-14 13:13 ` Baolu Lu
2024-01-14 17:18 ` Joel Granados
2024-01-15 1:25 ` Baolu Lu
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=b1663110e1ca4301834f403270357bea@huawei.com \
--to=shameerali.kolothum.thodi@huawei.com \
--cc=baolu.lu@linux.intel.com \
--cc=iommu@lists.linux.dev \
--cc=jacob.jun.pan@linux.intel.com \
--cc=jean-philippe@linaro.org \
--cc=jgg@ziepe.ca \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=nicolinc@nvidia.com \
--cc=robin.murphy@arm.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=will@kernel.org \
--cc=yi.l.liu@intel.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