Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 356572
b: refs/heads/master
c: 4468b8f
h: refs/heads/master
v: v3
  • Loading branch information
Mel Gorman authored and Linus Torvalds committed Feb 24, 2013
1 parent 42c5f61 commit 758029e
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6acc8b02517d7063b25490b26215834bd2f363c8
refs/heads/master: 4468b8f1e2d32ce79ef4bcb8e00d7e88627f1c3a
21 changes: 5 additions & 16 deletions trunk/include/linux/mm.h
Original file line number Diff line number Diff line change
Expand Up @@ -677,25 +677,14 @@ static inline int page_last_nid(struct page *page)
return (page->flags >> LAST_NID_PGSHIFT) & LAST_NID_MASK;
}

static inline int page_xchg_last_nid(struct page *page, int nid)
{
unsigned long old_flags, flags;
int last_nid;

do {
old_flags = flags = page->flags;
last_nid = page_last_nid(page);

flags &= ~(LAST_NID_MASK << LAST_NID_PGSHIFT);
flags |= (nid & LAST_NID_MASK) << LAST_NID_PGSHIFT;
} while (unlikely(cmpxchg(&page->flags, old_flags, flags) != old_flags));

return last_nid;
}
extern int page_xchg_last_nid(struct page *page, int nid);

static inline void reset_page_last_nid(struct page *page)
{
page_xchg_last_nid(page, (1 << LAST_NID_SHIFT) - 1);
int nid = (1 << LAST_NID_SHIFT) - 1;

page->flags &= ~(LAST_NID_MASK << LAST_NID_PGSHIFT);
page->flags |= (nid & LAST_NID_MASK) << LAST_NID_PGSHIFT;
}
#endif /* LAST_NID_NOT_IN_PAGE_FLAGS */
#else
Expand Down
20 changes: 19 additions & 1 deletion trunk/mm/mmzone.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* linux/mm/mmzone.c
*
* management codes for pgdats and zones.
* management codes for pgdats, zones and page flags
*/


Expand Down Expand Up @@ -96,3 +96,21 @@ void lruvec_init(struct lruvec *lruvec)
for_each_lru(lru)
INIT_LIST_HEAD(&lruvec->lists[lru]);
}

#if defined(CONFIG_NUMA_BALANCING) && !defined(LAST_NID_NOT_IN_PAGE_FLAGS)
int page_xchg_last_nid(struct page *page, int nid)
{
unsigned long old_flags, flags;
int last_nid;

do {
old_flags = flags = page->flags;
last_nid = page_last_nid(page);

flags &= ~(LAST_NID_MASK << LAST_NID_PGSHIFT);
flags |= (nid & LAST_NID_MASK) << LAST_NID_PGSHIFT;
} while (unlikely(cmpxchg(&page->flags, old_flags, flags) != old_flags));

return last_nid;
}
#endif

0 comments on commit 758029e

Please sign in to comment.