[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Y9oZMTMRG4mL5FT1@Asurada-Nvidia>
Date: Tue, 31 Jan 2023 23:48:01 -0800
From: Nicolin Chen <nicolinc@...dia.com>
To: <yi.l.liu@...el.com>
CC: <kevin.tian@...el.com>, <iommu@...ts.linux.dev>,
<linux-kernel@...r.kernel.org>, Jason Gunthorpe <jgg@...dia.com>
Subject: Re: [PATCH v2 1/3] iommufd: Add devices_users to track the
hw_pagetable usage by device
On Mon, Jan 30, 2023 at 12:54:01PM -0800, Nicolin Chen wrote:
> On Mon, Jan 30, 2023 at 04:35:35PM -0400, Jason Gunthorpe wrote:
> > On Mon, Jan 30, 2023 at 12:04:33PM -0800, Nicolin Chen wrote:
> >
> > > I recall we've discussed this that SMMU sets up domain when it
> > > attaches the device to, so we made a compromise here...
> >
> > The ARM driver has a problem that it doesn't know what SMMU instance
> > will host the domain when it is allocated so it doesn't know if it
> > should select a S1 or S2 page table format - which is determined by
> > the capabilities of the specific SMMU HW block.
> >
> > However, we don't have this problem when creating the S2. The S2
> > should be created by a special alloc_domain_iommufd() asking for the
> > S2 format. Not only does the new alloc_domain_iommufd API directly
> > request a S2 format table, but it also specifies the struct device so
> > any residual details can be determined directly.
> >
> > Thus there is no need to do the two stage process when working with
> > the S2.
>
> Ah, right! Taking a quick look, we should be able to call that
> arm_smmu_domain_finalise when handling alloc_domain_iommufd().
>
> > So fixup the driver to create fully configured iommu_domain's
> > immediately and get rid of this problem.
>
> OK. I will draft a patch today.
@Yi
Do you recall doing iopt_table_add_domain() in hwpt_alloc()?
Jason has a great point above. So even SMMU should be able to
call the iopt_table_add_domain() after a kernel-manged hwpt
allocation rather than after an iommu_attach_group(), except
an auto_domain or a selftest mock_domain that still needs to
attach the device first, otherwise the SMMU driver (currently)
cannot finalize the domain aperture.
I made a draft today, and ran some sanity with SMMUv3:
"iommufd: Attach/detach hwpt to IOAS at alloc/destroy"
https://github.com/nicolinc/iommufd/commit/5ae54f360495aae35b5967d1eb00149912145639
The change basically: moves iopt_table_add/remove_domain()
next to hwpt_alloc/destroy(); an auto_domain or a mock_domain
needs to attach_dev first, before calling the add_domain().
With this change, following patches of attach_ioas() and new
selftest should be also updated. I have them in a wip branch:
https://github.com/nicolinc/iommufd/commits/wip/iommufd-v6.2-rc4-nesting-01312023
Can you check if there's anything wrong with this approach?
And would it be possible for you to integrate this into the
nesting series?
I can also help cleanup and polish the changes with a proper
commit message.
Thanks
Nic
Powered by blists - more mailing lists