From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Morton Date: Sun, 23 Jan 2005 07:45:17 +0000 Subject: Re: Extend clear_page by an order parameter Message-Id: <20050122234517.376ef3f8.akpm@osdl.org> List-Id: References: <20050108135636.6796419a.davem@davemloft.net> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Christoph Lameter Cc: davem@davemloft.net, hugh@veritas.com, linux-ia64@vger.kernel.org, torvalds@osdl.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Christoph Lameter wrote: > > The zeroing of a page of a arbitrary order in page_alloc.c and in hugetlb.c may benefit from a > clear_page that is capable of zeroing multiple pages at once (and scrubd > too but that is now an independent patch). The following patch extends > clear_page with a second parameter specifying the order of the page to be zeroed to allow an > efficient zeroing of pages. Hope I caught everything.... > Sorry, I take it back. As Paul says: : Wouldn't it be nicer to call the version that takes the order : parameter "clear_pages" and then define clear_page(p) as : clear_pages(p, 0) ? It would make the patch considerably smaller, and our naming is all over the place anyway... > -static inline void prep_zero_page(struct page *page, int order, int gfp_flags) > +void prep_zero_page(struct page *page, unsigned int order, unsigned int gfp_flags) > { > int i; > > BUG_ON((gfp_flags & (__GFP_WAIT | __GFP_HIGHMEM)) = __GFP_HIGHMEM); > + if (!PageHighMem(page)) { > + clear_page(page_address(page), order); > + return; > + } > + > for(i = 0; i < (1 << order); i++) > clear_highpage(page + i); > } I'd have thought that we'd want to make the new clear_pages() handle highmem pages too, if only from a regularity POV. x86 hugetlbpages could use it then, if someone thinks up a fast page-clearer.