All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicolin Chen <nicolinc@nvidia.com>
To: "Liu, Yi L" <yi.l.liu@intel.com>
Cc: Baolu Lu <baolu.lu@linux.intel.com>,
	"joro@8bytes.org" <joro@8bytes.org>,
	"alex.williamson@redhat.com" <alex.williamson@redhat.com>,
	"jgg@nvidia.com" <jgg@nvidia.com>,
	"Tian, Kevin" <kevin.tian@intel.com>,
	"robin.murphy@arm.com" <robin.murphy@arm.com>,
	"cohuck@redhat.com" <cohuck@redhat.com>,
	"eric.auger@redhat.com" <eric.auger@redhat.com>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"mjrosato@linux.ibm.com" <mjrosato@linux.ibm.com>,
	"chao.p.peng@linux.intel.com" <chao.p.peng@linux.intel.com>,
	"yi.y.sun@linux.intel.com" <yi.y.sun@linux.intel.com>,
	"peterx@redhat.com" <peterx@redhat.com>,
	"jasowang@redhat.com" <jasowang@redhat.com>,
	"shameerali.kolothum.thodi@huawei.com" 
	<shameerali.kolothum.thodi@huawei.com>,
	"lulu@redhat.com" <lulu@redhat.com>,
	"suravee.suthikulpanit@amd.com" <suravee.suthikulpanit@amd.com>,
	"iommu@lists.linux.dev" <iommu@lists.linux.dev>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-kselftest@vger.kernel.org"
	<linux-kselftest@vger.kernel.org>
Subject: Re: [PATCH 05/12] iommufd/hw_pagetable: Do not populate user-managed hw_pagetables
Date: Thu, 23 Mar 2023 01:12:13 -0700	[thread overview]
Message-ID: <ZBwJ3SrTZpM1fW8D@Asurada-Nvidia> (raw)
In-Reply-To: <DS0PR11MB7529C74B5A37F745AD822C5FC3879@DS0PR11MB7529.namprd11.prod.outlook.com>

