diff options
author | Andrey Ryabinin <aryabinin@virtuozzo.com> | 2019-03-05 18:49:39 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-03-06 00:07:21 -0500 |
commit | f4b7e272b5c0425915e2115068e0a5a20a3a628e (patch) | |
tree | 7b5894a4cc657a7606aa183187392b7eae7e22bc /mm/page_idle.c | |
parent | a7ca12f9d905e7437dd3beb9cbb8e85bc2b991f4 (diff) |
mm: remove zone_lru_lock() function, access ->lru_lock directly
We have common pattern to access lru_lock from a page pointer:
zone_lru_lock(page_zone(page))
Which is silly, because it unfolds to this:
&NODE_DATA(page_to_nid(page))->node_zones[page_zonenum(page)]->zone_pgdat->lru_lock
while we can simply do
&NODE_DATA(page_to_nid(page))->lru_lock
Remove zone_lru_lock() function, since it's only complicate things. Use
'page_pgdat(page)->lru_lock' pattern instead.
[aryabinin@virtuozzo.com: a slightly better version of __split_huge_page()]
Link: http://lkml.kernel.org/r/20190301121651.7741-1-aryabinin@virtuozzo.com
Link: http://lkml.kernel.org/r/20190228083329.31892-2-aryabinin@virtuozzo.com
Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Acked-by: Mel Gorman <mgorman@techsingularity.net>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Rik van Riel <riel@surriel.com>
Cc: William Kucharski <william.kucharski@oracle.com>
Cc: John Hubbard <jhubbard@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/page_idle.c')
-rw-r--r-- | mm/page_idle.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/mm/page_idle.c b/mm/page_idle.c index b9e4b42b33ab..0b39ec0c945c 100644 --- a/mm/page_idle.c +++ b/mm/page_idle.c | |||
@@ -31,7 +31,7 @@ | |||
31 | static struct page *page_idle_get_page(unsigned long pfn) | 31 | static struct page *page_idle_get_page(unsigned long pfn) |
32 | { | 32 | { |
33 | struct page *page; | 33 | struct page *page; |
34 | struct zone *zone; | 34 | pg_data_t *pgdat; |
35 | 35 | ||
36 | if (!pfn_valid(pfn)) | 36 | if (!pfn_valid(pfn)) |
37 | return NULL; | 37 | return NULL; |
@@ -41,13 +41,13 @@ static struct page *page_idle_get_page(unsigned long pfn) | |||
41 | !get_page_unless_zero(page)) | 41 | !get_page_unless_zero(page)) |
42 | return NULL; | 42 | return NULL; |
43 | 43 | ||
44 | zone = page_zone(page); | 44 | pgdat = page_pgdat(page); |
45 | spin_lock_irq(zone_lru_lock(zone)); | 45 | spin_lock_irq(&pgdat->lru_lock); |
46 | if (unlikely(!PageLRU(page))) { | 46 | if (unlikely(!PageLRU(page))) { |
47 | put_page(page); | 47 | put_page(page); |
48 | page = NULL; | 48 | page = NULL; |
49 | } | 49 | } |
50 | spin_unlock_irq(zone_lru_lock(zone)); | 50 | spin_unlock_irq(&pgdat->lru_lock); |
51 | return page; | 51 | return page; |
52 | } | 52 | } |
53 | 53 | ||