From: Fenghua Yu <fenghua.yu@intel.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Peter Zijlstra <peterz@infradead.org>,
Andy Lutomirski <luto@kernel.org>,
Tony Luck <tony.luck@intel.com>,
Lu Baolu <baolu.lu@linux.intel.com>,
Joerg Roedel <joro@8bytes.org>,
Josh Poimboeuf <jpoimboe@redhat.com>,
Jacob Pan <jacob.jun.pan@linux.intel.com>,
Ashok Raj <ashok.raj@intel.com>,
Ravi V Shankar <ravi.v.shankar@intel.com>,
iommu@lists.linux-foundation.org, x86 <x86@kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 05/11] iommu/sva: Assign a PASID to mm on PASID allocation and free it on mm exit
Date: Fri, 4 Feb 2022 16:33:16 -0800 [thread overview]
Message-ID: <Yf3FzOUSRpFUdM/q@otcwcpicx3.sc.intel.com> (raw)
In-Reply-To: <87r18ib2zz.ffs@tglx>
On Sat, Feb 05, 2022 at 12:56:00AM +0100, Thomas Gleixner wrote:
> On Fri, Jan 28 2022 at 12:28, Fenghua Yu wrote:
> > To avoid complexity of updating each thread's PASID status (e.g. sending
> > IPI to update IA32_PASID MSR) on allocating and freeing PASID, once
> > allocated and assigned to an mm, the PASID stays with the mm for the
> > rest of the mm's lifetime. A reference to the PASID is taken on
> > allocating the PASID. Binding/unbinding the PASID won't change refcount.
> > The reference is dropped on mm exit and thus the PASID is freed.
> >
> > Two helpers mm_pasid_set() and mm_pasid_drop() are defined in mm because
> > the PASID operations handle the pasid member in mm_struct and should be
> > part of mm operations. Because IOASID's reference count is not used any
> > more and removed, unused ioasid_get() and iommu_sva_free_pasid()
> > are deleted and ioasid_put() is renamed to ioasid_free().
> >
> > 20-bit PASID allows up to 1M processes bound to PASIDs at the same time.
> > With cgroups and other controls that might limit the number of process
> > creation, the limited number of PASIDs is not a realistic issue for
> > lazy PASID free.
>
> Please take a step back and think hard about it whether that changelog
> makes sense to you a year from now.
>
> Let me walk you through:
>
> > To avoid complexity of updating each thread's PASID status (e.g. sending
> > IPI to update IA32_PASID MSR) on allocating and freeing PASID, once
> > allocated and assigned to an mm, the PASID stays with the mm for the
> > rest of the mm's lifetime.
>
> You are missing the oportunity to tell a story about the history of this
> decision here:
>
> PASIDs are process wide. It was attempted to use refcounted PASIDs to
> free them when the last thread drops the refcount. This turned out to
> be complex and error prone. Given the fact that the PASID space is 20
> bits, which allows up to 1M processes to have a PASID associated
> concurrently, PASID resource exhaustion is not a realistic concern.
>
> Therefore it was decided to simplify the approach and stick with lazy
> on demand PASID allocation, but drop the eager free approach and make
> a allocated PASID lifetime bound to the life time of the process.
>
> > A reference to the PASID is taken on allocating the
> > PASID. Binding/unbinding the PASID won't change refcount. The
> > reference is dropped on mm exit and thus the PASID is freed.
>
> There is no refcount in play anymore, right? So how does this part of
> the changelog make any sense?
>
> This is followed by:
>
> > Two helpers mm_pasid_set() and mm_pasid_drop() are defined in mm because
> > the PASID operations handle the pasid member in mm_struct and should be
> > part of mm operations. Because IOASID's reference count is not used any
> > more and removed, unused ioasid_get() and iommu_sva_free_pasid()
> > are deleted and ioasid_put() is renamed to ioasid_free().
>
> which does not provide much rationale and just blurbs about _what_ the
> patch is doing and not about the why and the connection to the
> above. And the refcount removal section contradicts the stale text
> above.
>
> So this paragraph should be something like this:
>
> Get rid of the refcounting mechanisms and replace/rename the
> interfaces to reflect this new approach.
>
> Hmm?
Sure. I will update the commit message with your comments.
Thanks.
-Fenghua
next prev parent reply other threads:[~2022-02-05 0:33 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-28 20:28 [PATCH v3 00/11] Re-enable ENQCMD and PASID MSR Fenghua Yu
2022-01-28 20:28 ` [PATCH v3 01/11] iommu/sva: Rename CONFIG_IOMMU_SVA_LIB to CONFIG_IOMMU_SVA Fenghua Yu
2022-02-04 23:07 ` Thomas Gleixner
2022-01-28 20:28 ` [PATCH v3 02/11] mm: Change CONFIG option for mm->pasid field Fenghua Yu
2022-02-04 23:07 ` Thomas Gleixner
2022-01-28 20:28 ` [PATCH v3 03/11] iommu/ioasid: Introduce a helper to check for valid PASIDs Fenghua Yu
2022-02-04 23:08 ` Thomas Gleixner
2022-02-04 23:23 ` Thomas Gleixner
2022-01-28 20:28 ` [PATCH v3 04/11] kernel/fork: Initialize mm's PASID Fenghua Yu
2022-02-04 23:22 ` Thomas Gleixner
2022-02-05 0:25 ` Fenghua Yu
2022-01-28 20:28 ` [PATCH v3 05/11] iommu/sva: Assign a PASID to mm on PASID allocation and free it on mm exit Fenghua Yu
2022-02-04 23:56 ` Thomas Gleixner
2022-02-05 0:33 ` Fenghua Yu [this message]
2022-02-05 3:50 ` Lu Baolu
2022-02-05 5:10 ` Fenghua Yu
2022-02-05 7:10 ` Lu Baolu
2022-01-28 20:29 ` [PATCH v3 06/11] x86/fpu: Clear PASID when copying fpstate Fenghua Yu
2022-02-04 23:58 ` Thomas Gleixner
2022-01-28 20:29 ` [PATCH v3 07/11] sched: Define and initialize a flag to identify valid PASID in the task Fenghua Yu
2022-02-04 23:58 ` Thomas Gleixner
2022-01-28 20:29 ` [PATCH v3 08/11] x86/traps: Demand-populate PASID MSR via #GP Fenghua Yu
2022-02-05 0:00 ` Thomas Gleixner
2022-01-28 20:29 ` [PATCH v3 09/11] x86/cpufeatures: Re-enable ENQCMD Fenghua Yu
2022-02-05 0:00 ` Thomas Gleixner
2022-01-28 20:29 ` [PATCH v3 10/11] tools/objtool: Check for use of the ENQCMD instruction in the kernel Fenghua Yu
2022-01-28 20:29 ` [PATCH v3 11/11] docs: x86: Change documentation for SVA (Shared Virtual Addressing) Fenghua Yu
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=Yf3FzOUSRpFUdM/q@otcwcpicx3.sc.intel.com \
--to=fenghua.yu@intel.com \
--cc=ashok.raj@intel.com \
--cc=baolu.lu@linux.intel.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=iommu@lists.linux-foundation.org \
--cc=jacob.jun.pan@linux.intel.com \
--cc=joro@8bytes.org \
--cc=jpoimboe@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=ravi.v.shankar@intel.com \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--cc=x86@kernel.org \
/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
all inboxes | Powered by JetHome®