|
Lines 46-51
static int lower_zone_reserve_ratio[MAX_
Link Here
|
| 46 |
|
46 |
|
| 47 |
int vm_gfp_debug = 0; |
47 |
int vm_gfp_debug = 0; |
| 48 |
|
48 |
|
|
|
49 |
static void FASTCALL(__free_pages_ok (struct page *page, unsigned int order)); |
| 50 |
|
| 51 |
static spinlock_t free_pages_ok_no_irq_lock = SPIN_LOCK_UNLOCKED; |
| 52 |
struct page * free_pages_ok_no_irq_head; |
| 53 |
|
| 54 |
static void do_free_pages_ok_no_irq(void * arg) |
| 55 |
{ |
| 56 |
struct page * page, * __page; |
| 57 |
|
| 58 |
spin_lock_irq(&free_pages_ok_no_irq_lock); |
| 59 |
|
| 60 |
page = free_pages_ok_no_irq_head; |
| 61 |
free_pages_ok_no_irq_head = NULL; |
| 62 |
|
| 63 |
spin_unlock_irq(&free_pages_ok_no_irq_lock); |
| 64 |
|
| 65 |
while (page) { |
| 66 |
__page = page; |
| 67 |
page = page->next_hash; |
| 68 |
__free_pages_ok(__page, __page->index); |
| 69 |
} |
| 70 |
} |
| 71 |
|
| 72 |
static struct tq_struct free_pages_ok_no_irq_task = { |
| 73 |
.routine = do_free_pages_ok_no_irq, |
| 74 |
}; |
| 75 |
|
| 76 |
|
| 49 |
/* |
77 |
/* |
| 50 |
* Temporary debugging check. |
78 |
* Temporary debugging check. |
| 51 |
*/ |
79 |
*/ |
|
Lines 81-87
int vm_gfp_debug = 0;
Link Here
|
| 81 |
* -- wli |
109 |
* -- wli |
| 82 |
*/ |
110 |
*/ |
| 83 |
|
111 |
|
| 84 |
static void FASTCALL(__free_pages_ok (struct page *page, unsigned int order)); |
|
|
| 85 |
static void __free_pages_ok (struct page *page, unsigned int order) |
112 |
static void __free_pages_ok (struct page *page, unsigned int order) |
| 86 |
{ |
113 |
{ |
| 87 |
unsigned long index, page_idx, mask, flags; |
114 |
unsigned long index, page_idx, mask, flags; |
|
Lines 94-101
static void __free_pages_ok (struct page
Link Here
|
| 94 |
* a reference to a page in order to pin it for io. -ben |
121 |
* a reference to a page in order to pin it for io. -ben |
| 95 |
*/ |
122 |
*/ |
| 96 |
if (PageLRU(page)) { |
123 |
if (PageLRU(page)) { |
| 97 |
if (unlikely(in_interrupt())) |
124 |
if (unlikely(in_interrupt())) { |
| 98 |
BUG(); |
125 |
unsigned long flags; |
|
|
126 |
|
| 127 |
spin_lock_irqsave(&free_pages_ok_no_irq_lock, flags); |
| 128 |
page->next_hash = free_pages_ok_no_irq_head; |
| 129 |
free_pages_ok_no_irq_head = page; |
| 130 |
page->index = order; |
| 131 |
|
| 132 |
spin_unlock_irqrestore(&free_pages_ok_no_irq_lock, flags); |
| 133 |
|
| 134 |
schedule_task(&free_pages_ok_no_irq_task); |
| 135 |
return; |
| 136 |
} |
| 137 |
|
| 99 |
lru_cache_del(page); |
138 |
lru_cache_del(page); |
| 100 |
} |
139 |
} |
| 101 |
|
140 |
|