Patchwork powerpc/mm: Fix _PAGE_COHERENT support on classic ppc32 HW

login
register
mail settings
Submitter Kumar Gala
Date Feb. 10, 2009, 8:57 p.m.
Message ID <1234299466-17300-1-git-send-email-galak@kernel.crashing.org>
Download mbox | patch
Permalink /patch/22887/
State Accepted, archived
Delegated to: Benjamin Herrenschmidt
Headers show

Comments

Kumar Gala - Feb. 10, 2009, 8:57 p.m.
The following commit:

commit 64b3d0e8122b422e879b23d42f9e0e8efbbf9744
Author: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date:   Thu Dec 18 19:13:51 2008 +0000

    powerpc/mm: Rework usage of _PAGE_COHERENT/NO_CACHE/GUARDED

broke setting of the _PAGE_COHERENT bit in the PPC HW PTE.  Since we now
actually set _PAGE_COHERENT in the Linux PTE we shouldn't be clearing it
out before we propogate it to the PPC HW PTE.

Reported-by: Martyn Welch <martyn.welch@gefanuc.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
---
 arch/powerpc/mm/hash_low_32.S |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Becky Bruce - Feb. 10, 2009, 10:48 p.m.
On Feb 10, 2009, at 2:57 PM, Kumar Gala wrote:

> The following commit:
>
> commit 64b3d0e8122b422e879b23d42f9e0e8efbbf9744
> Author: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> Date:   Thu Dec 18 19:13:51 2008 +0000
>
>    powerpc/mm: Rework usage of _PAGE_COHERENT/NO_CACHE/GUARDED
>
> broke setting of the _PAGE_COHERENT bit in the PPC HW PTE.  Since we  
> now
> actually set _PAGE_COHERENT in the Linux PTE we shouldn't be  
> clearing it
> out before we propogate it to the PPC HW PTE.
>
> Reported-by: Martyn Welch <martyn.welch@gefanuc.com>
> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>

I've booted 8641 dual-core and run LTP to completion with an expected  
number of fails.  So....

Acked-by: Becky Bruce <beckyb@kernel.crashing.org>

-B

>
> ---
> arch/powerpc/mm/hash_low_32.S |    2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/arch/powerpc/mm/hash_low_32.S b/arch/powerpc/mm/ 
> hash_low_32.S
> index 67850ec..14af8ce 100644
> --- a/arch/powerpc/mm/hash_low_32.S
> +++ b/arch/powerpc/mm/hash_low_32.S
> @@ -320,7 +320,7 @@ _GLOBAL(create_hpte)
> 	and	r8,r8,r0		/* writable if _RW & _DIRTY */
> 	rlwimi	r5,r5,32-1,30,30	/* _PAGE_USER -> PP msb */
> 	rlwimi	r5,r5,32-2,31,31	/* _PAGE_USER -> PP lsb */
> -	ori	r8,r8,0xe14		/* clear out reserved bits and M */
> +	ori	r8,r8,0xe04		/* clear out reserved bits */
> 	andc	r8,r5,r8		/* PP = user? (rw&dirty? 2: 3): 0 */
> BEGIN_FTR_SECTION
> 	rlwinm	r8,r8,0,~_PAGE_COHERENT	/* clear M (coherence not required) */
> -- 
> 1.5.6.6
Martyn Welch - Feb. 16, 2009, 10:10 a.m.
Kumar Gala wrote:
> The following commit:
> 
> commit 64b3d0e8122b422e879b23d42f9e0e8efbbf9744
> Author: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> Date:   Thu Dec 18 19:13:51 2008 +0000
> 
>     powerpc/mm: Rework usage of _PAGE_COHERENT/NO_CACHE/GUARDED
> 
> broke setting of the _PAGE_COHERENT bit in the PPC HW PTE.  Since we now
> actually set _PAGE_COHERENT in the Linux PTE we shouldn't be clearing it
> out before we propogate it to the PPC HW PTE.
> 
> Reported-by: Martyn Welch <martyn.welch@gefanuc.com>
> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
> ---
>  arch/powerpc/mm/hash_low_32.S |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/powerpc/mm/hash_low_32.S b/arch/powerpc/mm/hash_low_32.S
> index 67850ec..14af8ce 100644
> --- a/arch/powerpc/mm/hash_low_32.S
> +++ b/arch/powerpc/mm/hash_low_32.S
> @@ -320,7 +320,7 @@ _GLOBAL(create_hpte)
>  	and	r8,r8,r0		/* writable if _RW & _DIRTY */
>  	rlwimi	r5,r5,32-1,30,30	/* _PAGE_USER -> PP msb */
>  	rlwimi	r5,r5,32-2,31,31	/* _PAGE_USER -> PP lsb */
> -	ori	r8,r8,0xe14		/* clear out reserved bits and M */
> +	ori	r8,r8,0xe04		/* clear out reserved bits */
>  	andc	r8,r5,r8		/* PP = user? (rw&dirty? 2: 3): 0 */
>  BEGIN_FTR_SECTION
>  	rlwinm	r8,r8,0,~_PAGE_COHERENT	/* clear M (coherence not required) */

This does indeed resolve the problem I was having.

Sorry for not replying sooner - bad weather here in the UK unexpectedly extended a planned holiday.

Thank you for resolving this issue,

Martyn

Patch

diff --git a/arch/powerpc/mm/hash_low_32.S b/arch/powerpc/mm/hash_low_32.S
index 67850ec..14af8ce 100644
--- a/arch/powerpc/mm/hash_low_32.S
+++ b/arch/powerpc/mm/hash_low_32.S
@@ -320,7 +320,7 @@  _GLOBAL(create_hpte)
 	and	r8,r8,r0		/* writable if _RW & _DIRTY */
 	rlwimi	r5,r5,32-1,30,30	/* _PAGE_USER -> PP msb */
 	rlwimi	r5,r5,32-2,31,31	/* _PAGE_USER -> PP lsb */
-	ori	r8,r8,0xe14		/* clear out reserved bits and M */
+	ori	r8,r8,0xe04		/* clear out reserved bits */
 	andc	r8,r5,r8		/* PP = user? (rw&dirty? 2: 3): 0 */
 BEGIN_FTR_SECTION
 	rlwinm	r8,r8,0,~_PAGE_COHERENT	/* clear M (coherence not required) */