xref: /linux-6.15/include/linux/mm_inline.h (revision 87c2ce3b)
1 
2 static inline void
3 add_page_to_active_list(struct zone *zone, struct page *page)
4 {
5 	list_add(&page->lru, &zone->active_list);
6 	zone->nr_active++;
7 }
8 
9 static inline void
10 add_page_to_inactive_list(struct zone *zone, struct page *page)
11 {
12 	list_add(&page->lru, &zone->inactive_list);
13 	zone->nr_inactive++;
14 }
15 
16 static inline void
17 del_page_from_active_list(struct zone *zone, struct page *page)
18 {
19 	list_del(&page->lru);
20 	zone->nr_active--;
21 }
22 
23 static inline void
24 del_page_from_inactive_list(struct zone *zone, struct page *page)
25 {
26 	list_del(&page->lru);
27 	zone->nr_inactive--;
28 }
29 
30 static inline void
31 del_page_from_lru(struct zone *zone, struct page *page)
32 {
33 	list_del(&page->lru);
34 	if (PageActive(page)) {
35 		ClearPageActive(page);
36 		zone->nr_active--;
37 	} else {
38 		zone->nr_inactive--;
39 	}
40 }
41 
42 /*
43  * Isolate one page from the LRU lists.
44  *
45  * - zone->lru_lock must be held
46  */
47 static inline int __isolate_lru_page(struct page *page)
48 {
49 	if (unlikely(!TestClearPageLRU(page)))
50 		return 0;
51 
52 	if (get_page_testone(page)) {
53 		/*
54 		 * It is being freed elsewhere
55 		 */
56 		__put_page(page);
57 		SetPageLRU(page);
58 		return -ENOENT;
59 	}
60 
61 	return 1;
62 }
63