History

mm/rmap: Constify the rmap_walk_control argument

The rmap walking functions do not modify the rmap_walk_control, and page_idle_clear_pte_refs() takes advantage of that to move construction of the rmap_walk_control to compile time. This lets us remove an unclean cast.

Matthew Wilcox (Oracle) committed 4 years ago

Commit 84fbbe21 parent 2f031c65 files · +13 −13Browse files

Unified · Split

5 files
  1. include/linux/ksm.h +2 −2
  2. include/linux/rmap.h +2 −2
  3. mm/ksm.c +1 −1
  4. mm/page_idle.c +1 −1
  5. mm/rmap.c +7 −7
include/linux/ksm.h+2−2
@@ -51,7 +51,7 @@ static inline void ksm_exit(struct mm_struct *mm) · 50 unmodified lines
5151 struct page *ksm_might_need_to_copy(struct page *page,
5252 struct vm_area_struct *vma, unsigned long address);
5353
54−void rmap_walk_ksm(struct folio *folio, struct rmap_walk_control *rwc);
54+void rmap_walk_ksm(struct folio *folio, const struct rmap_walk_control *rwc);
5555 void folio_migrate_ksm(struct folio *newfolio, struct folio *folio);
5656
5757 #else /* !CONFIG_KSM */
@@ -79,7 +79,7 @@ static inline struct page *ksm_might_need_to_copy(struct page *page, · 21 unmodified lines
7979 }
8080
8181 static inline void rmap_walk_ksm(struct folio *folio,
82− struct rmap_walk_control *rwc)
82+ const struct rmap_walk_control *rwc)
8383 {
8484 }
8585
include/linux/rmap.h+2−2
@@ -292,8 +292,8 @@ struct rmap_walk_control { · 291 unmodified lines
292292 bool (*invalid_vma)(struct vm_area_struct *vma, void *arg);
293293 };
294294
295−void rmap_walk(struct folio *folio, struct rmap_walk_control *rwc);
296−void rmap_walk_locked(struct folio *folio, struct rmap_walk_control *rwc);
295+void rmap_walk(struct folio *folio, const struct rmap_walk_control *rwc);
296+void rmap_walk_locked(struct folio *folio, const struct rmap_walk_control *rwc);
297297
298298 #else /* !CONFIG_MMU */
299299
mm/ksm.c+1−1
@@ -2588,7 +2588,7 @@ struct page *ksm_might_need_to_copy(struct page *page, · 2587 unmodified lines
25882588 return new_page;
25892589 }
25902590
2591−void rmap_walk_ksm(struct folio *folio, struct rmap_walk_control *rwc)
2591+void rmap_walk_ksm(struct folio *folio, const struct rmap_walk_control *rwc)
25922592 {
25932593 struct stable_node *stable_node;
25942594 struct rmap_item *rmap_item;
mm/page_idle.c+1−1
@@ -103,7 +103,7 @@ static void page_idle_clear_pte_refs(struct page *page) · 102 unmodified lines
103103 if (need_lock && !folio_trylock(folio))
104104 return;
105105
106− rmap_walk(folio, (struct rmap_walk_control *)&rwc);
106+ rmap_walk(folio, &rwc);
107107
108108 if (need_lock)
109109 folio_unlock(folio);
mm/rmap.c+7−7
@@ -2173,7 +2173,7 @@ void __put_anon_vma(struct anon_vma *anon_vma) · 2172 unmodified lines
21732173 }
21742174
21752175 static struct anon_vma *rmap_walk_anon_lock(struct folio *folio,
2176− struct rmap_walk_control *rwc)
2176+ const struct rmap_walk_control *rwc)
21772177 {
21782178 struct anon_vma *anon_vma;
21792179
@@ -2203,8 +2203,8 @@ static struct anon_vma *rmap_walk_anon_lock(struct folio *folio, · 23 unmodified lines
22032203 * Find all the mappings of a page using the mapping pointer and the vma chains
22042204 * contained in the anon_vma struct it points to.
22052205 */
2206−static void rmap_walk_anon(struct folio *folio, struct rmap_walk_control *rwc,
2207− bool locked)
2206+static void rmap_walk_anon(struct folio *folio,
2207+ const struct rmap_walk_control *rwc, bool locked)
22082208 {
22092209 struct anon_vma *anon_vma;
22102210 pgoff_t pgoff_start, pgoff_end;
@@ -2251,8 +2251,8 @@ static void rmap_walk_anon(struct folio *folio, struct rmap_walk_control *rwc, · 40 unmodified lines
22512251 * Find all the mappings of a page using the mapping pointer and the vma chains
22522252 * contained in the address_space struct it points to.
22532253 */
2254−static void rmap_walk_file(struct folio *folio, struct rmap_walk_control *rwc,
2255− bool locked)
2254+static void rmap_walk_file(struct folio *folio,
2255+ const struct rmap_walk_control *rwc, bool locked)
22562256 {
22572257 struct address_space *mapping = folio_mapping(folio);
22582258 pgoff_t pgoff_start, pgoff_end;
@@ -2294,7 +2294,7 @@ done: · 35 unmodified lines
22942294 i_mmap_unlock_read(mapping);
22952295 }
22962296
2297−void rmap_walk(struct folio *folio, struct rmap_walk_control *rwc)
2297+void rmap_walk(struct folio *folio, const struct rmap_walk_control *rwc)
22982298 {
22992299 if (unlikely(folio_test_ksm(folio)))
23002300 rmap_walk_ksm(folio, rwc);
@@ -2305,7 +2305,7 @@ void rmap_walk(struct folio *folio, struct rmap_walk_control *rwc) · 4 unmodified lines
23052305 }
23062306
23072307 /* Like rmap_walk, but caller holds relevant rmap lock */
2308−void rmap_walk_locked(struct folio *folio, struct rmap_walk_control *rwc)
2308+void rmap_walk_locked(struct folio *folio, const struct rmap_walk_control *rwc)
23092309 {
23102310 /* no ksm support for now */
23112311 VM_BUG_ON_FOLIO(folio_test_ksm(folio), folio);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t