From: William L. I. I. <wl...@ho...> - 2002-05-28 21:53:38
|
At some point in the past, I wrote: >> Actually, I just thought of something that might be useful in addition, >> which is that it would probably only be necessary to search inside of >> page_zone(page), do you agree? On Tue, May 28, 2002 at 11:34:08PM +0200, Pavel Machek wrote: > Hey, speeding this up is not a top priority. But.. if we can make it > simpler as well ... ;-). Yeah, system startup/shutdown isn't really something to optimize for aside from dodging some worst cases (which is not relevant here). On Tue, May 28, 2002 at 11:34:08PM +0200, Pavel Machek wrote: > #ifdef CONFIG_SOFTWARE_SUSPEND > int is_head_of_free_region(struct page *page) > { > zone_t *zone = page_zone(page); > unsigned long flags; > int order; > list_t *curr; > > /* > * Should not matter as we need quiescent system for > * suspend anyway, but... > */ > spin_lock_irqsave(&zone->lock, flags); > for (order = MAX_ORDER - 1; order >= 0; --order) > list_for_each(curr, &zone->free_area[order].free_list){ > if (!curr) > break; > if (page == list_entry(curr, struct page,list)) { > spin_unlock_irqrestore(&zone->lock,flags); > return 1 << order; > } > } > spin_unlock_irqrestore(&zone->lock, flags); > return 0; > } > #endif /* CONFIG_SOFTWARE_SUSPEND */ > Does that look okay to you? > Pavel This looks good, though OTOH if we have a page from a zone we should know the zone exists, and then maybe the if (!curr) check isn't needed. If that's the case the scary check that almost looks like defensive programming won't be needed at all. Also, is it always expected that this will be a free page? Cheers, Bill |