/* * compare_swap_oom_score_adj() - compare and swap current's oom_score_adj * @old_val: old oom_score_adj for compare * @new_val: new oom_score_adj for swap * * Sets the oom_score_adj value for current to @new_val iff its present value is * @old_val. Usually used to reinstate a previous value to prevent racing with * userspacing tuning the value in the interim. */ void compare_swap_oom_score_adj(int old_val, int new_val) { struct sighand_struct *sighand = current->sighand; spin_lock_irq(&sighand->siglock); if (current->signal->oom_score_adj == old_val) { current->signal->oom_score_adj = new_val; delete_from_adj_tree(current); add_2_adj_tree(current); } spin_unlock_irq(&sighand->siglock); }
/** * test_set_oom_score_adj() - set current's oom_score_adj and return old value * @new_val: new oom_score_adj value * * Sets the oom_score_adj value for current to @new_val with proper * synchronization and returns the old value. Usually used to temporarily * set a value, save the old value in the caller, and then reinstate it later. */ int test_set_oom_score_adj(int new_val) { struct sighand_struct *sighand = current->sighand; int old_val; spin_lock_irq(&sighand->siglock); old_val = current->signal->oom_score_adj; current->signal->oom_score_adj = new_val; delete_from_adj_tree(current); add_2_adj_tree(current); trace_oom_score_adj_update(current); spin_unlock_irq(&sighand->siglock); return old_val; }
/* * compare_swap_oom_score_adj() - compare and swap current's oom_score_adj * @old_val: old oom_score_adj for compare * @new_val: new oom_score_adj for swap * * Sets the oom_score_adj value for current to @new_val iff its present value is * @old_val. Usually used to reinstate a previous value to prevent racing with * userspacing tuning the value in the interim. */ void compare_swap_oom_score_adj(short old_val, short new_val) { struct sighand_struct *sighand = current->sighand; spin_lock_irq(&sighand->siglock); if (current->signal->oom_score_adj == old_val) { current->signal->oom_score_adj = new_val; #ifdef CONFIG_ANDROID_LMK_ADJ_RBTREE delete_from_adj_tree(current); add_2_adj_tree(current); #endif } trace_oom_score_adj_update(current); spin_unlock_irq(&sighand->siglock); }
/** * test_set_oom_score_adj() - set current's oom_score_adj and return old value * @new_val: new oom_score_adj value * * Sets the oom_score_adj value for current to @new_val with proper * synchronization and returns the old value. Usually used to temporarily * set a value, save the old value in the caller, and then reinstate it later. */ short test_set_oom_score_adj(short new_val) { struct sighand_struct *sighand = current->sighand; int old_val; spin_lock_irq(&sighand->siglock); old_val = current->signal->oom_score_adj; current->signal->oom_score_adj = new_val; #ifdef CONFIG_ANDROID_LMK_ADJ_RBTREE delete_from_adj_tree(current); add_2_adj_tree(current); #endif trace_oom_score_adj_update(current); spin_unlock_irq(&sighand->siglock); return old_val; }