Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 198256
b: refs/heads/master
c: ec95f53
h: refs/heads/master
v: v3
  • Loading branch information
KOSAKI Motohiro authored and Linus Torvalds committed May 25, 2010
1 parent eca6786 commit d203568
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 20 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: 5f53e76299ceebd68bdf9495e8ff80db77711236
refs/heads/master: ec95f53aa6ed62ba68660cb19c8474ebe9025cce
40 changes: 21 additions & 19 deletions trunk/mm/page_alloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -620,20 +620,23 @@ static void free_one_page(struct zone *zone, struct page *page, int order,
spin_unlock(&zone->lock);
}

static void __free_pages_ok(struct page *page, unsigned int order)
static bool free_pages_prepare(struct page *page, unsigned int order)
{
unsigned long flags;
int i;
int bad = 0;
int wasMlocked = __TestClearPageMlocked(page);

trace_mm_page_free_direct(page, order);
kmemcheck_free_shadow(page, order);

for (i = 0 ; i < (1 << order) ; ++i)
bad += free_pages_check(page + i);
for (i = 0; i < (1 << order); i++) {
struct page *pg = page + i;

if (PageAnon(pg))
pg->mapping = NULL;
bad += free_pages_check(pg);
}
if (bad)
return;
return false;

if (!PageHighMem(page)) {
debug_check_no_locks_freed(page_address(page),PAGE_SIZE<<order);
Expand All @@ -643,6 +646,17 @@ static void __free_pages_ok(struct page *page, unsigned int order)
arch_free_page(page, order);
kernel_map_pages(page, 1 << order, 0);

return true;
}

static void __free_pages_ok(struct page *page, unsigned int order)
{
unsigned long flags;
int wasMlocked = __TestClearPageMlocked(page);

if (!free_pages_prepare(page, order))
return;

local_irq_save(flags);
if (unlikely(wasMlocked))
free_page_mlock(page);
Expand Down Expand Up @@ -1128,21 +1142,9 @@ void free_hot_cold_page(struct page *page, int cold)
int migratetype;
int wasMlocked = __TestClearPageMlocked(page);

trace_mm_page_free_direct(page, 0);
kmemcheck_free_shadow(page, 0);

if (PageAnon(page))
page->mapping = NULL;
if (free_pages_check(page))
if (!free_pages_prepare(page, 0))
return;

if (!PageHighMem(page)) {
debug_check_no_locks_freed(page_address(page), PAGE_SIZE);
debug_check_no_obj_freed(page_address(page), PAGE_SIZE);
}
arch_free_page(page, 0);
kernel_map_pages(page, 1, 0);

migratetype = get_pageblock_migratetype(page);
set_page_private(page, migratetype);
local_irq_save(flags);
Expand Down

0 comments on commit d203568

Please sign in to comment.