diff options
Diffstat (limited to 'kernel/scs.c')
| -rw-r--r-- | kernel/scs.c | 14 | 
1 files changed, 12 insertions, 2 deletions
| diff --git a/kernel/scs.c b/kernel/scs.c index b7e1b096d906..d7809affe740 100644 --- a/kernel/scs.c +++ b/kernel/scs.c @@ -12,6 +12,10 @@  #include <linux/vmalloc.h>  #include <linux/vmstat.h> +#ifdef CONFIG_DYNAMIC_SCS +DEFINE_STATIC_KEY_FALSE(dynamic_scs_enabled); +#endif +  static void __scs_account(void *s, int account)  {  	struct page *scs_page = vmalloc_to_page(s); @@ -101,14 +105,20 @@ static int scs_cleanup(unsigned int cpu)  void __init scs_init(void)  { +	if (!scs_is_enabled()) +		return;  	cpuhp_setup_state(CPUHP_BP_PREPARE_DYN, "scs:scs_cache", NULL,  			  scs_cleanup);  }  int scs_prepare(struct task_struct *tsk, int node)  { -	void *s = scs_alloc(node); +	void *s; +	if (!scs_is_enabled()) +		return 0; + +	s = scs_alloc(node);  	if (!s)  		return -ENOMEM; @@ -148,7 +158,7 @@ void scs_release(struct task_struct *tsk)  {  	void *s = task_scs(tsk); -	if (!s) +	if (!scs_is_enabled() || !s)  		return;  	WARN(task_scs_end_corrupted(tsk), |