diff mbox

powerpc: Fix _PAGE_CHG_MASK

Message ID 4994A046.2080806@xenomai.org (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Philippe Gerum Feb. 12, 2009, 10:18 p.m. UTC
Fix _PAGE_CHG_MASK so that pte_modify() does not affect the _PAGE_SPECIAL bit.

Signed-off-by: Philippe Gerum <rpm@xenomai.org>

--

 arch/powerpc/include/asm/pgtable-4k.h    |    2 +-
 arch/powerpc/include/asm/pgtable-64k.h   |    2 +-
 arch/powerpc/include/asm/pgtable-ppc32.h |    4 ++--
 3 files changed, 4 insertions(+), 4 deletions(-)

Comments

Benjamin Herrenschmidt Feb. 13, 2009, 2:49 a.m. UTC | #1
On Thu, 2009-02-12 at 23:18 +0100, Philippe Gerum wrote:
> Fix _PAGE_CHG_MASK so that pte_modify() does not affect the _PAGE_SPECIAL bit.
> 
> Signed-off-by: Philippe Gerum <rpm@xenomai.org>

Good catch ! Thanks !

Ben.

> --
> 
>  arch/powerpc/include/asm/pgtable-4k.h    |    2 +-
>  arch/powerpc/include/asm/pgtable-64k.h   |    2 +-
>  arch/powerpc/include/asm/pgtable-ppc32.h |    4 ++--
>  3 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/pgtable-4k.h b/arch/powerpc/include/asm/pgtable-4k.h
> index 6b18ba9..1dbca4e 100644
> --- a/arch/powerpc/include/asm/pgtable-4k.h
> +++ b/arch/powerpc/include/asm/pgtable-4k.h
> @@ -60,7 +60,7 @@
>  /* It should be preserving the high 48 bits and then specifically */
>  /* preserving _PAGE_SECONDARY | _PAGE_GROUP_IX */
>  #define _PAGE_CHG_MASK	(PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | \
> -                         _PAGE_HPTEFLAGS)
> +                         _PAGE_HPTEFLAGS | _PAGE_SPECIAL)
> 
>  /* Bits to mask out from a PMD to get to the PTE page */
>  #define PMD_MASKED_BITS		0
> diff --git a/arch/powerpc/include/asm/pgtable-64k.h b/arch/powerpc/include/asm/pgtable-64k.h
> index 07b0d8f..7389003 100644
> --- a/arch/powerpc/include/asm/pgtable-64k.h
> +++ b/arch/powerpc/include/asm/pgtable-64k.h
> @@ -114,7 +114,7 @@ static inline struct subpage_prot_table *pgd_subpage_prot(pgd_t *pgd)
>   * pgprot changes
>   */
>  #define _PAGE_CHG_MASK	(PTE_RPN_MASK | _PAGE_HPTEFLAGS | _PAGE_DIRTY | \
> -                         _PAGE_ACCESSED)
> +                         _PAGE_ACCESSED | _PAGE_SPECIAL)
> 
>  /* Bits to mask out from a PMD to get to the PTE page */
>  #define PMD_MASKED_BITS		0x1ff
> diff --git a/arch/powerpc/include/asm/pgtable-ppc32.h b/arch/powerpc/include/asm/pgtable-ppc32.h
> index 75dded6..8298afc 100644
> --- a/arch/powerpc/include/asm/pgtable-ppc32.h
> +++ b/arch/powerpc/include/asm/pgtable-ppc32.h
> @@ -428,8 +428,8 @@ extern int icache_44x_need_flush;
>  #define PMD_PAGE_SIZE(pmd)	bad_call_to_PMD_PAGE_SIZE()
>  #endif
> 
> -#define _PAGE_CHG_MASK	(PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_SPECIAL)
> -
> +#define _PAGE_CHG_MASK	(PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | \
> +			 _PAGE_SPECIAL)
> 
>  #define PAGE_PROT_BITS	(_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \
>  			 _PAGE_WRITETHRU | _PAGE_ENDIAN | \
>
Benjamin Herrenschmidt Feb. 13, 2009, 5:46 a.m. UTC | #2
On Fri, 2009-02-13 at 13:49 +1100, Benjamin Herrenschmidt wrote:

> > diff --git a/arch/powerpc/include/asm/pgtable-ppc32.h b/arch/powerpc/include/asm/pgtable-ppc32.h
> > index 75dded6..8298afc 100644
> > --- a/arch/powerpc/include/asm/pgtable-ppc32.h
> > +++ b/arch/powerpc/include/asm/pgtable-ppc32.h
> > @@ -428,8 +428,8 @@ extern int icache_44x_need_flush;
> >  #define PMD_PAGE_SIZE(pmd)	bad_call_to_PMD_PAGE_SIZE()
> >  #endif
> > 
> > -#define _PAGE_CHG_MASK	(PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_SPECIAL)
> > -
> > +#define _PAGE_CHG_MASK	(PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | \
> > +			 _PAGE_SPECIAL)
> > 
> >  #define PAGE_PROT_BITS	(_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \
> >  			 _PAGE_WRITETHRU | _PAGE_ENDIAN | \
> > 

