lkml.org 
[lkml]   [2016]   [Apr]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v12 03/13] lru_add_drain_all: factor out lru_add_drain_needed
    Date
    This per-cpu check was being done in the loop in lru_add_drain_all(),
    but having it be callable for a particular cpu is helpful for the
    task-isolation patches.

    Signed-off-by: Chris Metcalf <cmetcalf@mellanox.com>
    ---
    include/linux/swap.h | 1 +
    mm/swap.c | 15 ++++++++++-----
    2 files changed, 11 insertions(+), 5 deletions(-)

    diff --git a/include/linux/swap.h b/include/linux/swap.h
    index d18b65c53dbb..da21f5240702 100644
    --- a/include/linux/swap.h
    +++ b/include/linux/swap.h
    @@ -304,6 +304,7 @@ extern void activate_page(struct page *);
    extern void mark_page_accessed(struct page *);
    extern void lru_add_drain(void);
    extern void lru_add_drain_cpu(int cpu);
    +extern bool lru_add_drain_needed(int cpu);
    extern void lru_add_drain_all(void);
    extern void rotate_reclaimable_page(struct page *page);
    extern void deactivate_file_page(struct page *page);
    diff --git a/mm/swap.c b/mm/swap.c
    index 09fe5e97714a..bdcdfa21094c 100644
    --- a/mm/swap.c
    +++ b/mm/swap.c
    @@ -653,6 +653,15 @@ void deactivate_page(struct page *page)
    }
    }

    +bool lru_add_drain_needed(int cpu)
    +{
    + return (pagevec_count(&per_cpu(lru_add_pvec, cpu)) ||
    + pagevec_count(&per_cpu(lru_rotate_pvecs, cpu)) ||
    + pagevec_count(&per_cpu(lru_deactivate_file_pvecs, cpu)) ||
    + pagevec_count(&per_cpu(lru_deactivate_pvecs, cpu)) ||
    + need_activate_page_drain(cpu));
    +}
    +
    void lru_add_drain(void)
    {
    lru_add_drain_cpu(get_cpu());
    @@ -679,11 +688,7 @@ void lru_add_drain_all(void)
    for_each_online_cpu(cpu) {
    struct work_struct *work = &per_cpu(lru_add_drain_work, cpu);

    - if (pagevec_count(&per_cpu(lru_add_pvec, cpu)) ||
    - pagevec_count(&per_cpu(lru_rotate_pvecs, cpu)) ||
    - pagevec_count(&per_cpu(lru_deactivate_file_pvecs, cpu)) ||
    - pagevec_count(&per_cpu(lru_deactivate_pvecs, cpu)) ||
    - need_activate_page_drain(cpu)) {
    + if (lru_add_drain_needed(cpu)) {
    INIT_WORK(work, lru_add_drain_per_cpu);
    schedule_work_on(cpu, work);
    cpumask_set_cpu(cpu, &has_work);
    --
    2.7.2
    \
     
     \ /
      Last update: 2016-04-05 20:01    [W:4.203 / U:0.920 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site