Loading drivers/staging/android/lowmemorykiller.c +20 −20 Original line number Diff line number Diff line Loading @@ -119,20 +119,26 @@ struct lmk_event { struct list_head list; }; void handle_lmk_event(struct task_struct *selected, short min_score_adj) void handle_lmk_event(struct task_struct *selected, int selected_tasksize, short min_score_adj) { int head; int tail; struct lmk_event *events; struct lmk_event *event; int res; long rss_in_pages = -1; struct mm_struct *mm = get_task_mm(selected); char taskname[MAX_TASKNAME]; if (mm) { rss_in_pages = get_mm_rss(mm); mmput(mm); } res = get_cmdline(selected, taskname, MAX_TASKNAME - 1); /* No valid process name means this is definitely not associated with a * userspace activity. */ if (res <= 0 || res >= MAX_TASKNAME) return; taskname[res] = '\0'; spin_lock(&lmk_event_lock); Loading @@ -148,18 +154,8 @@ void handle_lmk_event(struct task_struct *selected, short min_score_adj) events = (struct lmk_event *) event_buffer.buf; event = &events[head]; res = get_cmdline(selected, event->taskname, MAX_TASKNAME - 1); memcpy(event->taskname, taskname, res + 1); /* No valid process name means this is definitely not associated with a * userspace activity. */ if (res <= 0 || res >= MAX_TASKNAME) { spin_unlock(&lmk_event_lock); return; } event->taskname[res] = '\0'; event->pid = selected->pid; event->uid = from_kuid_munged(current_user_ns(), task_uid(selected)); if (selected->group_leader) Loading @@ -170,7 +166,7 @@ void handle_lmk_event(struct task_struct *selected, short min_score_adj) event->maj_flt = selected->maj_flt; event->oom_score_adj = selected->signal->oom_score_adj; event->start_time = nsec_to_clock_t(selected->real_start_time); event->rss_in_pages = rss_in_pages; event->rss_in_pages = selected_tasksize; event->min_score_adj = min_score_adj; event_buffer.head = (head + 1) & (MAX_BUFFERED_EVENTS - 1); Loading Loading @@ -786,7 +782,7 @@ static unsigned long lowmem_scan(struct shrinker *s, struct shrink_control *sc) lowmem_deathpending_timeout = jiffies + HZ; rem += selected_tasksize; rcu_read_unlock(); handle_lmk_event(selected, min_score_adj); get_task_struct(selected); /* give the system time to free up the memory */ msleep_interruptible(20); trace_almk_shrink(selected_tasksize, ret, Loading @@ -801,6 +797,10 @@ static unsigned long lowmem_scan(struct shrinker *s, struct shrink_control *sc) sc->nr_to_scan, sc->gfp_mask, rem); mutex_unlock(&scan_mutex); if (selected) { handle_lmk_event(selected, selected_tasksize, min_score_adj); put_task_struct(selected); } return rem; } Loading Loading
drivers/staging/android/lowmemorykiller.c +20 −20 Original line number Diff line number Diff line Loading @@ -119,20 +119,26 @@ struct lmk_event { struct list_head list; }; void handle_lmk_event(struct task_struct *selected, short min_score_adj) void handle_lmk_event(struct task_struct *selected, int selected_tasksize, short min_score_adj) { int head; int tail; struct lmk_event *events; struct lmk_event *event; int res; long rss_in_pages = -1; struct mm_struct *mm = get_task_mm(selected); char taskname[MAX_TASKNAME]; if (mm) { rss_in_pages = get_mm_rss(mm); mmput(mm); } res = get_cmdline(selected, taskname, MAX_TASKNAME - 1); /* No valid process name means this is definitely not associated with a * userspace activity. */ if (res <= 0 || res >= MAX_TASKNAME) return; taskname[res] = '\0'; spin_lock(&lmk_event_lock); Loading @@ -148,18 +154,8 @@ void handle_lmk_event(struct task_struct *selected, short min_score_adj) events = (struct lmk_event *) event_buffer.buf; event = &events[head]; res = get_cmdline(selected, event->taskname, MAX_TASKNAME - 1); memcpy(event->taskname, taskname, res + 1); /* No valid process name means this is definitely not associated with a * userspace activity. */ if (res <= 0 || res >= MAX_TASKNAME) { spin_unlock(&lmk_event_lock); return; } event->taskname[res] = '\0'; event->pid = selected->pid; event->uid = from_kuid_munged(current_user_ns(), task_uid(selected)); if (selected->group_leader) Loading @@ -170,7 +166,7 @@ void handle_lmk_event(struct task_struct *selected, short min_score_adj) event->maj_flt = selected->maj_flt; event->oom_score_adj = selected->signal->oom_score_adj; event->start_time = nsec_to_clock_t(selected->real_start_time); event->rss_in_pages = rss_in_pages; event->rss_in_pages = selected_tasksize; event->min_score_adj = min_score_adj; event_buffer.head = (head + 1) & (MAX_BUFFERED_EVENTS - 1); Loading Loading @@ -786,7 +782,7 @@ static unsigned long lowmem_scan(struct shrinker *s, struct shrink_control *sc) lowmem_deathpending_timeout = jiffies + HZ; rem += selected_tasksize; rcu_read_unlock(); handle_lmk_event(selected, min_score_adj); get_task_struct(selected); /* give the system time to free up the memory */ msleep_interruptible(20); trace_almk_shrink(selected_tasksize, ret, Loading @@ -801,6 +797,10 @@ static unsigned long lowmem_scan(struct shrinker *s, struct shrink_control *sc) sc->nr_to_scan, sc->gfp_mask, rem); mutex_unlock(&scan_mutex); if (selected) { handle_lmk_event(selected, selected_tasksize, min_score_adj); put_task_struct(selected); } return rem; } Loading