Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 19807
b: refs/heads/master
c: 2e1217c
h: refs/heads/master
i:
  19805: c6b2e10
  19803: e08f858
  19799: b27b575
  19791: 560ff2e
  19775: 447814d
v: v3
  • Loading branch information
Ravikiran G Thirumalai authored and Linus Torvalds committed Feb 5, 2006
1 parent d46bef6 commit d5d4516
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 12 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 64b4a954b03a1153fb8ae38d6ffbd991e01a1e80
refs/heads/master: 2e1217cf96b54d3b2d0162930608159e73507fbf
22 changes: 11 additions & 11 deletions trunk/mm/slab.c
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,7 @@ struct kmem_list3 {
unsigned long next_reap;
int free_touched;
unsigned int free_limit;
unsigned int colour_next; /* Per-node cache coloring */
spinlock_t list_lock;
struct array_cache *shared; /* shared per node */
struct array_cache **alien; /* on other nodes */
Expand Down Expand Up @@ -344,6 +345,7 @@ static void kmem_list3_init(struct kmem_list3 *parent)
INIT_LIST_HEAD(&parent->slabs_free);
parent->shared = NULL;
parent->alien = NULL;
parent->colour_next = 0;
spin_lock_init(&parent->list_lock);
parent->free_objects = 0;
parent->free_touched = 0;
Expand Down Expand Up @@ -390,7 +392,6 @@ struct kmem_cache {

size_t colour; /* cache colouring range */
unsigned int colour_off; /* colour offset */
unsigned int colour_next; /* cache colouring */
struct kmem_cache *slabp_cache;
unsigned int slab_size;
unsigned int dflags; /* dynamic flags */
Expand Down Expand Up @@ -1119,7 +1120,6 @@ void __init kmem_cache_init(void)
BUG();

cache_cache.colour = left_over / cache_cache.colour_off;
cache_cache.colour_next = 0;
cache_cache.slab_size = ALIGN(cache_cache.num * sizeof(kmem_bufctl_t) +
sizeof(struct slab), cache_line_size());

Expand Down Expand Up @@ -2324,18 +2324,19 @@ static int cache_grow(struct kmem_cache *cachep, gfp_t flags, int nodeid)
*/
ctor_flags |= SLAB_CTOR_ATOMIC;

/* About to mess with non-constant members - lock. */
/* Take the l3 list lock to change the colour_next on this node */
check_irq_off();
spin_lock(&cachep->spinlock);
l3 = cachep->nodelists[nodeid];
spin_lock(&l3->list_lock);

/* Get colour for the slab, and cal the next value. */
offset = cachep->colour_next;
cachep->colour_next++;
if (cachep->colour_next >= cachep->colour)
cachep->colour_next = 0;
offset *= cachep->colour_off;
offset = l3->colour_next;
l3->colour_next++;
if (l3->colour_next >= cachep->colour)
l3->colour_next = 0;
spin_unlock(&l3->list_lock);

spin_unlock(&cachep->spinlock);
offset *= cachep->colour_off;

check_irq_off();
if (local_flags & __GFP_WAIT)
Expand Down Expand Up @@ -2367,7 +2368,6 @@ static int cache_grow(struct kmem_cache *cachep, gfp_t flags, int nodeid)
if (local_flags & __GFP_WAIT)
local_irq_disable();
check_irq_off();
l3 = cachep->nodelists[nodeid];
spin_lock(&l3->list_lock);

/* Make slab active. */
Expand Down

0 comments on commit d5d4516

Please sign in to comment.