On Thu, 10 Feb 2011, Catalin Marinas wrote:

> On Thu, 2011-02-10 at 13:04 +0000, Russell King - ARM Linux wrote:
> > On Wed, Feb 09, 2011 at 10:01:33AM +0000, Catalin Marinas wrote:
> > > Could we make the domains usage a run-time feature based on the
> > > architecture version? For ARMv7, we need to have the vectors page
> > > read-only anyway if the SWP emulation is enabled (and I posted a
> > > simple patch in a reply to your email).
> > >
> > > The issue I see is that ARM11MPCore is reported as v7 though we still
> > > use domains on this processor (we could always remove the domains if
> > > TLS register is available or use some more precise architecture
> > > version identification).
> > 
> > We could also do the below, which I think is more logical - SWP emulation
> > requires that CPU domains aren't enabled, so let's make that explicit
> > in the Kconfig.
> 
> This may work but it is to restrictive IMHO. SWP emulation only requires
> that RO user pages are also RO for the kernel. And there is a simple fix
> for this:
> 

The patch below is making the code more straight forward regardless of 
any swp emulation issues.

Acked-by: Nicolas Pitre <[email protected]>

> diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
> index ee57640..6e0b349 100644
> --- a/arch/arm/kernel/traps.c
> +++ b/arch/arm/kernel/traps.c
> @@ -758,17 +758,21 @@ static void __init kuser_get_tls_init(unsigned long 
> vectors)
>  
>  void __init early_trap_init(void)
>  {
> -#if defined(CONFIG_CPU_USE_DOMAINS)
> -     unsigned long vectors = CONFIG_VECTORS_BASE;
> -#else
> -     unsigned long vectors = (unsigned long)vectors_page;
> -#endif
> +     unsigned long vectors;
>       extern char __stubs_start[], __stubs_end[];
>       extern char __vectors_start[], __vectors_end[];
>       extern char __kuser_helper_start[], __kuser_helper_end[];
>       int kuser_sz = __kuser_helper_end - __kuser_helper_start;
>  
>       /*
> +      * On ARMv7, user RO pages are mapped as kernel RO.
> +      */
> +     if (cpu_architecture() >= 7)
> +             vectors = (unsigned long)vectors_page;
> +     else
> +             vectors = CONFIG_VECTORS_BASE;
> +
> +     /*
>        * Copy the vectors, stubs and kuser helpers (in entry-armv.S)
>        * into the vector page, mapped at 0xffff0000, and ensure these
>        * are visible to the instruction stream.
> diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
> index 0c1172b..5f51592 100644
> --- a/arch/arm/mm/proc-v7.S
> +++ b/arch/arm/mm/proc-v7.S
> @@ -146,11 +146,6 @@ ENTRY(cpu_v7_set_pte_ext)
>  
>       tst     r1, #L_PTE_USER
>       orrne   r3, r3, #PTE_EXT_AP1
> -#ifdef CONFIG_CPU_USE_DOMAINS
> -     @ allow kernel read/write access to read-only user pages
> -     tstne   r3, #PTE_EXT_APX
> -     bicne   r3, r3, #PTE_EXT_APX | PTE_EXT_AP0
> -#endif
>  
>       tst     r1, #L_PTE_XN
>       orrne   r3, r3, #PTE_EXT_XN
> 
> 
> -- 
> Catalin
> 
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> [email protected]
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to