From: Jason Gunthorpe <jgg@ziepe.ca>
To: "Tian, Kevin" <kevin.tian@intel.com>
Cc: Lu Baolu <baolu.lu@linux.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>,
"Liu, Yi L" <yi.l.liu@intel.com>,
Jacob Pan <jacob.jun.pan@linux.intel.com>,
Joel Granados <j.granados@samsung.com>,
"iommu@lists.linux.dev" <iommu@lists.linux.dev>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v6 06/10] iommufd: Add iommufd fault object
Date: Wed, 12 Jun 2024 10:23:58 -0300 [thread overview]
Message-ID: <20240612132358.GU791043@ziepe.ca> (raw)
In-Reply-To: <BN9PR11MB527615EC664698C340A0CA878CFB2@BN9PR11MB5276.namprd11.prod.outlook.com>
On Fri, Jun 07, 2024 at 09:17:28AM +0000, Tian, Kevin wrote:
> > From: Lu Baolu <baolu.lu@linux.intel.com>
> > Sent: Monday, May 27, 2024 12:05 PM
> >
> > +static ssize_t iommufd_fault_fops_read(struct file *filep, char __user *buf,
> > + size_t count, loff_t *ppos)
> > +{
> > + size_t fault_size = sizeof(struct iommu_hwpt_pgfault);
> > + struct iommufd_fault *fault = filep->private_data;
> > + struct iommu_hwpt_pgfault data;
> > + struct iommufd_device *idev;
> > + struct iopf_group *group;
> > + struct iopf_fault *iopf;
> > + size_t done = 0;
> > + int rc = 0;
> > +
> > + if (*ppos || count % fault_size)
> > + return -ESPIPE;
>
> the man page says:
>
> "If count is zero, read() returns zero and has no other results."
The above does that? 0 % X == 0
> > +
> > + mutex_lock(&fault->mutex);
> > + while (!list_empty(&fault->deliver) && count > done) {
> > + group = list_first_entry(&fault->deliver,
> > + struct iopf_group, node);
> > +
> > + if (group->fault_count * fault_size > count - done)
> > + break;
> > +
> > + rc = xa_alloc(&fault->response, &group->cookie, group,
> > + xa_limit_32b, GFP_KERNEL);
> > + if (rc)
> > + break;
> > +
> > + idev = to_iommufd_handle(group->attach_handle)->idev;
> > + list_for_each_entry(iopf, &group->faults, list) {
> > + iommufd_compose_fault_message(&iopf->fault,
> > + &data, idev,
> > + group->cookie);
> > + rc = copy_to_user(buf + done, &data, fault_size);
> > + if (rc) {
>
> 'rc' should be converted to -EFAULT.
Yes
> > + xa_erase(&fault->response, group->cookie);
> > + break;
> > + }
> > + done += fault_size;
> > + }
> > +
> > + list_del(&group->node);
> > + }
> > + mutex_unlock(&fault->mutex);
> > +
> > + return done == 0 ? rc : done;
>
> again this doesn't match the manual:
>
> "On error, -1 is returned, and errno is set appropriately. "
>
> it doesn't matter whether 'done' is 0.
It is setup so that once the list_del() below happens it is guarenteed
that the system call will return a positive result so that the
list_del'd items are always returned to userspace.
If we hit any fault here on the Nth item we should still return the
prior items and ignore the fault.
If we hit a fault on the first item then we should return the fault.
Jason
next prev parent reply other threads:[~2024-06-12 13:24 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-27 4:05 [PATCH v6 00/10] IOMMUFD: Deliver IO page faults to user space Lu Baolu
2024-05-27 4:05 ` [PATCH v6 01/10] iommu: Introduce domain attachment handle Lu Baolu
2024-06-05 8:02 ` Tian, Kevin
2024-06-06 5:33 ` Baolu Lu
2024-06-12 13:10 ` Jason Gunthorpe
2024-06-13 3:04 ` Baolu Lu
2024-05-27 4:05 ` [PATCH v6 02/10] iommu: Remove sva handle list Lu Baolu
2024-06-05 8:15 ` Tian, Kevin
2024-06-06 6:06 ` Baolu Lu
2024-06-07 9:35 ` Tian, Kevin
2024-06-12 13:05 ` Jason Gunthorpe
2024-06-13 4:06 ` Baolu Lu
2024-05-27 4:05 ` [PATCH v6 03/10] iommu: Add attach handle to struct iopf_group Lu Baolu
2024-06-05 8:23 ` Tian, Kevin
2024-06-06 6:18 ` Baolu Lu
2024-06-12 13:37 ` Jason Gunthorpe
2024-06-13 4:23 ` Baolu Lu
2024-06-13 11:49 ` Jason Gunthorpe
2024-06-14 1:16 ` Baolu Lu
2024-05-27 4:05 ` [PATCH v6 04/10] iommu: Extend domain attach group with handle support Lu Baolu
2024-06-12 13:41 ` Jason Gunthorpe
2024-06-13 4:47 ` Baolu Lu
2024-05-27 4:05 ` [PATCH v6 05/10] iommufd: Add fault and response message definitions Lu Baolu
2024-06-05 8:28 ` Tian, Kevin
2024-06-06 6:27 ` Baolu Lu
2024-06-07 9:38 ` Tian, Kevin
2024-06-12 13:19 ` Jason Gunthorpe
2024-06-12 13:50 ` Jason Gunthorpe
2024-06-13 6:32 ` Baolu Lu
2024-06-13 4:54 ` Baolu Lu
2024-06-12 13:52 ` Jason Gunthorpe
2024-06-13 6:40 ` Baolu Lu
2024-05-27 4:05 ` [PATCH v6 06/10] iommufd: Add iommufd fault object Lu Baolu
2024-06-07 9:17 ` Tian, Kevin
2024-06-08 9:58 ` Baolu Lu
2024-06-12 13:25 ` Jason Gunthorpe
2024-06-13 6:44 ` Baolu Lu
2024-06-12 13:23 ` Jason Gunthorpe [this message]
2024-06-17 7:32 ` Tian, Kevin
2024-05-27 4:05 ` [PATCH v6 07/10] iommufd: Fault-capable hwpt attach/detach/replace Lu Baolu
2024-06-07 9:30 ` Tian, Kevin
2024-06-09 7:23 ` Baolu Lu
2024-06-17 7:37 ` Tian, Kevin
2024-05-27 4:05 ` [PATCH v6 08/10] iommufd: Associate fault object with iommufd_hw_pgtable Lu Baolu
2024-06-07 9:30 ` Tian, Kevin
2024-05-27 4:05 ` [PATCH v6 09/10] iommufd/selftest: Add IOPF support for mock device Lu Baolu
2024-05-27 4:05 ` [PATCH v6 10/10] iommufd/selftest: Add coverage for IOPF test Lu Baolu
2024-06-12 13:54 ` [PATCH v6 00/10] IOMMUFD: Deliver IO page faults to user space Jason Gunthorpe
2024-06-13 6:46 ` 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=20240612132358.GU791043@ziepe.ca \
--to=jgg@ziepe.ca \
--cc=baolu.lu@linux.intel.com \
--cc=iommu@lists.linux.dev \
--cc=j.granados@samsung.com \
--cc=jacob.jun.pan@linux.intel.com \
--cc=jean-philippe@linaro.org \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=linux-kernel@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;
as well as URLs for NNTP newsgroup(s).