From: Thomas Gleixner <tglx@linutronix.de>
To: Fenghua Yu <fenghua.yu@intel.com>,
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>
Cc: iommu@lists.linux-foundation.org, x86 <x86@kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
Fenghua Yu <fenghua.yu@intel.com>
Subject: Re: [PATCH v3 05/11] iommu/sva: Assign a PASID to mm on PASID allocation and free it on mm exit
Date: Sat, 05 Feb 2022 00:56:00 +0100 [thread overview]
Message-ID: <87r18ib2zz.ffs@tglx> (raw)
In-Reply-To: <20220128202905.2274672-6-fenghua.yu@intel.com>
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?
Thanks,
tglx
next prev parent reply other threads:[~2022-02-04 23:56 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 [this message]
2022-02-05 0:33 ` Fenghua Yu
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=87r18ib2zz.ffs@tglx \
--to=tglx@linutronix.de \
--cc=ashok.raj@intel.com \
--cc=baolu.lu@linux.intel.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=fenghua.yu@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=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