public inbox for linux-kselftest@vger.kernel.org
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgg@nvidia.com>
To: Nicolin Chen <nicolinc@nvidia.com>
Cc: Yi Liu <yi.l.liu@intel.com>,
	"Giani, Dhaval" <Dhaval.Giani@amd.com>,
	Vasant Hegde <vasant.hegde@amd.com>,
	Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>,
	joro@8bytes.org, alex.williamson@redhat.com,
	kevin.tian@intel.com, robin.murphy@arm.com,
	baolu.lu@linux.intel.com, cohuck@redhat.com,
	eric.auger@redhat.com, kvm@vger.kernel.org,
	mjrosato@linux.ibm.com, chao.p.peng@linux.intel.com,
	yi.y.sun@linux.intel.com, peterx@redhat.com, jasowang@redhat.com,
	shameerali.kolothum.thodi@huawei.com, lulu@redhat.com,
	iommu@lists.linux.dev, linux-kernel@vger.kernel.org,
	linux-kselftest@vger.kernel.org, zhenzhong.duan@intel.com,
	joao.m.martins@oracle.com, xin.zeng@intel.com,
	yan.y.zhao@intel.com
Subject: Re: [PATCH v6 0/6] iommufd: Add nesting infrastructure (part 2/2)
Date: Mon, 11 Dec 2023 17:57:38 -0400	[thread overview]
Message-ID: <20231211215738.GB3014157@nvidia.com> (raw)
In-Reply-To: <ZXd+1UVrcAQePjnD@Asurada-Nvidia>

On Mon, Dec 11, 2023 at 01:27:49PM -0800, Nicolin Chen wrote:
> On Fri, Dec 08, 2023 at 09:47:26PM -0400, Jason Gunthorpe wrote:
> > What is in a Nested domain:
> >  ARM: A CD table pointer
> >       Nesting domains are created for every unique CD table top pointer.
> 
> I think we basically implemented in a way of syncing STE, i,e,
> vSTE.Config must be "S1 Translate" besides a CD table pointer,
> and a nested domain is freed when vSTE.Config=BYPASS even if a
> CD table pointer is present, right?

Yes, but you can also de-duplicate the nested domains based on the CD
table pointer. It is not as critical for ARM as others, but may
still be worth doing.

> > To make this work the iommu needs to be programmed with:
> >  AMD: A vDomain-ID -> pDomain-ID table
> >       A vRID -> pRID table
> >       This is all bound to some "virtual function"
> >  ARM: A vRID -> pRID table
> >       The vCMDQ is bound to a VM_ID, so to the Nesting Parent
> 
> VCMDQ also has something called "virtual interface" that holds
> a VMID and a list of CMDQ queues, which might be a bit similar
> to AMD's "virtual function".

Yeah, there must be some kind of logical grouping of HW objects to
build that kind of stuff.

> > The vRID->pRID table should be some mostly common
> > IOMMUFD_DEV_ASSIGN_VIRTUAL_ID. AMD will need to pass in the virtual
> > function ID and ARM will need to pass in the Nesting Parent ID.
> 
> It sounds like our previous IOMMUFD_SET/UNSET_IDEV_DATA. I'm
> wondering if we need to make it exclusive to the ID assigning?
> Maybe set_idev_data could be reused for other potential cases?

No, it should be an API only for the ID
 
> If we do implement an IOMMUFD_DEV_ASSIGN_VIRTUAL_ID, do we need
> an IOMMUFD_DEV_RESIGN_VIRTUAL_ID? (or better word than resign).

I don't think so.. The vRID is basically fixed, if it needs to be
changed then the device can be destroyed (or assign can just change it)

> Could the structure just look like this?
> struct iommu_dev_assign_virtual_id {
>        __u32 size;
>        __u32 dev_id;
>        __u32 id_type;
>        __u32 id;
> };

It needs to take in the viommu_id also, and I'd make the id 64 bits
just for good luck.

> > In many ways the nesting parent/virtual function are very similar
> > things. Perhaps ARM should also create a virtual function object which
> > is just welded to the nesting parent for API consistency.
> 
> A virtual function that holds an S2 domain/iopt + a VMID? If
> this is for VCMDQ, the VMCDQ extension driver has that kinda
> object holding an S2 domain: I implemented as the extension
> function at the end of arm_smmu_finalise_s2() previously.