On Thu, Mar 23, 2023 at 08:06:26AM +0000, Liu, Yi L wrote:
> External email: Use caution opening links or attachments
> 
> 
> > From: Nicolin Chen <nicolinc@nvidia.com>
> > Sent: Friday, March 10, 2023 2:51 PM
>  >
> > On Fri, Mar 10, 2023 at 10:25:10AM +0800, Baolu Lu wrote:
> > > External email: Use caution opening links or attachments
> > >
> > >
> > > On 3/9/23 4:09 PM, Yi Liu wrote:
> > > > From: Nicolin Chen <nicolinc@nvidia.com>
> > > >
> > > > A user-managed hw_pagetable does not need to get populated, since it
> > is
> > > > managed by a guest OS. Move the iopt_table_add_domain and
> > list_add_tail
> > > > calls into a helper, where the hwpt pointer will be redirected to its
> > > > hwpt->parent if it's available.
> > > >
> > > > Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
> > > > Signed-off-by: Yi Liu <yi.l.liu@intel.com>
> > > > ---
> > > >   drivers/iommu/iommufd/hw_pagetable.c | 20 ++++++++++++++++++--
> > > >   1 file changed, 18 insertions(+), 2 deletions(-)
> > > >
> > > > diff --git a/drivers/iommu/iommufd/hw_pagetable.c
> > b/drivers/iommu/iommufd/hw_pagetable.c
> > > > index 16e92a1c150b..6e45ec0a66fa 100644
> > > > --- a/drivers/iommu/iommufd/hw_pagetable.c
> > > > +++ b/drivers/iommu/iommufd/hw_pagetable.c
> > > > @@ -43,6 +43,23 @@ int iommufd_hw_pagetable_enforce_cc(struct
> > iommufd_hw_pagetable *hwpt)
> > > >       return 0;
> > > >   }
> > > >
> > > > +static int iommufd_hw_pagetable_link_ioas(struct
> > iommufd_hw_pagetable *hwpt)
> > > > +{
> > > > +     int rc;
> > > > +
> > > > +     if (hwpt->parent)
> > > > +             hwpt = hwpt->parent;
> > > > +
> > > > +     if (!list_empty(&hwpt->hwpt_item))
> > > > +             return 0;
> > >
> > > What is above check for? Is it "the hwpt has already been inserted into
> > > the hwpt list of its ioas in another place"?
> > >
> > > If so, is it possible that hwpt will be deleted from the list even when
> > > this user hwpt is still linked to the ioas?
> >
> > It means that the hwpt is already linked to the ioas. And the
> > hwpt_item can be only empty after a destroy().
> >
> > With that being said, after I think it through, perhaps Yi's
> > previous change removing it might be better. So, it could be:
> >
> > -------------------------------------------------------------------------------
> > +     /*
> > +      * Only a parent hwpt needs to be linked to the IOAS. And a hwpt-
> > >parent
> > +      * must be linked to the IOAS already, when it's being allocated.
> > +      */
> >       if (hwpt->parent)
> > -             hwpt = hwpt->parent;
> > -
> > -     if (!list_empty(&hwpt->hwpt_item))
> >               return 0;
> >
> > -------------------------------------------------------------------------------
> >
> > I was concerned about the case where a device gets attached to
> > the nested hwpt without staging at the parent hwpt first.
> 
> I think I was convinced with the reason that this helper may be
> called by allocation for both standalone s2 hwpt and the nested
> hwpt. So my change was not enough. Yours covers both cases.
> 
> > But,
> > the link between the parent hwpt and the IOAS happened inside
> > the allocation function now, not attach() any more.
> 
> Not quite get. This helper is also called in the allocation path. Is
> it? Anyhow, with Jason's comment, this helper may be reworked.
> We can sync later on the next version.

We previously had this link_ioas() in attach() routine so we
needed to make sure hwpt->parent got populated, because the
device could be attached to an S1 HWPT directly. But now this
is in the alloc() routine, so by the time an S1 HWPT is being
allocated, an S2 HWPT must be allocated first and populated
already.

Nic

  reply	other threads:[~2023-03-23  8:12 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-09  8:08 [PATCH 00/12] iommufd: Add nesting infrastructure Yi Liu
2023-03-09  8:08 ` [PATCH 01/12] iommu: Add new iommu op to create domains owned by userspace Yi Liu
2023-03-10  0:56   ` Jason Gunthorpe
2023-03-29 10:56     ` Liu, Yi L
2023-04-13  0:44     ` Nicolin Chen
2023-04-13 11:37       ` Jason Gunthorpe
2023-04-13 15:25         ` Nicolin Chen
2023-03-09  8:09 ` [PATCH 02/12] iommu: Add nested domain support Yi Liu
2023-03-17 10:25   ` Tian, Kevin
2023-03-18  8:34     ` Baolu Lu
2023-03-09  8:09 ` [PATCH 03/12] iommufd/hw_pagetable: Use domain_alloc_user op for domain allocation Yi Liu
2023-03-10  1:17   ` Baolu Lu
2023-03-09  8:09 ` [PATCH 04/12] iommufd: Pass parent hwpt and user_data to iommufd_hw_pagetable_alloc() Yi Liu
2023-03-10  2:10   ` Baolu Lu
2023-03-10 17:49     ` Jason Gunthorpe
2023-03-17 10:23   ` Tian, Kevin
2023-03-20 12:47     ` Jason Gunthorpe
2023-03-21  1:25       ` Tian, Kevin
2023-03-09  8:09 ` [PATCH 05/12] iommufd/hw_pagetable: Do not populate user-managed hw_pagetables Yi Liu
2023-03-10  2:25   ` Baolu Lu
2023-03-10  6:50     ` Nicolin Chen
2023-03-10 12:51       ` Baolu Lu
2023-03-23  8:06       ` Liu, Yi L
2023-03-23  8:12         ` Nicolin Chen [this message]
2023-03-23  8:28           ` Liu, Yi L
2023-03-10 15:29   ` Jason Gunthorpe
2023-03-10 23:31     ` Nicolin Chen
2023-03-09  8:09 ` [PATCH 06/12] iommufd: IOMMU_HWPT_ALLOC allocation with user data Yi Liu
2023-03-10  3:02   ` Baolu Lu
2023-03-23  8:11     ` Liu, Yi L
2023-03-09  8:09 ` [PATCH 07/12] iommufd: Add IOMMU_HWPT_INVALIDATE Yi Liu
2023-03-10  3:15   ` Baolu Lu
2023-03-14  4:12     ` Liu, Yi L
2023-03-10 17:50   ` Jason Gunthorpe
2023-03-14  4:14     ` Liu, Yi L
2023-03-14  4:18     ` Liu, Yi L
2023-03-20 12:48       ` Jason Gunthorpe
2023-03-09  8:09 ` [PATCH 08/12] iommufd/device: Report supported hwpt_types Yi Liu
2023-03-10  3:30   ` Baolu Lu
2023-03-10  7:10     ` Nicolin Chen
2023-03-10  7:39       ` Liu, Yi L
2023-03-10  7:45         ` Nicolin Chen
2023-03-10 17:52           ` Jason Gunthorpe
2023-03-23  8:08             ` Liu, Yi L
2023-03-09  8:09 ` [PATCH 09/12] iommufd/selftest: Add domain_alloc_user() support in iommu mock Yi Liu
2023-03-09  8:09 ` [PATCH 10/12] iommufd/selftest: Add coverage for IOMMU_HWPT_ALLOC with user data Yi Liu
2023-03-09  8:09 ` [PATCH 11/12] iommufd/selftest: Add IOMMU_TEST_OP_MD_CHECK_IOTLB test op Yi Liu
2023-03-09  8:09 ` [PATCH 12/12] iommufd/selftest: Add coverage for IOMMU_HWPT_INVALIDATE ioctl Yi Liu
2023-03-09 14:02 ` [PATCH 00/12] iommufd: Add nesting infrastructure 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=ZBwJ3SrTZpM1fW8D@Asurada-Nvidia \
    --to=nicolinc@nvidia.com \
    --cc=alex.williamson@redhat.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=chao.p.peng@linux.intel.com \
    --cc=cohuck@redhat.com \
    --cc=eric.auger@redhat.com \
    --cc=iommu@lists.linux.dev \
    --cc=jasowang@redhat.com \
    --cc=jgg@nvidia.com \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=lulu@redhat.com \
    --cc=mjrosato@linux.ibm.com \
    --cc=peterx@redhat.com \
    --cc=robin.murphy@arm.com \
    --cc=shameerali.kolothum.thodi@huawei.com \
    --cc=suravee.suthikulpanit@amd.com \
    --cc=yi.l.liu@intel.com \
    --cc=yi.y.sun@linux.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 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.