BTW. That part of the patch looks bad (ie, the original line isn't what
is upstream). I've fixed up locally.

Cheers,
Ben.
Philippe Gerum Feb. 13, 2009, 10:01 a.m. UTC | #3
Benjamin Herrenschmidt wrote:
> On Fri, 2009-02-13 at 13:49 +1100, Benjamin Herrenschmidt wrote:
> 
>>> diff --git a/arch/powerpc/include/asm/pgtable-ppc32.h b/arch/powerpc/include/asm/pgtable-ppc32.h
>>> index 75dded6..8298afc 100644
>>> --- a/arch/powerpc/include/asm/pgtable-ppc32.h
>>> +++ b/arch/powerpc/include/asm/pgtable-ppc32.h
>>> @@ -428,8 +428,8 @@ extern int icache_44x_need_flush;
>>>  #define PMD_PAGE_SIZE(pmd)	bad_call_to_PMD_PAGE_SIZE()
>>>  #endif
>>>
>>> -#define _PAGE_CHG_MASK	(PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_SPECIAL)
>>> -
>>> +#define _PAGE_CHG_MASK	(PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | \
>>> +			 _PAGE_SPECIAL)
>>>
>>>  #define PAGE_PROT_BITS	(_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \
>>>  			 _PAGE_WRITETHRU | _PAGE_ENDIAN | \
>>>
> 
> BTW. That part of the patch looks bad (ie, the original line isn't what
> is upstream). I've fixed up locally.
>

Sorry for this. I forgot to rebase my patch on mainline.

> Cheers,
> Ben.
> 
> 
>
diff mbox

Patch

diff --git a/arch/powerpc/include/asm/pgtable-4k.h b/arch/powerpc/include/asm/pgtable-4k.h
index 6b18ba9..1dbca4e 100644
--- a/arch/powerpc/include/asm/pgtable-4k.h
+++ b/arch/powerpc/include/asm/pgtable-4k.h
@@ -60,7 +60,7 @@ 
 /* It should be preserving the high 48 bits and then specifically */
 /* preserving _PAGE_SECONDARY | _PAGE_GROUP_IX */
 #define _PAGE_CHG_MASK	(PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | \
-                         _PAGE_HPTEFLAGS)
+                         _PAGE_HPTEFLAGS | _PAGE_SPECIAL)

 /* Bits to mask out from a PMD to get to the PTE page */
 #define PMD_MASKED_BITS		0
diff --git a/arch/powerpc/include/asm/pgtable-64k.h b/arch/powerpc/include/asm/pgtable-64k.h
index 07b0d8f..7389003 100644
--- a/arch/powerpc/include/asm/pgtable-64k.h
+++ b/arch/powerpc/include/asm/pgtable-64k.h
@@ -114,7 +114,7 @@  static inline struct subpage_prot_table *pgd_subpage_prot(pgd_t *pgd)
  * pgprot changes
  */
 #define _PAGE_CHG_MASK	(PTE_RPN_MASK | _PAGE_HPTEFLAGS | _PAGE_DIRTY | \
-                         _PAGE_ACCESSED)
+                         _PAGE_ACCESSED | _PAGE_SPECIAL)

 /* Bits to mask out from a PMD to get to the PTE page */
 #define PMD_MASKED_BITS		0x1ff
diff --git a/arch/powerpc/include/asm/pgtable-ppc32.h b/arch/powerpc/include/asm/pgtable-ppc32.h
index 75dded6..8298afc 100644
--- a/arch/powerpc/include/asm/pgtable-ppc32.h
+++ b/arch/powerpc/include/asm/pgtable-ppc32.h
@@ -428,8 +428,8 @@  extern int icache_44x_need_flush;
 #define PMD_PAGE_SIZE(pmd)	bad_call_to_PMD_PAGE_SIZE()
 #endif

-#define _PAGE_CHG_MASK	(PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_SPECIAL)
-
+#define _PAGE_CHG_MASK	(PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY | \
+			 _PAGE_SPECIAL)

 #define PAGE_PROT_BITS	(_PAGE_GUARDED | _PAGE_COHERENT | _PAGE_NO_CACHE | \
 			 _PAGE_WRITETHRU | _PAGE_ENDIAN | \