On 09/25/2013 04:14 PM, Srivatsa S. Bhat wrote: > @@ -605,16 +713,22 @@ static inline void __free_one_page(struct page *page, > buddy_idx = __find_buddy_index(combined_idx, order + 1); > higher_buddy = higher_page + (buddy_idx - combined_idx); > if (page_is_buddy(higher_page, higher_buddy, order + 1)) { > - list_add_tail(&page->lru, > - &zone->free_area[order].free_list[migratetype].list); > + > + /* > + * Implementing an add_to_freelist_tail() won't be > + * very useful because both of them (almost) add to > + * the tail within the region. So we could potentially > + * switch off this entire "is next-higher buddy free?" > + * logic when memory regions are used. > + */ > + add_to_freelist(page, &area->free_list[migratetype]); > goto out; > } > } Commit 6dda9d55b says that this had some discrete performance gains. It's a bummer that this deoptimizes it, and I think that (expected) performance degredation at least needs to be referenced _somewhere_. I also find it very hard to take code seriously which stuff like this: > +#ifdef CONFIG_DEBUG_PAGEALLOC > + WARN(region->nr_free == 0, "%s: nr_free messed up\n", __func__); > +#endif nine times. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>