@@ -164,15 +164,15 @@ void __init free_bootmem_late(unsigned long physaddr, unsigned long size)
164164 end = PFN_DOWN (physaddr + size );
165165
166166 for (; cursor < end ; cursor ++ ) {
167- __free_pages_bootmem (pfn_to_page (cursor ), 0 );
167+ __free_pages_bootmem (pfn_to_page (cursor ), cursor , 0 );
168168 totalram_pages ++ ;
169169 }
170170}
171171
172172static unsigned long __init free_all_bootmem_core (bootmem_data_t * bdata )
173173{
174174 struct page * page ;
175- unsigned long * map , start , end , pages , count = 0 ;
175+ unsigned long * map , start , end , pages , cur , count = 0 ;
176176
177177 if (!bdata -> node_bootmem_map )
178178 return 0 ;
@@ -210,17 +210,17 @@ static unsigned long __init free_all_bootmem_core(bootmem_data_t *bdata)
210210 if (IS_ALIGNED (start , BITS_PER_LONG ) && vec == ~0UL ) {
211211 int order = ilog2 (BITS_PER_LONG );
212212
213- __free_pages_bootmem (pfn_to_page (start ), order );
213+ __free_pages_bootmem (pfn_to_page (start ), start , order );
214214 count += BITS_PER_LONG ;
215215 start += BITS_PER_LONG ;
216216 } else {
217- unsigned long cur = start ;
217+ cur = start ;
218218
219219 start = ALIGN (start + 1 , BITS_PER_LONG );
220220 while (vec && cur != start ) {
221221 if (vec & 1 ) {
222222 page = pfn_to_page (cur );
223- __free_pages_bootmem (page , 0 );
223+ __free_pages_bootmem (page , cur , 0 );
224224 count ++ ;
225225 }
226226 vec >>= 1 ;
@@ -229,12 +229,13 @@ static unsigned long __init free_all_bootmem_core(bootmem_data_t *bdata)
229229 }
230230 }
231231
232+ cur = bdata -> node_min_pfn ;
232233 page = virt_to_page (bdata -> node_bootmem_map );
233234 pages = bdata -> node_low_pfn - bdata -> node_min_pfn ;
234235 pages = bootmem_bootmap_pages (pages );
235236 count += pages ;
236237 while (pages -- )
237- __free_pages_bootmem (page ++ , 0 );
238+ __free_pages_bootmem (page ++ , cur ++ , 0 );
238239
239240 bdebug ("nid=%td released=%lx\n" , bdata - bootmem_node_data , count );
240241
0 commit comments