Merge branch 'for-3.14' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 22 Jan 2014 01:48:41 +0000 (17:48 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 22 Jan 2014 01:48:41 +0000 (17:48 -0800)
Pull percpu changes from Tejun Heo:
 "Two trivial changes - addition of WARN_ONCE() in lib/percpu-refcount.c
  and use of VMALLOC_TOTAL instead of END - START in percpu.c"

* 'for-3.14' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu:
  percpu: use VMALLOC_TOTAL instead of VMALLOC_END - VMALLOC_START
  percpu-refcount: Add a WARN() for ref going negative

lib/percpu-refcount.c
mm/percpu.c

index 1a53d49..963b703 100644 (file)
@@ -120,6 +120,9 @@ static void percpu_ref_kill_rcu(struct rcu_head *rcu)
 
        atomic_add((int) count - PCPU_COUNT_BIAS, &ref->count);
 
+       WARN_ONCE(atomic_read(&ref->count) <= 0, "percpu ref <= 0 (%i)",
+                 atomic_read(&ref->count));
+
        /* @ref is viewed as dead on all CPUs, send out kill confirmation */
        if (ref->confirm_kill)
                ref->confirm_kill(ref);
index 0d10def..afbf352 100644 (file)
@@ -1686,10 +1686,10 @@ int __init pcpu_embed_first_chunk(size_t reserved_size, size_t dyn_size,
        max_distance += ai->unit_size;
 
        /* warn if maximum distance is further than 75% of vmalloc space */
-       if (max_distance > (VMALLOC_END - VMALLOC_START) * 3 / 4) {
+       if (max_distance > VMALLOC_TOTAL * 3 / 4) {
                pr_warning("PERCPU: max_distance=0x%zx too large for vmalloc "
                           "space 0x%lx\n", max_distance,
-                          (unsigned long)(VMALLOC_END - VMALLOC_START));
+                          VMALLOC_TOTAL);
 #ifdef CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK
                /* and fail if we have fallback */
                rc = -EINVAL;