lkml.org 
[lkml]   [2011]   [Jun]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[slub p2 2/4] slub: pass kmem_cache_cpu pointer to get_partial()
    Pass the kmem_cache_cpu pointer to get_partial(). That way
    we can avoid the this_cpu_write() statements.

    Signed-off-by: Christoph Lameter <cl@linux.com>


    ---
    mm/slub.c | 30 +++++++++++++++---------------
    1 file changed, 15 insertions(+), 15 deletions(-)

    Index: linux-2.6/mm/slub.c
    ===================================================================
    --- linux-2.6.orig/mm/slub.c 2011-06-14 12:33:15.887854446 -0500
    +++ linux-2.6/mm/slub.c 2011-06-14 12:33:20.237854416 -0500
    @@ -1451,7 +1451,8 @@ static inline void remove_partial(struct
    * Must hold list_lock.
    */
    static inline int acquire_slab(struct kmem_cache *s,
    - struct kmem_cache_node *n, struct page *page)
    + struct kmem_cache_node *n, struct page *page,
    + struct kmem_cache_cpu *c)
    {
    void *freelist;
    unsigned long counters;
    @@ -1480,9 +1481,9 @@ static inline int acquire_slab(struct km

    if (freelist) {
    /* Populate the per cpu freelist */
    - this_cpu_write(s->cpu_slab->freelist, freelist);
    - this_cpu_write(s->cpu_slab->page, page);
    - this_cpu_write(s->cpu_slab->node, page_to_nid(page));
    + c->freelist = freelist;
    + c->page = page;
    + c->node = page_to_nid(page);
    return 1;
    } else {
    /*
    @@ -1500,7 +1501,7 @@ static inline int acquire_slab(struct km
    * Try to allocate a partial slab from a specific node.
    */
    static struct page *get_partial_node(struct kmem_cache *s,
    - struct kmem_cache_node *n)
    + struct kmem_cache_node *n, struct kmem_cache_cpu *c)
    {
    struct page *page;

    @@ -1515,7 +1516,7 @@ static struct page *get_partial_node(str

    spin_lock(&n->list_lock);
    list_for_each_entry(page, &n->partial, lru)
    - if (acquire_slab(s, n, page))
    + if (acquire_slab(s, n, page, c))
    goto out;
    page = NULL;
    out:
    @@ -1526,7 +1527,8 @@ out:
    /*
    * Get a page from somewhere. Search in increasing NUMA distances.
    */
    -static struct page *get_any_partial(struct kmem_cache *s, gfp_t flags)
    +static struct page *get_any_partial(struct kmem_cache *s, gfp_t flags,
    + struct kmem_cache_cpu *c)
    {
    #ifdef CONFIG_NUMA
    struct zonelist *zonelist;
    @@ -1566,7 +1568,7 @@ static struct page *get_any_partial(stru

    if (n && cpuset_zone_allowed_hardwall(zone, flags) &&
    n->nr_partial > s->min_partial) {
    - page = get_partial_node(s, n);
    + page = get_partial_node(s, n, c);
    if (page) {
    put_mems_allowed();
    return page;
    @@ -1581,16 +1583,17 @@ static struct page *get_any_partial(stru
    /*
    * Get a partial page, lock it and return it.
    */
    -static struct page *get_partial(struct kmem_cache *s, gfp_t flags, int node)
    +static struct page *get_partial(struct kmem_cache *s, gfp_t flags, int node,
    + struct kmem_cache_cpu *c)
    {
    struct page *page;
    int searchnode = (node == NUMA_NO_NODE) ? numa_node_id() : node;

    - page = get_partial_node(s, get_node(s, searchnode));
    + page = get_partial_node(s, get_node(s, searchnode), c);
    if (page || node != NUMA_NO_NODE)
    return page;

    - return get_any_partial(s, flags);
    + return get_any_partial(s, flags, c);
    }

    #ifdef CONFIG_PREEMPT
    @@ -1659,9 +1662,6 @@ void init_kmem_cache_cpus(struct kmem_ca
    for_each_possible_cpu(cpu)
    per_cpu_ptr(s->cpu_slab, cpu)->tid = init_tid(cpu);
    }
    -/*
    - * Remove the cpu slab
    - */

    /*
    * Remove the cpu slab
    @@ -2013,7 +2013,7 @@ load_freelist:
    return object;

    new_slab:
    - page = get_partial(s, gfpflags, node);
    + page = get_partial(s, gfpflags, node, c);
    if (page) {
    stat(s, ALLOC_FROM_PARTIAL);
    object = c->freelist;


    \
     
     \ /
      Last update: 2011-06-20 17:35    [W:0.032 / U:31.308 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site