lkml.org 
[lkml]   [2015]   [Apr]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.16.y-ckt 098/144] arm64: Use the reserved TTBR0 if context switching to the init_mm
    Date
    3.16.7-ckt10 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Catalin Marinas <catalin.marinas@arm.com>

    commit e53f21bce4d35a93b23d8fa1a840860f6c74f59e upstream.

    The idle_task_exit() function may call switch_mm() with next ==
    &init_mm. On arm64, init_mm.pgd cannot be used for user mappings, so
    this patch simply sets the reserved TTBR0.

    Reported-by: Jon Medhurst (Tixy) <tixy@linaro.org>
    Tested-by: Jon Medhurst (Tixy) <tixy@linaro.org>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    ---
    arch/arm64/include/asm/mmu_context.h | 9 +++++++++
    1 file changed, 9 insertions(+)

    diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h
    index a9eee33dfa62..101a42bde728 100644
    --- a/arch/arm64/include/asm/mmu_context.h
    +++ b/arch/arm64/include/asm/mmu_context.h
    @@ -151,6 +151,15 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
    {
    unsigned int cpu = smp_processor_id();

    + /*
    + * init_mm.pgd does not contain any user mappings and it is always
    + * active for kernel addresses in TTBR1. Just set the reserved TTBR0.
    + */
    + if (next == &init_mm) {
    + cpu_set_reserved_ttbr0();
    + return;
    + }
    +
    if (!cpumask_test_and_set_cpu(cpu, mm_cpumask(next)) || prev != next)
    check_and_switch_context(next, tsk);
    }

    \
     
     \ /
      Last update: 2015-04-21 17:41    [W:4.032 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site