Message ID | 1594429136-20002-6-git-send-email-alex.shi@linux.alibaba.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | per memcg lru_lock | expand |
Hi Kirill & Matthew, Is there any concern from for the THP involved patches? Thanks Alex 在 2020/7/11 上午8:58, Alex Shi 写道: > The func is only used in huge_memory.c, defining it in other file with a > CONFIG_TRANSPARENT_HUGEPAGE macro restrict just looks weird. > > Let's move it THP. And make it static as Hugh Dickin suggested. > > Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Johannes Weiner <hannes@cmpxchg.org> > Cc: Matthew Wilcox <willy@infradead.org> > Cc: Hugh Dickins <hughd@google.com> > Cc: linux-kernel@vger.kernel.org > Cc: linux-mm@kvack.org > --- > include/linux/swap.h | 2 -- > mm/huge_memory.c | 30 ++++++++++++++++++++++++++++++ > mm/swap.c | 33 --------------------------------- > 3 files changed, 30 insertions(+), 35 deletions(-) > > diff --git a/include/linux/swap.h b/include/linux/swap.h > index 5b3216ba39a9..2c29399b29a0 100644 > --- a/include/linux/swap.h > +++ b/include/linux/swap.h > @@ -339,8 +339,6 @@ extern void lru_note_cost(struct lruvec *lruvec, bool file, > unsigned int nr_pages); > extern void lru_note_cost_page(struct page *); > extern void lru_cache_add(struct page *); > -extern void lru_add_page_tail(struct page *page, struct page *page_tail, > - struct lruvec *lruvec, struct list_head *head); > extern void activate_page(struct page *); > extern void mark_page_accessed(struct page *); > extern void lru_add_drain(void); > diff --git a/mm/huge_memory.c b/mm/huge_memory.c > index 78c84bee7e29..9e050b13f597 100644 > --- a/mm/huge_memory.c > +++ b/mm/huge_memory.c > @@ -2340,6 +2340,36 @@ static void remap_page(struct page *page) > } > } > > +static void lru_add_page_tail(struct page *page, struct page *page_tail, > + struct lruvec *lruvec, struct list_head *list) > +{ > + VM_BUG_ON_PAGE(!PageHead(page), page); > + VM_BUG_ON_PAGE(PageCompound(page_tail), page); > + VM_BUG_ON_PAGE(PageLRU(page_tail), page); > + lockdep_assert_held(&lruvec_pgdat(lruvec)->lru_lock); > + > + if (!list) > + SetPageLRU(page_tail); > + > + if (likely(PageLRU(page))) > + list_add_tail(&page_tail->lru, &page->lru); > + else if (list) { > + /* page reclaim is reclaiming a huge page */ > + get_page(page_tail); > + list_add_tail(&page_tail->lru, list); > + } else { > + /* > + * Head page has not yet been counted, as an hpage, > + * so we must account for each subpage individually. > + * > + * Put page_tail on the list at the correct position > + * so they all end up in order. > + */ > + add_page_to_lru_list_tail(page_tail, lruvec, > + page_lru(page_tail)); > + } > +} > + > static void __split_huge_page_tail(struct page *head, int tail, > struct lruvec *lruvec, struct list_head *list) > { > diff --git a/mm/swap.c b/mm/swap.c > index a82efc33411f..7701d855873d 100644 > --- a/mm/swap.c > +++ b/mm/swap.c > @@ -933,39 +933,6 @@ void __pagevec_release(struct pagevec *pvec) > } > EXPORT_SYMBOL(__pagevec_release); > > -#ifdef CONFIG_TRANSPARENT_HUGEPAGE > -/* used by __split_huge_page_refcount() */ > -void lru_add_page_tail(struct page *page, struct page *page_tail, > - struct lruvec *lruvec, struct list_head *list) > -{ > - VM_BUG_ON_PAGE(!PageHead(page), page); > - VM_BUG_ON_PAGE(PageCompound(page_tail), page); > - VM_BUG_ON_PAGE(PageLRU(page_tail), page); > - lockdep_assert_held(&lruvec_pgdat(lruvec)->lru_lock); > - > - if (!list) > - SetPageLRU(page_tail); > - > - if (likely(PageLRU(page))) > - list_add_tail(&page_tail->lru, &page->lru); > - else if (list) { > - /* page reclaim is reclaiming a huge page */ > - get_page(page_tail); > - list_add_tail(&page_tail->lru, list); > - } else { > - /* > - * Head page has not yet been counted, as an hpage, > - * so we must account for each subpage individually. > - * > - * Put page_tail on the list at the correct position > - * so they all end up in order. > - */ > - add_page_to_lru_list_tail(page_tail, lruvec, > - page_lru(page_tail)); > - } > -} > -#endif /* CONFIG_TRANSPARENT_HUGEPAGE */ > - > static void __pagevec_lru_add_fn(struct page *page, struct lruvec *lruvec, > void *arg) > { >
On Thu, Jul 16, 2020 at 04:59:48PM +0800, Alex Shi wrote: > Hi Kirill & Matthew, > > Is there any concern from for the THP involved patches? It is mechanical move. I don't see a problem.
在 2020/7/16 下午9:17, Kirill A. Shutemov 写道: > On Thu, Jul 16, 2020 at 04:59:48PM +0800, Alex Shi wrote: >> Hi Kirill & Matthew, >> >> Is there any concern from for the THP involved patches? > > It is mechanical move. I don't see a problem. > Many thanks! Kirill, Do you mind to give a reviewed-by? And rre they ok for patch 6th,7th and 14th? Thanks a lot! Alex
On Fri, Jul 17, 2020 at 01:13:21PM +0800, Alex Shi wrote: > > > 在 2020/7/16 下午9:17, Kirill A. Shutemov 写道: > > On Thu, Jul 16, 2020 at 04:59:48PM +0800, Alex Shi wrote: > >> Hi Kirill & Matthew, > >> > >> Is there any concern from for the THP involved patches? > > > > It is mechanical move. I don't see a problem. > > > > Many thanks! Kirill, > > Do you mind to give a reviewed-by? Reviewed-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
diff --git a/include/linux/swap.h b/include/linux/swap.h index 5b3216ba39a9..2c29399b29a0 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -339,8 +339,6 @@ extern void lru_note_cost(struct lruvec *lruvec, bool file, unsigned int nr_pages); extern void lru_note_cost_page(struct page *); extern void lru_cache_add(struct page *); -extern void lru_add_page_tail(struct page *page, struct page *page_tail, - struct lruvec *lruvec, struct list_head *head); extern void activate_page(struct page *); extern void mark_page_accessed(struct page *); extern void lru_add_drain(void); diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 78c84bee7e29..9e050b13f597 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2340,6 +2340,36 @@ static void remap_page(struct page *page) } } +static void lru_add_page_tail(struct page *page, struct page *page_tail, + struct lruvec *lruvec, struct list_head *list) +{ + VM_BUG_ON_PAGE(!PageHead(page), page); + VM_BUG_ON_PAGE(PageCompound(page_tail), page); + VM_BUG_ON_PAGE(PageLRU(page_tail), page); + lockdep_assert_held(&lruvec_pgdat(lruvec)->lru_lock); + + if (!list) + SetPageLRU(page_tail); + + if (likely(PageLRU(page))) + list_add_tail(&page_tail->lru, &page->lru); + else if (list) { + /* page reclaim is reclaiming a huge page */ + get_page(page_tail); + list_add_tail(&page_tail->lru, list); + } else { + /* + * Head page has not yet been counted, as an hpage, + * so we must account for each subpage individually. + * + * Put page_tail on the list at the correct position + * so they all end up in order. + */ + add_page_to_lru_list_tail(page_tail, lruvec, + page_lru(page_tail)); + } +} + static void __split_huge_page_tail(struct page *head, int tail, struct lruvec *lruvec, struct list_head *list) { diff --git a/mm/swap.c b/mm/swap.c index a82efc33411f..7701d855873d 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -933,39 +933,6 @@ void __pagevec_release(struct pagevec *pvec) } EXPORT_SYMBOL(__pagevec_release); -#ifdef CONFIG_TRANSPARENT_HUGEPAGE -/* used by __split_huge_page_refcount() */ -void lru_add_page_tail(struct page *page, struct page *page_tail, - struct lruvec *lruvec, struct list_head *list) -{ - VM_BUG_ON_PAGE(!PageHead(page), page); - VM_BUG_ON_PAGE(PageCompound(page_tail), page); - VM_BUG_ON_PAGE(PageLRU(page_tail), page); - lockdep_assert_held(&lruvec_pgdat(lruvec)->lru_lock); - - if (!list) - SetPageLRU(page_tail); - - if (likely(PageLRU(page))) - list_add_tail(&page_tail->lru, &page->lru); - else if (list) { - /* page reclaim is reclaiming a huge page */ - get_page(page_tail); - list_add_tail(&page_tail->lru, list); - } else { - /* - * Head page has not yet been counted, as an hpage, - * so we must account for each subpage individually. - * - * Put page_tail on the list at the correct position - * so they all end up in order. - */ - add_page_to_lru_list_tail(page_tail, lruvec, - page_lru(page_tail)); - } -} -#endif /* CONFIG_TRANSPARENT_HUGEPAGE */ - static void __pagevec_lru_add_fn(struct page *page, struct lruvec *lruvec, void *arg) {
The func is only used in huge_memory.c, defining it in other file with a CONFIG_TRANSPARENT_HUGEPAGE macro restrict just looks weird. Let's move it THP. And make it static as Hugh Dickin suggested. Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Matthew Wilcox <willy@infradead.org> Cc: Hugh Dickins <hughd@google.com> Cc: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org --- include/linux/swap.h | 2 -- mm/huge_memory.c | 30 ++++++++++++++++++++++++++++++ mm/swap.c | 33 --------------------------------- 3 files changed, 30 insertions(+), 35 deletions(-)