Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 493555de authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "arm64: SW PAN: Point saved ttbr0 at the zero page when switching to init_mm"

parents be003047 7bec5cb5
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -93,10 +93,8 @@ static inline void efi_set_pgd(struct mm_struct *mm)
			 * Defer the switch to the current thread's TTBR0_EL1
			 * until uaccess_enable(). Restore the current
			 * thread's saved ttbr0 corresponding to its active_mm
			 * (if different from init_mm).
			 */
			cpu_set_reserved_ttbr0();
			if (current->active_mm != &init_mm)
			update_saved_ttbr0(current, current->active_mm);
		}
	}
+13 −9
Original line number Diff line number Diff line
@@ -174,11 +174,17 @@ enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
static inline void update_saved_ttbr0(struct task_struct *tsk,
				      struct mm_struct *mm)
{
	if (system_uses_ttbr0_pan()) {
		BUG_ON(mm->pgd == swapper_pg_dir);
		task_thread_info(tsk)->ttbr0 =
			virt_to_phys(mm->pgd) | ASID(mm) << 48;
	}
	u64 ttbr;

	if (!system_uses_ttbr0_pan())
		return;

	if (mm == &init_mm)
		ttbr = __pa_symbol(empty_zero_page);
	else
		ttbr = virt_to_phys(mm->pgd) | ASID(mm) << 48;

	task_thread_info(tsk)->ttbr0 = ttbr;
}
#else
static inline void update_saved_ttbr0(struct task_struct *tsk,
@@ -214,10 +220,8 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next,
	 * Update the saved TTBR0_EL1 of the scheduled-in task as the previous
	 * value may have not been initialised yet (activate_mm caller) or the
	 * ASID has changed since the last run (following the context switch
	 * of another thread of the same process). Avoid setting the reserved
	 * TTBR0_EL1 to swapper_pg_dir (init_mm; e.g. via idle_task_exit).
	 * of another thread of the same process).
	 */
	if (next != &init_mm)
	update_saved_ttbr0(tsk, next);
}