Not so much hold a S2, but that the VMID would be forced to be shared
amung them somehow.

> > IOMMUFD_DEV_INVALIDATE should be introduced with the same design as
> > HWPT invalidate. This would be used for AMD/ARM's ATC invalidation
> > (and just force the stream ID, userspace must direct the vRID to the
> > correct dev_id).
> 
> SMMU's CD invalidations could fall into this category too.

Yes, I forgot to look closely at the CD/GCR3 table invalidations :(
I actually can't tell how AMD invalidates any GCR3 cache, maybe
INVALIDATE_DEVTAB_ENTRY?

> > Then in yet another series we can tackle the entire "virtual function"
> > vRID/pRID translation stuff when the mmapable queue thing is
> > introduced.
> 
> VCMDQ is also a mmapable queue. I feel that there could be
> more common stuff between "virtual function" and "virtual
> interface", I'll need to take a look at AMD's stuff though.

I'm not thinking of two things right now at least..

> I previously drafted something to test it out with iommufd.
> Basically it needs the pairing of vRID/pRID in attach_dev()
> and another ioctl to mmap/config user queue(s):
> +struct iommu_hwpt_cache_config_tegra241_vcmdq {
> +       __u32 vcmdq_id;			// queue id
> +       __u32 vcmdq_log2size;		// queue size
> +       __aligned_u64 vcmdq_base;	// queue guest PA
> +};

vRID/pRID pairing should come from IOMMUFD_DEV_ASSIGN_VIRTUAL_ID. When
a HWPT is allocated it would be connected to the viommu_id and then it
would all be bundled together in the HW somehow

From there you can ask the viommu_id to setup a queue.

Jason

  reply	other threads:[~2023-12-11 21:57 UTC|newest]

Thread overview: 93+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20231217215720eucas1p2a590aca62ce8eb5ba81df6bc8b1a785d@eucas1p2.samsung.com>
2023-11-17 13:07 ` [PATCH v6 0/6] iommufd: Add nesting infrastructure (part 2/2) Yi Liu
2023-11-17 13:07   ` [PATCH v6 1/6] iommu: Add cache_invalidate_user op Yi Liu
2023-11-20  7:53     ` Tian, Kevin
2023-12-06 18:32     ` Jason Gunthorpe
2023-12-06 18:43       ` Nicolin Chen
2023-12-06 18:50         ` Jason Gunthorpe
2023-12-07  6:53           ` Yi Liu
2024-01-08  7:32     ` Binbin Wu
2023-11-17 13:07   ` [PATCH v6 2/6] iommufd: Add IOMMU_HWPT_INVALIDATE Yi Liu
2023-11-20  8:09     ` Tian, Kevin
2023-11-20  8:29       ` Yi Liu
2023-11-20  8:34         ` Tian, Kevin
2023-11-20 17:36           ` Nicolin Chen
2023-11-21  2:50             ` Tian, Kevin
2023-11-21  5:24               ` Nicolin Chen
2023-11-24  2:36                 ` Tian, Kevin
2023-11-27 19:53                   ` Nicolin Chen
2023-11-28  6:01                     ` Yi Liu
2023-11-29  0:54                       ` Nicolin Chen
2023-11-28  8:03                     ` Tian, Kevin
2023-11-29  0:51                       ` Nicolin Chen
2023-11-29  0:57                         ` Jason Gunthorpe
2023-11-29  1:09                           ` Nicolin Chen
2023-11-29 19:58                             ` Jason Gunthorpe
2023-11-29 22:07                               ` Nicolin Chen
2023-11-30  0:08                                 ` Jason Gunthorpe
2023-11-30 20:41                                   ` Nicolin Chen
2023-12-01  0:45                                     ` Jason Gunthorpe
2023-12-01  4:29                                       ` Nicolin Chen
2023-12-01 12:55                                         ` Jason Gunthorpe
2023-12-01 19:58                                           ` Nicolin Chen
2023-12-01 20:43                                             ` Jason Gunthorpe
2023-12-01 22:12                                               ` Nicolin Chen
2023-12-04 14:48                                                 ` Jason Gunthorpe
2023-12-05 17:33                                                   ` Nicolin Chen
2023-12-06 12:48                                                     ` Jason Gunthorpe
2023-12-01  3:51                           ` Yi Liu
2023-12-01  4:50                             ` Nicolin Chen
2023-12-01  5:19                               ` Tian, Kevin
2023-12-01  7:05                                 ` Yi Liu
2023-12-01  7:10                                   ` Tian, Kevin
2023-12-01  9:08                                     ` Yi Liu
2023-11-21  5:02     ` Baolu Lu
2023-11-21  5:19       ` Nicolin Chen
2023-11-28  5:54         ` Yi Liu
2023-12-06 18:33     ` Jason Gunthorpe
2023-12-07  6:59     ` Yi Liu
2023-12-07  9:04       ` Tian, Kevin
2023-12-07 14:42         ` Jason Gunthorpe
2023-12-11  7:53           ` Yi Liu
2023-12-11 13:21             ` Jason Gunthorpe
2023-12-12 13:45               ` Liu, Yi L
2023-12-12 14:40                 ` Jason Gunthorpe
2023-12-13 13:47                   ` Liu, Yi L
2023-12-13 14:11                     ` Jason Gunthorpe
2023-12-11  7:49         ` Yi Liu
2023-11-17 13:07   ` [PATCH v6 3/6] iommu: Add iommu_copy_struct_from_user_array helper Yi Liu
2023-11-20  8:17     ` Tian, Kevin
2023-11-20 17:25       ` Nicolin Chen
2023-11-21  2:48         ` Tian, Kevin
2024-01-08  8:37     ` Binbin Wu
2023-11-17 13:07   ` [PATCH v6 4/6] iommufd/selftest: Add mock_domain_cache_invalidate_user support Yi Liu
2023-12-06 18:16     ` Jason Gunthorpe
2023-12-11 11:21       ` Yi Liu
2023-11-17 13:07   ` [PATCH v6 5/6] iommufd/selftest: Add IOMMU_TEST_OP_MD_CHECK_IOTLB test op Yi Liu
2023-11-17 13:07   ` [PATCH v6 6/6] iommufd/selftest: Add coverage for IOMMU_HWPT_INVALIDATE ioctl Yi Liu
2023-12-06 18:19     ` Jason Gunthorpe
2023-12-11 11:28       ` Yi Liu
2023-12-11 13:06         ` Jason Gunthorpe
2023-12-09  1:47   ` [PATCH v6 0/6] iommufd: Add nesting infrastructure (part 2/2) Jason Gunthorpe
2023-12-11  2:29     ` Tian, Kevin
2023-12-11 12:36       ` Yi Liu
2023-12-11 13:05         ` Jason Gunthorpe
2023-12-11 15:34           ` Suthikulpanit, Suravee
2023-12-11 16:06             ` Jason Gunthorpe
2023-12-11 12:35     ` Yi Liu
2023-12-11 13:20       ` Jason Gunthorpe
2023-12-11 20:11         ` Nicolin Chen
2023-12-11 21:48           ` Jason Gunthorpe
2023-12-11 17:35     ` Suthikulpanit, Suravee
2023-12-11 17:45       ` Jason Gunthorpe
2023-12-11 21:27     ` Nicolin Chen
2023-12-11 21:57       ` Jason Gunthorpe [this message]
2023-12-12  7:30         ` Nicolin Chen
2023-12-12 14:44           ` Jason Gunthorpe
2023-12-12 19:13             ` Nicolin Chen
2023-12-12 19:21               ` Jason Gunthorpe
2023-12-12 20:05                 ` Nicolin Chen
2023-12-13 12:40                   ` Jason Gunthorpe
2023-12-13 19:54                     ` Nicolin Chen
2023-12-17 11:21   ` Joel Granados
2023-12-19  9:26     ` Yi Liu
2023-12-20 11:23       ` Joel Granados

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=20231211215738.GB3014157@nvidia.com \
    --to=jgg@nvidia.com \
    --cc=Dhaval.Giani@amd.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=joao.m.martins@oracle.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=nicolinc@nvidia.com \
    --cc=peterx@redhat.com \
    --cc=robin.murphy@arm.com \
    --cc=shameerali.kolothum.thodi@huawei.com \
    --cc=suravee.suthikulpanit@amd.com \
    --cc=vasant.hegde@amd.com \
    --cc=xin.zeng@intel.com \
    --cc=yan.y.zhao@intel.com \
    --cc=yi.l.liu@intel.com \
    --cc=yi.y.sun@linux.intel.com \
    --cc=zhenzhong.duan@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