Thread (222 messages) flat view 222 messages, 21 authors, 2022-11-03

Re: [PATCH v2 10/39] x86/mm: Introduce _PAGE_COW

From: "Edgecombe, Rick P" <rick.p.edgecombe@intel.com>
Date: 2022-10-14 18:06:21
Also in: linux-arch, linux-doc, linux-mm, lkml

On Fri, 2022-10-14 at 11:42 +0200, Peter Zijlstra wrote:
On Thu, Sep 29, 2022 at 03:29:07PM -0700, Rick Edgecombe wrote:
quoted
@@ -300,6 +324,44 @@ static inline pte_t pte_clear_flags(pte_t pte,
pteval_t clear)
       return native_make_pte(v & ~clear);
  }
  
+/*
+ * Normally the Dirty bit is used to denote COW memory on x86. But
This is misleading; this isn't an x86 specific thing. The core-mm
code
does this.
Well pte_mkdirty() does map to other HW bits on different
architectures. But yea, it's confusing.

Hmm, is this comment a bit stale either way now though? In the past it
was probably more accurate to say core MM code used it to "detect"
cowed memory. But the GUP pte_dirty() check was changed recently:


https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5535be3099717646781ce1540cf725965d680e7b

I don't think any code is looking specifically for COWed memory using
the PTE dirty bit anymore, it just happens to coincide with it. Double
checking my understanding...

Maybe this would be more accurate?

/*
 * Normally COW memory can result in Dirty=1,Write=0 PTEs. But in the
 * case of X86_FEATURE_SHSTK, the software COW bit is used, since the
 * Dirty=1,Write=0 will result in the memory being treated as shaodw
 * stack by the HW. So when creating COW memory, a software bit is used
 * _PAGE_BIT_COW. The following functions pte_mkcow() and
 * pte_clear_cow() take a PTE marked conventially COW (Dirty=1) and
 * transition it to the shadow stack compatible version of COW (Cow=1).
 */
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help