Line
Link Here
|
0 |
-- a/mm/page_alloc.c.orig 2004-04-29 17:38:14.184021976 -0300 |
0 |
++ b/mm/page_alloc.c 2004-04-29 17:47:27.906843312 -0300 |
Lines 46-51
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
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
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 |
} |