On Wed, Nov 1, 2017 at 3:10 PM, Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp > wrote:
On 2017/11/01 14:32, Shawn Landden wrote:
> @@ -1029,6 +1030,22 @@ bool out_of_memory(struct oom_control *oc)
> return true;
> }
>
> + /*
> + * Check death row.
> + */
> + if (!list_empty(eventpoll_deathrow_list())) { Unsafe traversal. List can become empty at this moment.
> + struct list_head *l = eventpoll_deathrow_list();
> + struct task_struct *ts = list_first_entry(l,
> + struct task_struct, se.deathrow);
> +
> + pr_debug("Killing pid %u from EPOLL_KILLME death row.",
> + ts->pid);
> +
> + /* We use SIGKILL so as to cleanly interrupt ep_poll() */
> + kill_pid(task_pid(ts), SIGKILL, 1);
send_sig() ?
> + return true;
> + }
> +
> /*
> * The OOM killer does not compensate for IO-less reclaim.
> * pagefault_out_of_memory lost its gfp context so we have to
>
And why is
static int oom_fd = open("/proc/self/oom_score_adj", O_WRONLY);
and then toggling between
write(fd, "1000", 4);
and
write(fd, "0", 1);
not sufficient? Adding prctl() that do this might be handy though.
I want to do special process accounting. Also, in Android using this type of memory management is mandatory, and to do that other processes would have to make delivery of their messages (like a wake-up for user input) contingent on setting this. oom_score 1000 could gain all this special handling however.