lkml.org 
[lkml]   [2020]   [Jul]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v16 12/22] mm/lru: move lock into lru_note_cost
    Date
    This patch move lru_lock into lru_note_cost. It's a bit ugly and may
    cost more locking, but it's necessary for later per pgdat lru_lock to
    per memcg lru_lock change.

    Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: linux-mm@kvack.org
    Cc: linux-kernel@vger.kernel.org
    ---
    mm/swap.c | 5 +++--
    mm/vmscan.c | 4 +---
    2 files changed, 4 insertions(+), 5 deletions(-)

    diff --git a/mm/swap.c b/mm/swap.c
    index b88ca630db70..f645965fde0e 100644
    --- a/mm/swap.c
    +++ b/mm/swap.c
    @@ -269,7 +269,9 @@ void lru_note_cost(struct lruvec *lruvec, bool file, unsigned int nr_pages)
    {
    do {
    unsigned long lrusize;
    + struct pglist_data *pgdat = lruvec_pgdat(lruvec);

    + spin_lock_irq(&pgdat->lru_lock);
    /* Record cost event */
    if (file)
    lruvec->file_cost += nr_pages;
    @@ -293,15 +295,14 @@ void lru_note_cost(struct lruvec *lruvec, bool file, unsigned int nr_pages)
    lruvec->file_cost /= 2;
    lruvec->anon_cost /= 2;
    }
    + spin_unlock_irq(&pgdat->lru_lock);
    } while ((lruvec = parent_lruvec(lruvec)));
    }

    void lru_note_cost_page(struct page *page)
    {
    - spin_lock_irq(&page_pgdat(page)->lru_lock);
    lru_note_cost(mem_cgroup_page_lruvec(page, page_pgdat(page)),
    page_is_file_lru(page), hpage_nr_pages(page));
    - spin_unlock_irq(&page_pgdat(page)->lru_lock);
    }

    static void __activate_page(struct page *page, struct lruvec *lruvec)
    diff --git a/mm/vmscan.c b/mm/vmscan.c
    index ddb29d813d77..c1c4259b4de5 100644
    --- a/mm/vmscan.c
    +++ b/mm/vmscan.c
    @@ -1976,19 +1976,17 @@ static int current_may_throttle(void)
    &stat, false);

    spin_lock_irq(&pgdat->lru_lock);
    -
    move_pages_to_lru(lruvec, &page_list);

    __mod_node_page_state(pgdat, NR_ISOLATED_ANON + file, -nr_taken);
    - lru_note_cost(lruvec, file, stat.nr_pageout);
    item = current_is_kswapd() ? PGSTEAL_KSWAPD : PGSTEAL_DIRECT;
    if (!cgroup_reclaim(sc))
    __count_vm_events(item, nr_reclaimed);
    __count_memcg_events(lruvec_memcg(lruvec), item, nr_reclaimed);
    __count_vm_events(PGSTEAL_ANON + file, nr_reclaimed);
    -
    spin_unlock_irq(&pgdat->lru_lock);

    + lru_note_cost(lruvec, file, stat.nr_pageout);
    mem_cgroup_uncharge_list(&page_list);
    free_unref_page_list(&page_list);

    --
    1.8.3.1
    \
     
     \ /
      Last update: 2020-07-11 03:00    [W:4.037 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site