162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci#include <asm/kup.h> 462306a36Sopenharmony_ci#include <asm/smp.h> 562306a36Sopenharmony_ci 662306a36Sopenharmony_civoid setup_kuap(bool disabled) 762306a36Sopenharmony_ci{ 862306a36Sopenharmony_ci if (!disabled) { 962306a36Sopenharmony_ci update_user_segments(mfsr(0) | SR_KS); 1062306a36Sopenharmony_ci isync(); /* Context sync required after mtsr() */ 1162306a36Sopenharmony_ci init_mm.context.sr0 |= SR_KS; 1262306a36Sopenharmony_ci current->thread.sr0 |= SR_KS; 1362306a36Sopenharmony_ci } 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci if (smp_processor_id() != boot_cpuid) 1662306a36Sopenharmony_ci return; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci if (disabled) 1962306a36Sopenharmony_ci cur_cpu_spec->mmu_features &= ~MMU_FTR_KUAP; 2062306a36Sopenharmony_ci else 2162306a36Sopenharmony_ci pr_info("Activating Kernel Userspace Access Protection\n"); 2262306a36Sopenharmony_ci} 23