Re: [PATCH v5 09/11] hugetlb: Introduce generic version of huge_ptep_set_wrprotect
Hi Michael, Thanks, I will then remove those two specific implementations and we'll use the generic ones. I send a v6 asap. Thanks again, Alex On 08/03/2018 10:51 AM, Michael Ellerman wrote: Hi Alex, Sorry missed your previous mail. Alex Ghiti writes: Ok, I tried every defconfig available: - for the nohash/32, I found that I could use mpc885_ads_defconfig and I activated HUGETLBFS. I removed the definition of huge_ptep_set_wrprotect from nohash/32/pgtable.h, add an #error in include/asm-generic/hugetlb.h right before the generic definition of huge_ptep_set_wrprotect, and fell onto it at compile-time: => I'm pretty confident then that removing the definition of huge_ptep_set_wrprotect does not break anythingin this case. Thanks, that sounds good. - regardind book3s/32, I did not find any defconfig with CONFIG_PPC_BOOK3S_32, CONFIG_PPC32 allowing to enable huge page support (ie CONFIG_SYS_SUPPORTS_HUGETLBFS) => Do you have a defconfig that would allow me to try the same as above ? I think you're right, it's dead code AFAICS. We have: config PPC_BOOK3S_64 ... select SYS_SUPPORTS_HUGETLBFS config PPC_FSL_BOOK3E ... select SYS_SUPPORTS_HUGETLBFS if PHYS_64BIT || PPC64 config PPC_8xx ... select SYS_SUPPORTS_HUGETLBFS So we can't ever enable HUGETLBFS for Book3S 32. Presumably the code got copied when we split the headers apart. So I think you can just ignore that one, and we'll delete it. cheers
Re: [PATCH v5 09/11] hugetlb: Introduce generic version of huge_ptep_set_wrprotect
Hi Alex, Sorry missed your previous mail. Alex Ghiti writes: > Ok, I tried every defconfig available: > > - for the nohash/32, I found that I could use mpc885_ads_defconfig and I > activated HUGETLBFS. > I removed the definition of huge_ptep_set_wrprotect from > nohash/32/pgtable.h, add an #error in > include/asm-generic/hugetlb.h right before the generic definition of > huge_ptep_set_wrprotect, > and fell onto it at compile-time: > => I'm pretty confident then that removing the definition of > huge_ptep_set_wrprotect does not > break anythingin this case. Thanks, that sounds good. > - regardind book3s/32, I did not find any defconfig with > CONFIG_PPC_BOOK3S_32, CONFIG_PPC32 > allowing to enable huge page support (ie CONFIG_SYS_SUPPORTS_HUGETLBFS) > => Do you have a defconfig that would allow me to try the same as above ? I think you're right, it's dead code AFAICS. We have: config PPC_BOOK3S_64 ... select SYS_SUPPORTS_HUGETLBFS config PPC_FSL_BOOK3E ... select SYS_SUPPORTS_HUGETLBFS if PHYS_64BIT || PPC64 config PPC_8xx ... select SYS_SUPPORTS_HUGETLBFS So we can't ever enable HUGETLBFS for Book3S 32. Presumably the code got copied when we split the headers apart. So I think you can just ignore that one, and we'll delete it. cheers
Re: [PATCH v5 09/11] hugetlb: Introduce generic version of huge_ptep_set_wrprotect
Ok, I tried every defconfig available: - for the nohash/32, I found that I could use mpc885_ads_defconfig and I activated HUGETLBFS. I removed the definition of huge_ptep_set_wrprotect from nohash/32/pgtable.h, add an #error in include/asm-generic/hugetlb.h right before the generic definition of huge_ptep_set_wrprotect, and fell onto it at compile-time: => I'm pretty confident then that removing the definition of huge_ptep_set_wrprotect does not break anythingin this case. - regardind book3s/32, I did not find any defconfig with CONFIG_PPC_BOOK3S_32, CONFIG_PPC32 allowing to enable huge page support (ie CONFIG_SYS_SUPPORTS_HUGETLBFS) => Do you have a defconfig that would allow me to try the same as above ? Thanks, Alex On 07/31/2018 11:17 AM, Alexandre Ghiti wrote: On 07/31/2018 12:06 PM, Michael Ellerman wrote: Alexandre Ghiti writes: arm, ia64, mips, sh, x86 architectures use the same version of huge_ptep_set_wrprotect, so move this generic implementation into asm-generic/hugetlb.h. Note: powerpc uses twice for book3s/32 and nohash/32 the same version as the above architectures, but the modification was not straightforward and hence has not been done. Do you remember what the problem was there? It looks like you should just be able to drop them like the others. I assume there's some header spaghetti that causes problems though? Yes, the header spaghetti frightened me a bit. Maybe I should have tried harder: I can try to remove them and find the right defconfigs to compile both to begin with. And to guarantee the functionality is preserved, can I use the testsuite of libhugetlbfs with qemu ? Alex cheers Signed-off-by: Alexandre Ghiti Reviewed-by: Mike Kravetz --- arch/arm/include/asm/hugetlb-3level.h | 6 -- arch/arm64/include/asm/hugetlb.h | 1 + arch/ia64/include/asm/hugetlb.h | 6 -- arch/mips/include/asm/hugetlb.h | 6 -- arch/parisc/include/asm/hugetlb.h | 1 + arch/powerpc/include/asm/book3s/32/pgtable.h | 2 ++ arch/powerpc/include/asm/book3s/64/pgtable.h | 1 + arch/powerpc/include/asm/nohash/32/pgtable.h | 2 ++ arch/powerpc/include/asm/nohash/64/pgtable.h | 1 + arch/sh/include/asm/hugetlb.h | 6 -- arch/sparc/include/asm/hugetlb.h | 1 + arch/x86/include/asm/hugetlb.h | 6 -- include/asm-generic/hugetlb.h | 8 13 files changed, 17 insertions(+), 30 deletions(-) diff --git a/arch/arm/include/asm/hugetlb-3level.h b/arch/arm/include/asm/hugetlb-3level.h index b897541520ef..8247cd6a2ac6 100644 --- a/arch/arm/include/asm/hugetlb-3level.h +++ b/arch/arm/include/asm/hugetlb-3level.h @@ -37,12 +37,6 @@ static inline pte_t huge_ptep_get(pte_t *ptep) return retval; } -static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, - unsigned long addr, pte_t *ptep) -{ - ptep_set_wrprotect(mm, addr, ptep); -} - static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep, pte_t pte, int dirty) diff --git a/arch/arm64/include/asm/hugetlb.h b/arch/arm64/include/asm/hugetlb.h index 3e7f6e69b28d..f4f69ae5466e 100644 --- a/arch/arm64/include/asm/hugetlb.h +++ b/arch/arm64/include/asm/hugetlb.h @@ -48,6 +48,7 @@ extern int huge_ptep_set_access_flags(struct vm_area_struct *vma, #define __HAVE_ARCH_HUGE_PTEP_GET_AND_CLEAR extern pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep); +#define __HAVE_ARCH_HUGE_PTEP_SET_WRPROTECT extern void huge_ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep); #define __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH diff --git a/arch/ia64/include/asm/hugetlb.h b/arch/ia64/include/asm/hugetlb.h index cbe296271030..49d1f7949f3a 100644 --- a/arch/ia64/include/asm/hugetlb.h +++ b/arch/ia64/include/asm/hugetlb.h @@ -27,12 +27,6 @@ static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, { } -static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, - unsigned long addr, pte_t *ptep) -{ - ptep_set_wrprotect(mm, addr, ptep); -} - static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep, pte_t pte, int dirty) diff --git a/arch/mips/include/asm/hugetlb.h b/arch/mips/include/asm/hugetlb.h index 6ff2531cfb1d..3dcf5debf8c4 100644 --- a/arch/mips/include/asm/hugetlb.h +++ b/arch/mips/include/asm/hugetlb.h @@ -63,12 +63,6 @@ static inline int huge_pte_none(pte_t pte) return !val || (val == (unsigned long)invalid_pte_table); } -static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, - unsigned long addr, pte_t *ptep) -{ - ptep_set_wrprotect(mm, addr, ptep); -} - st
Re: [PATCH v5 09/11] hugetlb: Introduce generic version of huge_ptep_set_wrprotect
On 07/31/2018 12:06 PM, Michael Ellerman wrote: Alexandre Ghiti writes: arm, ia64, mips, sh, x86 architectures use the same version of huge_ptep_set_wrprotect, so move this generic implementation into asm-generic/hugetlb.h. Note: powerpc uses twice for book3s/32 and nohash/32 the same version as the above architectures, but the modification was not straightforward and hence has not been done. Do you remember what the problem was there? It looks like you should just be able to drop them like the others. I assume there's some header spaghetti that causes problems though? Yes, the header spaghetti frightened me a bit. Maybe I should have tried harder: I can try to remove them and find the right defconfigs to compile both to begin with. And to guarantee the functionality is preserved, can I use the testsuite of libhugetlbfs with qemu ? Alex cheers Signed-off-by: Alexandre Ghiti Reviewed-by: Mike Kravetz --- arch/arm/include/asm/hugetlb-3level.h| 6 -- arch/arm64/include/asm/hugetlb.h | 1 + arch/ia64/include/asm/hugetlb.h | 6 -- arch/mips/include/asm/hugetlb.h | 6 -- arch/parisc/include/asm/hugetlb.h| 1 + arch/powerpc/include/asm/book3s/32/pgtable.h | 2 ++ arch/powerpc/include/asm/book3s/64/pgtable.h | 1 + arch/powerpc/include/asm/nohash/32/pgtable.h | 2 ++ arch/powerpc/include/asm/nohash/64/pgtable.h | 1 + arch/sh/include/asm/hugetlb.h| 6 -- arch/sparc/include/asm/hugetlb.h | 1 + arch/x86/include/asm/hugetlb.h | 6 -- include/asm-generic/hugetlb.h| 8 13 files changed, 17 insertions(+), 30 deletions(-) diff --git a/arch/arm/include/asm/hugetlb-3level.h b/arch/arm/include/asm/hugetlb-3level.h index b897541520ef..8247cd6a2ac6 100644 --- a/arch/arm/include/asm/hugetlb-3level.h +++ b/arch/arm/include/asm/hugetlb-3level.h @@ -37,12 +37,6 @@ static inline pte_t huge_ptep_get(pte_t *ptep) return retval; } -static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, - unsigned long addr, pte_t *ptep) -{ - ptep_set_wrprotect(mm, addr, ptep); -} - static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep, pte_t pte, int dirty) diff --git a/arch/arm64/include/asm/hugetlb.h b/arch/arm64/include/asm/hugetlb.h index 3e7f6e69b28d..f4f69ae5466e 100644 --- a/arch/arm64/include/asm/hugetlb.h +++ b/arch/arm64/include/asm/hugetlb.h @@ -48,6 +48,7 @@ extern int huge_ptep_set_access_flags(struct vm_area_struct *vma, #define __HAVE_ARCH_HUGE_PTEP_GET_AND_CLEAR extern pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep); +#define __HAVE_ARCH_HUGE_PTEP_SET_WRPROTECT extern void huge_ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep); #define __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH diff --git a/arch/ia64/include/asm/hugetlb.h b/arch/ia64/include/asm/hugetlb.h index cbe296271030..49d1f7949f3a 100644 --- a/arch/ia64/include/asm/hugetlb.h +++ b/arch/ia64/include/asm/hugetlb.h @@ -27,12 +27,6 @@ static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, { } -static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, - unsigned long addr, pte_t *ptep) -{ - ptep_set_wrprotect(mm, addr, ptep); -} - static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep, pte_t pte, int dirty) diff --git a/arch/mips/include/asm/hugetlb.h b/arch/mips/include/asm/hugetlb.h index 6ff2531cfb1d..3dcf5debf8c4 100644 --- a/arch/mips/include/asm/hugetlb.h +++ b/arch/mips/include/asm/hugetlb.h @@ -63,12 +63,6 @@ static inline int huge_pte_none(pte_t pte) return !val || (val == (unsigned long)invalid_pte_table); } -static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, - unsigned long addr, pte_t *ptep) -{ - ptep_set_wrprotect(mm, addr, ptep); -} - static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep, pte_t pte, diff --git a/arch/parisc/include/asm/hugetlb.h b/arch/parisc/include/asm/hugetlb.h index fb7e0fd858a3..9c3950ca2974 100644 --- a/arch/parisc/include/asm/hugetlb.h +++ b/arch/parisc/include/asm/hugetlb.h @@ -39,6 +39,7 @@ static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, { } +#define __HAVE_ARCH_HUGE_PTEP_SET_WRPROTECT void huge_ptep_set_wrprotect(struct mm_struct *mm,
Re: [PATCH v5 09/11] hugetlb: Introduce generic version of huge_ptep_set_wrprotect
Alexandre Ghiti writes: > arm, ia64, mips, sh, x86 architectures use the same version > of huge_ptep_set_wrprotect, so move this generic implementation into > asm-generic/hugetlb.h. > Note: powerpc uses twice for book3s/32 and nohash/32 the same version as > the above architectures, but the modification was not straightforward > and hence has not been done. Do you remember what the problem was there? It looks like you should just be able to drop them like the others. I assume there's some header spaghetti that causes problems though? cheers > Signed-off-by: Alexandre Ghiti > Reviewed-by: Mike Kravetz > --- > arch/arm/include/asm/hugetlb-3level.h| 6 -- > arch/arm64/include/asm/hugetlb.h | 1 + > arch/ia64/include/asm/hugetlb.h | 6 -- > arch/mips/include/asm/hugetlb.h | 6 -- > arch/parisc/include/asm/hugetlb.h| 1 + > arch/powerpc/include/asm/book3s/32/pgtable.h | 2 ++ > arch/powerpc/include/asm/book3s/64/pgtable.h | 1 + > arch/powerpc/include/asm/nohash/32/pgtable.h | 2 ++ > arch/powerpc/include/asm/nohash/64/pgtable.h | 1 + > arch/sh/include/asm/hugetlb.h| 6 -- > arch/sparc/include/asm/hugetlb.h | 1 + > arch/x86/include/asm/hugetlb.h | 6 -- > include/asm-generic/hugetlb.h| 8 > 13 files changed, 17 insertions(+), 30 deletions(-) > > diff --git a/arch/arm/include/asm/hugetlb-3level.h > b/arch/arm/include/asm/hugetlb-3level.h > index b897541520ef..8247cd6a2ac6 100644 > --- a/arch/arm/include/asm/hugetlb-3level.h > +++ b/arch/arm/include/asm/hugetlb-3level.h > @@ -37,12 +37,6 @@ static inline pte_t huge_ptep_get(pte_t *ptep) > return retval; > } > > -static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, > -unsigned long addr, pte_t *ptep) > -{ > - ptep_set_wrprotect(mm, addr, ptep); > -} > - > static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, >unsigned long addr, pte_t *ptep, >pte_t pte, int dirty) > diff --git a/arch/arm64/include/asm/hugetlb.h > b/arch/arm64/include/asm/hugetlb.h > index 3e7f6e69b28d..f4f69ae5466e 100644 > --- a/arch/arm64/include/asm/hugetlb.h > +++ b/arch/arm64/include/asm/hugetlb.h > @@ -48,6 +48,7 @@ extern int huge_ptep_set_access_flags(struct vm_area_struct > *vma, > #define __HAVE_ARCH_HUGE_PTEP_GET_AND_CLEAR > extern pte_t huge_ptep_get_and_clear(struct mm_struct *mm, >unsigned long addr, pte_t *ptep); > +#define __HAVE_ARCH_HUGE_PTEP_SET_WRPROTECT > extern void huge_ptep_set_wrprotect(struct mm_struct *mm, > unsigned long addr, pte_t *ptep); > #define __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH > diff --git a/arch/ia64/include/asm/hugetlb.h b/arch/ia64/include/asm/hugetlb.h > index cbe296271030..49d1f7949f3a 100644 > --- a/arch/ia64/include/asm/hugetlb.h > +++ b/arch/ia64/include/asm/hugetlb.h > @@ -27,12 +27,6 @@ static inline void huge_ptep_clear_flush(struct > vm_area_struct *vma, > { > } > > -static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, > -unsigned long addr, pte_t *ptep) > -{ > - ptep_set_wrprotect(mm, addr, ptep); > -} > - > static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, >unsigned long addr, pte_t *ptep, >pte_t pte, int dirty) > diff --git a/arch/mips/include/asm/hugetlb.h b/arch/mips/include/asm/hugetlb.h > index 6ff2531cfb1d..3dcf5debf8c4 100644 > --- a/arch/mips/include/asm/hugetlb.h > +++ b/arch/mips/include/asm/hugetlb.h > @@ -63,12 +63,6 @@ static inline int huge_pte_none(pte_t pte) > return !val || (val == (unsigned long)invalid_pte_table); > } > > -static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, > -unsigned long addr, pte_t *ptep) > -{ > - ptep_set_wrprotect(mm, addr, ptep); > -} > - > static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, >unsigned long addr, >pte_t *ptep, pte_t pte, > diff --git a/arch/parisc/include/asm/hugetlb.h > b/arch/parisc/include/asm/hugetlb.h > index fb7e0fd858a3..9c3950ca2974 100644 > --- a/arch/parisc/include/asm/hugetlb.h > +++ b/arch/parisc/include/asm/hugetlb.h > @@ -39,6 +39,7 @@ static inline void huge_ptep_clear_flush(struct > vm_area_struct *vma, > { > } > > +#define __HAVE_ARCH_HUGE_PTEP_SET_WRPROTECT > void huge_ptep_set_wrprotect(struct mm_struct *mm, > unsigned long addr, pte_t *ptep); > > diff --git a/arch/powerpc/include/asm/book3s/32/pgtable.h > b/arch/powerpc/include/asm/book3s/32/pgtable.h > index 02f5acd7ccc4..d2cd1d0
[PATCH v5 09/11] hugetlb: Introduce generic version of huge_ptep_set_wrprotect
arm, ia64, mips, sh, x86 architectures use the same version of huge_ptep_set_wrprotect, so move this generic implementation into asm-generic/hugetlb.h. Note: powerpc uses twice for book3s/32 and nohash/32 the same version as the above architectures, but the modification was not straightforward and hence has not been done. Signed-off-by: Alexandre Ghiti Reviewed-by: Mike Kravetz --- arch/arm/include/asm/hugetlb-3level.h| 6 -- arch/arm64/include/asm/hugetlb.h | 1 + arch/ia64/include/asm/hugetlb.h | 6 -- arch/mips/include/asm/hugetlb.h | 6 -- arch/parisc/include/asm/hugetlb.h| 1 + arch/powerpc/include/asm/book3s/32/pgtable.h | 2 ++ arch/powerpc/include/asm/book3s/64/pgtable.h | 1 + arch/powerpc/include/asm/nohash/32/pgtable.h | 2 ++ arch/powerpc/include/asm/nohash/64/pgtable.h | 1 + arch/sh/include/asm/hugetlb.h| 6 -- arch/sparc/include/asm/hugetlb.h | 1 + arch/x86/include/asm/hugetlb.h | 6 -- include/asm-generic/hugetlb.h| 8 13 files changed, 17 insertions(+), 30 deletions(-) diff --git a/arch/arm/include/asm/hugetlb-3level.h b/arch/arm/include/asm/hugetlb-3level.h index b897541520ef..8247cd6a2ac6 100644 --- a/arch/arm/include/asm/hugetlb-3level.h +++ b/arch/arm/include/asm/hugetlb-3level.h @@ -37,12 +37,6 @@ static inline pte_t huge_ptep_get(pte_t *ptep) return retval; } -static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, - unsigned long addr, pte_t *ptep) -{ - ptep_set_wrprotect(mm, addr, ptep); -} - static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep, pte_t pte, int dirty) diff --git a/arch/arm64/include/asm/hugetlb.h b/arch/arm64/include/asm/hugetlb.h index 3e7f6e69b28d..f4f69ae5466e 100644 --- a/arch/arm64/include/asm/hugetlb.h +++ b/arch/arm64/include/asm/hugetlb.h @@ -48,6 +48,7 @@ extern int huge_ptep_set_access_flags(struct vm_area_struct *vma, #define __HAVE_ARCH_HUGE_PTEP_GET_AND_CLEAR extern pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep); +#define __HAVE_ARCH_HUGE_PTEP_SET_WRPROTECT extern void huge_ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep); #define __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH diff --git a/arch/ia64/include/asm/hugetlb.h b/arch/ia64/include/asm/hugetlb.h index cbe296271030..49d1f7949f3a 100644 --- a/arch/ia64/include/asm/hugetlb.h +++ b/arch/ia64/include/asm/hugetlb.h @@ -27,12 +27,6 @@ static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, { } -static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, - unsigned long addr, pte_t *ptep) -{ - ptep_set_wrprotect(mm, addr, ptep); -} - static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep, pte_t pte, int dirty) diff --git a/arch/mips/include/asm/hugetlb.h b/arch/mips/include/asm/hugetlb.h index 6ff2531cfb1d..3dcf5debf8c4 100644 --- a/arch/mips/include/asm/hugetlb.h +++ b/arch/mips/include/asm/hugetlb.h @@ -63,12 +63,6 @@ static inline int huge_pte_none(pte_t pte) return !val || (val == (unsigned long)invalid_pte_table); } -static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, - unsigned long addr, pte_t *ptep) -{ - ptep_set_wrprotect(mm, addr, ptep); -} - static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep, pte_t pte, diff --git a/arch/parisc/include/asm/hugetlb.h b/arch/parisc/include/asm/hugetlb.h index fb7e0fd858a3..9c3950ca2974 100644 --- a/arch/parisc/include/asm/hugetlb.h +++ b/arch/parisc/include/asm/hugetlb.h @@ -39,6 +39,7 @@ static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, { } +#define __HAVE_ARCH_HUGE_PTEP_SET_WRPROTECT void huge_ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep); diff --git a/arch/powerpc/include/asm/book3s/32/pgtable.h b/arch/powerpc/include/asm/book3s/32/pgtable.h index 02f5acd7ccc4..d2cd1d0226e9 100644 --- a/arch/powerpc/include/asm/book3s/32/pgtable.h +++ b/arch/powerpc/include/asm/book3s/32/pgtable.h @@ -228,6 +228,8 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, { pte_update(ptep, (_PAGE_RW | _PAGE_HWWRITE), _PAGE_RO); } + +#define __HAVE_ARCH_HUGE_PTEP_SET_WRPROTECT static inline void huge_ptep_set_wrprotect(struct mm_struct *mm,