lkml.org 
[lkml]   [2008]   [Mar]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] [4/13] Prepare page_alloc for the maskable allocator
    [Sam Ravnborg - Fri, Mar 07, 2008 at 07:19:43PM +0100]
    | 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)?
    |

    well, it will not be that big in compiled form 'cause in real it is

    page->flags & (addflags | (precompiled constant))

    | > +
    | > +/* 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@vger.kernel.org
    | More majordomo info at http://vger.kernel.org/majordomo-info.html
    | Please read the FAQ at http://www.tux.org/lkml/
    |
    - Cyrill -


    \
     
     \ /
      Last update: 2008-03-07 19:39    [W:0.024 / U:29.932 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site