lkml.org 
[lkml]   [2004]   [Jun]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [STACK] >3k call path in ide
    Jörn Engel <joern@wohnheim.fh-wedel.de> wrote:
    >
    > read_page_state doesn't exist in 2.6.7-rc3 or 2.6.6-mm5. How is it
    > defined?

    It was in 2.6.7-rc3-mm1.



    struct page_state is large (148 bytes) and we put them on the stack in awkward
    code paths (page reclaim...)

    So implement a simple read_page_state() which can be used to pluck out a
    single member from the all-cpus page_state accumulators.

    Signed-off-by: Andrew Morton <akpm@osdl.org>
    ---

    25-akpm/include/linux/page-flags.h | 4 ++++
    25-akpm/mm/page_alloc.c | 17 +++++++++++++++++
    2 files changed, 21 insertions(+)

    diff -puN include/linux/page-flags.h~read_page_state include/linux/page-flags.h
    --- 25/include/linux/page-flags.h~read_page_state Wed Jun 9 17:06:33 2004
    +++ 25-akpm/include/linux/page-flags.h Wed Jun 9 17:06:33 2004
    @@ -139,6 +139,10 @@ DECLARE_PER_CPU(struct page_state, page_

    extern void get_page_state(struct page_state *ret);
    extern void get_full_page_state(struct page_state *ret);
    +extern unsigned long __read_page_state(unsigned offset);
    +
    +#define read_page_state(member) \
    + __read_page_state(offsetof(struct page_state, member))

    #define mod_page_state(member, delta) \
    do { \
    diff -puN mm/page_alloc.c~read_page_state mm/page_alloc.c
    --- 25/mm/page_alloc.c~read_page_state Wed Jun 9 17:06:33 2004
    +++ 25-akpm/mm/page_alloc.c Wed Jun 9 17:11:57 2004
    @@ -947,6 +947,23 @@ void get_full_page_state(struct page_sta
    __get_page_state(ret, sizeof(*ret) / sizeof(unsigned long));
    }

    +unsigned long __read_page_state(unsigned offset)
    +{
    + unsigned long ret = 0;
    + int cpu;
    +
    + for (cpu = 0; cpu < NR_CPUS; cpu++) {
    + unsigned long in;
    +
    + if (!cpu_possible(cpu))
    + continue;
    +
    + in = (unsigned long)&per_cpu(page_states, cpu) + offset;
    + ret += *((unsigned long *)in);
    + }
    + return ret;
    +}
    +
    void get_zone_counts(unsigned long *active,
    unsigned long *inactive, unsigned long *free)
    {
    _
    -
    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/

    \
     
     \ /
      Last update: 2005-03-22 14:03    [W:4.298 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site