Merge branch 'for-3.13' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 13 Nov 2013 06:17:16 +0000 (15:17 +0900)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 13 Nov 2013 06:17:16 +0000 (15:17 +0900)
Pull percpu changes from Tejun Heo:
 "Two smallish changes for percpu.  Two patches to remove unused
  this_cpu_xor() and one to fix a bug in percpu init failure path so
  that it can reach the proper BUG() instead of oopsing earlier"

* 'for-3.13' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu:
  x86: remove this_cpu_xor() implementation
  percpu: remove this_cpu_xor() implementation
  percpu: fix bootmem error handling in pcpu_page_first_chunk()

arch/x86/include/asm/percpu.h
include/linux/percpu.h
mm/percpu.c

index b3e18f8..94220d1 100644 (file)
@@ -378,9 +378,6 @@ do {                                                                        \
 #define __this_cpu_or_1(pcp, val)      percpu_to_op("or", (pcp), val)
 #define __this_cpu_or_2(pcp, val)      percpu_to_op("or", (pcp), val)
 #define __this_cpu_or_4(pcp, val)      percpu_to_op("or", (pcp), val)
-#define __this_cpu_xor_1(pcp, val)     percpu_to_op("xor", (pcp), val)
-#define __this_cpu_xor_2(pcp, val)     percpu_to_op("xor", (pcp), val)
-#define __this_cpu_xor_4(pcp, val)     percpu_to_op("xor", (pcp), val)
 #define __this_cpu_xchg_1(pcp, val)    percpu_xchg_op(pcp, val)
 #define __this_cpu_xchg_2(pcp, val)    percpu_xchg_op(pcp, val)
 #define __this_cpu_xchg_4(pcp, val)    percpu_xchg_op(pcp, val)
@@ -400,9 +397,6 @@ do {                                                                        \
 #define this_cpu_or_1(pcp, val)                percpu_to_op("or", (pcp), val)
 #define this_cpu_or_2(pcp, val)                percpu_to_op("or", (pcp), val)
 #define this_cpu_or_4(pcp, val)                percpu_to_op("or", (pcp), val)
-#define this_cpu_xor_1(pcp, val)       percpu_to_op("xor", (pcp), val)
-#define this_cpu_xor_2(pcp, val)       percpu_to_op("xor", (pcp), val)
-#define this_cpu_xor_4(pcp, val)       percpu_to_op("xor", (pcp), val)
 #define this_cpu_xchg_1(pcp, nval)     percpu_xchg_op(pcp, nval)
 #define this_cpu_xchg_2(pcp, nval)     percpu_xchg_op(pcp, nval)
 #define this_cpu_xchg_4(pcp, nval)     percpu_xchg_op(pcp, nval)
@@ -447,7 +441,6 @@ do {                                                                        \
 #define __this_cpu_add_8(pcp, val)     percpu_add_op((pcp), val)
 #define __this_cpu_and_8(pcp, val)     percpu_to_op("and", (pcp), val)
 #define __this_cpu_or_8(pcp, val)      percpu_to_op("or", (pcp), val)
-#define __this_cpu_xor_8(pcp, val)     percpu_to_op("xor", (pcp), val)
 #define __this_cpu_add_return_8(pcp, val) percpu_add_return_op(pcp, val)
 #define __this_cpu_xchg_8(pcp, nval)   percpu_xchg_op(pcp, nval)
 #define __this_cpu_cmpxchg_8(pcp, oval, nval)  percpu_cmpxchg_op(pcp, oval, nval)
@@ -457,7 +450,6 @@ do {                                                                        \
 #define this_cpu_add_8(pcp, val)       percpu_add_op((pcp), val)
 #define this_cpu_and_8(pcp, val)       percpu_to_op("and", (pcp), val)
 #define this_cpu_or_8(pcp, val)                percpu_to_op("or", (pcp), val)
-#define this_cpu_xor_8(pcp, val)       percpu_to_op("xor", (pcp), val)
 #define this_cpu_add_return_8(pcp, val)        percpu_add_return_op(pcp, val)
 #define this_cpu_xchg_8(pcp, nval)     percpu_xchg_op(pcp, nval)
 #define this_cpu_cmpxchg_8(pcp, oval, nval)    percpu_cmpxchg_op(pcp, oval, nval)
index c74088a..9e4761c 100644 (file)
@@ -375,22 +375,6 @@ do {                                                                       \
 # define this_cpu_or(pcp, val)         __pcpu_size_call(this_cpu_or_, (pcp), (val))
 #endif
 
-#ifndef this_cpu_xor
-# ifndef this_cpu_xor_1
-#  define this_cpu_xor_1(pcp, val)     _this_cpu_generic_to_op((pcp), (val), ^=)
-# endif
-# ifndef this_cpu_xor_2
-#  define this_cpu_xor_2(pcp, val)     _this_cpu_generic_to_op((pcp), (val), ^=)
-# endif
-# ifndef this_cpu_xor_4
-#  define this_cpu_xor_4(pcp, val)     _this_cpu_generic_to_op((pcp), (val), ^=)
-# endif
-# ifndef this_cpu_xor_8
-#  define this_cpu_xor_8(pcp, val)     _this_cpu_generic_to_op((pcp), (val), ^=)
-# endif
-# define this_cpu_xor(pcp, val)                __pcpu_size_call(this_cpu_or_, (pcp), (val))
-#endif
-
 #define _this_cpu_generic_add_return(pcp, val)                         \
 ({                                                                     \
        typeof(pcp) ret__;                                              \
@@ -629,22 +613,6 @@ do {                                                                       \
 # define __this_cpu_or(pcp, val)       __pcpu_size_call(__this_cpu_or_, (pcp), (val))
 #endif
 
-#ifndef __this_cpu_xor
-# ifndef __this_cpu_xor_1
-#  define __this_cpu_xor_1(pcp, val)   __this_cpu_generic_to_op((pcp), (val), ^=)
-# endif
-# ifndef __this_cpu_xor_2
-#  define __this_cpu_xor_2(pcp, val)   __this_cpu_generic_to_op((pcp), (val), ^=)
-# endif
-# ifndef __this_cpu_xor_4
-#  define __this_cpu_xor_4(pcp, val)   __this_cpu_generic_to_op((pcp), (val), ^=)
-# endif
-# ifndef __this_cpu_xor_8
-#  define __this_cpu_xor_8(pcp, val)   __this_cpu_generic_to_op((pcp), (val), ^=)
-# endif
-# define __this_cpu_xor(pcp, val)      __pcpu_size_call(__this_cpu_xor_, (pcp), (val))
-#endif
-
 #define __this_cpu_generic_add_return(pcp, val)                                \
 ({                                                                     \
        __this_cpu_add(pcp, val);                                       \
index 8c8e08f..0d10def 100644 (file)
@@ -1706,8 +1706,9 @@ int __init pcpu_embed_first_chunk(size_t reserved_size, size_t dyn_size,
 
 out_free_areas:
        for (group = 0; group < ai->nr_groups; group++)
-               free_fn(areas[group],
-                       ai->groups[group].nr_units * ai->unit_size);
+               if (areas[group])
+                       free_fn(areas[group],
+                               ai->groups[group].nr_units * ai->unit_size);
 out_free:
        pcpu_free_alloc_info(ai);
        if (areas)