Thread (13 messages) flat view 13 messages, 2 authors, 2023-02-15

Re: [PATCH v6 2/7] powerpc/64s: mm: Introduce __pmdp_collapse_flush with mm_struct argument

From: Christophe Leroy <hidden>
Date: 2023-02-14 06:03:40


Le 14/02/2023 à 02:59, Rohan McLure a écrit :
quoted hunk ↗ jump to hunk
pmdp_collapse_flush has references in generic code with just three
parameters, due to the choice of mm context being implied by the vm_area
context parameter.

Define __pmdp_collapse_flush to accept an additional mm_struct *
parameter, with pmdp_collapse_flush a macro that unpacks the vma and
calls __pmdp_collapse_flush. The mm_struct * parameter is needed in a
future patch providing Page Table Check support, which is defined in
terms of mm context objects.

Signed-off-by: Rohan McLure <redacted>
---
v6: New patch
---
  arch/powerpc/include/asm/book3s/64/pgtable.h | 14 +++++++++++---
  1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/arch/powerpc/include/asm/book3s/64/pgtable.h b/arch/powerpc/include/asm/book3s/64/pgtable.h
index cb4c67bf45d7..9d8b4e25f5ed 100644
--- a/arch/powerpc/include/asm/book3s/64/pgtable.h
+++ b/arch/powerpc/include/asm/book3s/64/pgtable.h
@@ -1244,14 +1244,22 @@ static inline pmd_t pmdp_huge_get_and_clear(struct mm_struct *mm,
  	return hash__pmdp_huge_get_and_clear(mm, addr, pmdp);
  }
  
-static inline pmd_t pmdp_collapse_flush(struct vm_area_struct *vma,
-					unsigned long address, pmd_t *pmdp)
+static inline pmd_t __pmdp_collapse_flush(struct vm_area_struct *vma, struct mm_struct *mm,
+					  unsigned long address, pmd_t *pmdp)
  {
  	if (radix_enabled())
  		return radix__pmdp_collapse_flush(vma, address, pmdp);
  	return hash__pmdp_collapse_flush(vma, address, pmdp);
  }
-#define pmdp_collapse_flush pmdp_collapse_flush
+#define pmdp_collapse_flush(vma, addr, pmdp)				\
+({									\
+	struct vm_area_struct *_vma = (vma);				\
+	pmd_t _r;							\
+									\
+	_r = __pmdp_collapse_flush(_vma, _vma->vm_mm, (addr), (pmdp));	\
+									\
+	_r;								\
+})
Can you make it a static inline function instead of a ugly macro ?
  
  #define __HAVE_ARCH_PMDP_HUGE_GET_AND_CLEAR_FULL
  pmd_t pmdp_huge_get_and_clear_full(struct vm_area_struct *vma,
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help