Re: [PATCH] [4/13] Prepare page_alloc for the maskable allocator

From: Sam Ravnborg
Date: Fri Mar 07 2008 - 13:19:38 EST


Hi Andi.

> Index: linux/mm/internal.h
> ===================================================================
> --- linux.orig/mm/internal.h
> +++ linux/mm/internal.h
> @@ -12,6 +12,7 @@
> #define __MM_INTERNAL_H
>
> #include <linux/mm.h>
> +#include <linux/memcontrol.h>
>
> static inline void set_page_count(struct page *page, int v)
> {
> @@ -48,6 +49,72 @@ static inline unsigned long page_order(s
> return page_private(page);
> }
>
> +extern void bad_page(struct page *page);
> +
> +static inline int free_pages_check(struct page *page, unsigned long addflags)
> +{
> + if (unlikely(page_mapcount(page) |
> + (page->mapping != NULL) |
> + (page_get_page_cgroup(page) != NULL) |
> + (page_count(page) != 0) |
> + (page->flags & (
> + addflags |
> + 1 << PG_lru |
> + 1 << PG_private |
> + 1 << PG_locked |
> + 1 << PG_active |
> + 1 << PG_slab |
> + 1 << PG_swapcache |
> + 1 << PG_writeback |
> + 1 << PG_reserved |
> + 1 << PG_buddy))))
> + bad_page(page);
> + if (PageDirty(page))
> + __ClearPageDirty(page);
> + /*
> + * For now, we report if PG_reserved was found set, but do not
> + * clear it, and do not free the page. But we shall soon need
> + * to do more, for when the ZERO_PAGE count wraps negative.
> + */
> + return PageReserved(page);
> +}
Looks a bit too big for an inline in a header (~9 lines of code)?

> +
> +/* Set up a struc page for business during allocation */
> +static inline int page_prep_struct(struct page *page)
> +{
> + if (unlikely(page_mapcount(page) |
> + (page->mapping != NULL) |
> + (page_get_page_cgroup(page) != NULL) |
> + (page_count(page) != 0) |
> + (page->flags & (
> + 1 << PG_lru |
> + 1 << PG_private |
> + 1 << PG_locked |
> + 1 << PG_active |
> + 1 << PG_dirty |
> + 1 << PG_slab |
> + 1 << PG_swapcache |
> + 1 << PG_writeback |
> + 1 << PG_reserved |
> + 1 << PG_buddy))))
> + bad_page(page);
> +
> + /*
> + * For now, we report if PG_reserved was found set, but do not
> + * clear it, and do not allocate the page: as a safety net.
> + */
> + if (PageReserved(page))
> + return 1;
> +
> + page->flags &= ~(1 << PG_uptodate | 1 << PG_error | 1 << PG_readahead |
> + 1 << PG_referenced | 1 << PG_arch_1 |
> + 1 << PG_owner_priv_1 | 1 << PG_mappedtodisk);
> + set_page_private(page, 0);
> + set_page_refcounted(page);
> +
> + return 0;
> +}
Again - looks too big to inline..

But for both I do not know where they are used and how often.

Sam
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/