LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Mike Rapoport <rppt@kernel.org> To: linux-mm@kvack.org Cc: Andrew Morton <akpm@linux-foundation.org>, Andy Lutomirski <luto@kernel.org>, Dave Hansen <dave.hansen@linux.intel.com>, Ira Weiny <ira.weiny@intel.com>, Kees Cook <keescook@chromium.org>, Mike Rapoport <rppt@kernel.org>, Mike Rapoport <rppt@linux.ibm.com>, Peter Zijlstra <peterz@infradead.org>, Rick Edgecombe <rick.p.edgecombe@intel.com>, Vlastimil Babka <vbabka@suse.cz>, x86@kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 1/4] list: Support getting most recent element in list_lru Date: Mon, 23 Aug 2021 16:25:10 +0300 [thread overview] Message-ID: <20210823132513.15836-2-rppt@kernel.org> (raw) In-Reply-To: <20210823132513.15836-1-rppt@kernel.org> From: Rick Edgecombe <rick.p.edgecombe@intel.com> In future patches, some functionality will use list_lru that also needs to keep track of the most recently used element on a node. Since this information is already contained within list_lru, add a function to get it so that an additional list is not needed in the caller. Do not support memcg aware list_lru's since it is not needed by the intended caller. Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com> --- include/linux/list_lru.h | 13 +++++++++++++ mm/list_lru.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/include/linux/list_lru.h b/include/linux/list_lru.h index 1b5fceb565df..08e07c19fd13 100644 --- a/include/linux/list_lru.h +++ b/include/linux/list_lru.h @@ -103,6 +103,19 @@ bool list_lru_add(struct list_lru *lru, struct list_head *item); */ bool list_lru_del(struct list_lru *lru, struct list_head *item); +/** + * list_lru_get_mru: gets and removes the tail from one of the node lists + * @list_lru: the lru pointer + * @nid: the node id + * + * This function removes the most recently added item from one of the node + * id specified. This function should not be used if the list_lru is memcg + * aware. + * + * Return value: The element removed + */ +struct list_head *list_lru_get_mru(struct list_lru *lru, int nid); + /** * list_lru_count_one: return the number of objects currently held by @lru * @lru: the lru pointer. diff --git a/mm/list_lru.c b/mm/list_lru.c index cd58790d0fb3..c1bec58168e1 100644 --- a/mm/list_lru.c +++ b/mm/list_lru.c @@ -156,6 +156,34 @@ bool list_lru_del(struct list_lru *lru, struct list_head *item) } EXPORT_SYMBOL_GPL(list_lru_del); +struct list_head *list_lru_get_mru(struct list_lru *lru, int nid) +{ + struct list_lru_node *nlru = &lru->node[nid]; + struct list_lru_one *l = &nlru->lru; + struct list_head *ret; + + /* This function does not attempt to search through the memcg lists */ + if (list_lru_memcg_aware(lru)) { + WARN_ONCE(1, "list_lru: %s not supported on memcg aware list_lrus", __func__); + return NULL; + } + + spin_lock(&nlru->lock); + if (list_empty(&l->list)) { + ret = NULL; + } else { + /* Get tail */ + ret = l->list.prev; + list_del_init(ret); + + l->nr_items--; + nlru->nr_items--; + } + spin_unlock(&nlru->lock); + + return ret; +} + void list_lru_isolate(struct list_lru_one *list, struct list_head *item) { list_del_init(item); -- 2.28.0
next prev parent reply other threads:[~2021-08-23 13:25 UTC|newest] Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-08-23 13:25 [RFC PATCH 0/4] mm/page_alloc: cache pte-mapped allocations Mike Rapoport 2021-08-23 13:25 ` Mike Rapoport [this message] 2021-08-23 13:25 ` [RFC PATCH 2/4] list: Support list head not in object for list_lru Mike Rapoport 2021-08-23 13:25 ` [RFC PATCH 3/4] mm/page_alloc: introduce __GFP_PTE_MAPPED flag to allocate pte-mapped pages Mike Rapoport 2021-08-23 20:29 ` Edgecombe, Rick P 2021-08-24 13:02 ` Mike Rapoport 2021-08-24 16:38 ` Edgecombe, Rick P 2021-08-24 16:54 ` Mike Rapoport 2021-08-24 17:23 ` Edgecombe, Rick P 2021-08-24 17:37 ` Mike Rapoport 2021-08-24 16:12 ` Vlastimil Babka 2021-08-25 8:43 ` David Hildenbrand 2021-08-23 13:25 ` [RFC PATCH 4/4] x86/mm: write protect (most) page tables Mike Rapoport 2021-08-23 20:08 ` Edgecombe, Rick P 2021-08-23 23:50 ` Dave Hansen 2021-08-24 3:34 ` Andy Lutomirski 2021-08-25 14:59 ` Dave Hansen 2021-08-24 13:32 ` Mike Rapoport 2021-08-25 8:38 ` David Hildenbrand 2021-08-26 8:02 ` Mike Rapoport 2021-08-26 9:01 ` Vlastimil Babka [not found] ` <FB6C09CD-9CEA-4FE8-B179-98DB63EBDD68@gmail.com> 2021-08-24 5:34 ` Nadav Amit 2021-08-24 13:36 ` Mike Rapoport 2021-08-23 20:02 ` [RFC PATCH 0/4] mm/page_alloc: cache pte-mapped allocations Edgecombe, Rick P 2021-08-24 13:03 ` Mike Rapoport 2021-08-24 16:09 ` Vlastimil Babka 2021-08-29 7:06 ` Mike Rapoport
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210823132513.15836-2-rppt@kernel.org \ --to=rppt@kernel.org \ --cc=akpm@linux-foundation.org \ --cc=dave.hansen@linux.intel.com \ --cc=ira.weiny@intel.com \ --cc=keescook@chromium.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=luto@kernel.org \ --cc=peterz@infradead.org \ --cc=rick.p.edgecombe@intel.com \ --cc=rppt@linux.ibm.com \ --cc=vbabka@suse.cz \ --cc=x86@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).