core.c (b3bbcc5d1da1b654091dad15980b3d58fdae0fc6) | core.c (bd74fdaea146029e4fa12c6de89adbe0779348a9) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * kernel/sched/core.c 4 * 5 * Core kernel scheduler code and related syscalls 6 * 7 * Copyright (C) 1991-2002 Linus Torvalds 8 */ --- 4382 unchanged lines hidden (view full) --- 4391 if (enabled) 4392 sysctl_numa_balancing_mode = NUMA_BALANCING_NORMAL; 4393 else 4394 sysctl_numa_balancing_mode = NUMA_BALANCING_DISABLED; 4395 __set_numabalancing_state(enabled); 4396} 4397 4398#ifdef CONFIG_PROC_SYSCTL | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * kernel/sched/core.c 4 * 5 * Core kernel scheduler code and related syscalls 6 * 7 * Copyright (C) 1991-2002 Linus Torvalds 8 */ --- 4382 unchanged lines hidden (view full) --- 4391 if (enabled) 4392 sysctl_numa_balancing_mode = NUMA_BALANCING_NORMAL; 4393 else 4394 sysctl_numa_balancing_mode = NUMA_BALANCING_DISABLED; 4395 __set_numabalancing_state(enabled); 4396} 4397 4398#ifdef CONFIG_PROC_SYSCTL |
4399static void reset_memory_tiering(void) 4400{ 4401 struct pglist_data *pgdat; 4402 4403 for_each_online_pgdat(pgdat) { 4404 pgdat->nbp_threshold = 0; 4405 pgdat->nbp_th_nr_cand = node_page_state(pgdat, PGPROMOTE_CANDIDATE); 4406 pgdat->nbp_th_start = jiffies_to_msecs(jiffies); 4407 } 4408} 4409 |
|
4399int sysctl_numa_balancing(struct ctl_table *table, int write, 4400 void *buffer, size_t *lenp, loff_t *ppos) 4401{ 4402 struct ctl_table t; 4403 int err; 4404 int state = sysctl_numa_balancing_mode; 4405 4406 if (write && !capable(CAP_SYS_ADMIN)) 4407 return -EPERM; 4408 4409 t = *table; 4410 t.data = &state; 4411 err = proc_dointvec_minmax(&t, write, buffer, lenp, ppos); 4412 if (err < 0) 4413 return err; 4414 if (write) { | 4410int sysctl_numa_balancing(struct ctl_table *table, int write, 4411 void *buffer, size_t *lenp, loff_t *ppos) 4412{ 4413 struct ctl_table t; 4414 int err; 4415 int state = sysctl_numa_balancing_mode; 4416 4417 if (write && !capable(CAP_SYS_ADMIN)) 4418 return -EPERM; 4419 4420 t = *table; 4421 t.data = &state; 4422 err = proc_dointvec_minmax(&t, write, buffer, lenp, ppos); 4423 if (err < 0) 4424 return err; 4425 if (write) { |
4426 if (!(sysctl_numa_balancing_mode & NUMA_BALANCING_MEMORY_TIERING) && 4427 (state & NUMA_BALANCING_MEMORY_TIERING)) 4428 reset_memory_tiering(); |
|
4415 sysctl_numa_balancing_mode = state; 4416 __set_numabalancing_state(state); 4417 } 4418 return err; 4419} 4420#endif 4421#endif 4422 --- 738 unchanged lines hidden (view full) --- 5161 * sys_membarrier() requires an smp_mb() between setting 5162 * rq->curr / membarrier_switch_mm() and returning to userspace. 5163 * 5164 * The below provides this either through switch_mm(), or in 5165 * case 'prev->active_mm == next->mm' through 5166 * finish_task_switch()'s mmdrop(). 5167 */ 5168 switch_mm_irqs_off(prev->active_mm, next->mm, next); | 4429 sysctl_numa_balancing_mode = state; 4430 __set_numabalancing_state(state); 4431 } 4432 return err; 4433} 4434#endif 4435#endif 4436 --- 738 unchanged lines hidden (view full) --- 5175 * sys_membarrier() requires an smp_mb() between setting 5176 * rq->curr / membarrier_switch_mm() and returning to userspace. 5177 * 5178 * The below provides this either through switch_mm(), or in 5179 * case 'prev->active_mm == next->mm' through 5180 * finish_task_switch()'s mmdrop(). 5181 */ 5182 switch_mm_irqs_off(prev->active_mm, next->mm, next); |
5183 lru_gen_use_mm(next->mm); |
|
5169 5170 if (!prev->mm) { // from kernel 5171 /* will mmdrop() in finish_task_switch(). */ 5172 rq->prev_mm = prev->active_mm; 5173 prev->active_mm = NULL; 5174 } 5175 } 5176 --- 6058 unchanged lines hidden --- | 5184 5185 if (!prev->mm) { // from kernel 5186 /* will mmdrop() in finish_task_switch(). */ 5187 rq->prev_mm = prev->active_mm; 5188 prev->active_mm = NULL; 5189 } 5190 } 5191 --- 6058 unchanged lines hidden --- |