--- linux-2.6.10.orig/mm/page_alloc.c 2004-12-25 05:33:51.000000000 +0800 +++ linux-2.6.10/mm/page_alloc.c 2005-01-21 11:46:58.000000000 +0800 @@ -788,7 +788,22 @@ fastcall void __free_pages(struct page *page, unsigned int order) { - if (!PageReserved(page) && put_page_testzero(page)) { + if (!PageReserved(page)) { +#ifdef CONFIG_MMU + if (!put_page_testzero(page)) + return; +#else + int i, result = 1; + + /* + * We need to de-reference all the pages for this order -- see set_page_refs() + */ + for (i = 0; i < (1 << order); i++) + result &= put_page_testzero(page+i); + if (!result) + BUG(); +#endif /* CONFIG_MMU */ + if (order == 0) free_hot_page(page); else
On Fri, 21 Jan 2005 11:40:52 +0800, zhan rongkai <[EMAIL PROTECTED]> wrote: > --- linux-2.6.10.orig/mm/page_alloc.c 2004-12-25 05:33:51.000000000 +0800 > +++ linux-2.6.10/mm/page_alloc.c 2005-01-21 11:43:44.000000000 +0800 > @@ -788,7 +788,22 @@ > > fastcall void __free_pages(struct page *page, unsigned int order) > { > - if (!PageReserved(page) && put_page_testzero(page)) { > + if (!PageReserved(page)) { > +#ifdef CONFIG_MMU > + if (!put_page_testzero(page)) > + return; > +#else > + int i, result = 1; > + > + /* > + * We need to de-reference all the pages for this order -- see > set_page_refs() > + */ > + for (i = 0; i < (1 << order); i++) > + result &= put_page_testzero(page+i); > + if (!result) > + BUG(); > +#endif /* CONFIG_MMU */ > + > if (order == 0) > free_hot_page(page); > else > > -- > Rongkai Zhan > -- Rongkai Zhan - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/