Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'for-3.5' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu

Pull percpu updates from Tejun Heo:
"Contains Alex Shi's three patches to remove percpu_xxx() which overlap
with this_cpu_xxx(). There shouldn't be any functional change."

* 'for-3.5' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu:
percpu: remove percpu_xxx() functions
x86: replace percpu_xxx funcs with this_cpu_xxx
net: replace percpu_xxx funcs with this_cpu_xxx or __this_cpu_xxx

+69 -124
+1 -1
arch/x86/include/asm/compat.h
··· 229 229 sp = task_pt_regs(current)->sp; 230 230 } else { 231 231 /* -128 for the x32 ABI redzone */ 232 - sp = percpu_read(old_rsp) - 128; 232 + sp = this_cpu_read(old_rsp) - 128; 233 233 } 234 234 235 235 return (void __user *)round_down(sp - len, 16);
+1 -1
arch/x86/include/asm/current.h
··· 11 11 12 12 static __always_inline struct task_struct *get_current(void) 13 13 { 14 - return percpu_read_stable(current_task); 14 + return this_cpu_read_stable(current_task); 15 15 } 16 16 17 17 #define current get_current()
+1
arch/x86/include/asm/desc.h
··· 6 6 #include <asm/mmu.h> 7 7 8 8 #include <linux/smp.h> 9 + #include <linux/percpu.h> 9 10 10 11 static inline void fill_ldt(struct desc_struct *desc, const struct user_desc *info) 11 12 {
+3 -3
arch/x86/include/asm/fpu-internal.h
··· 290 290 static inline void __thread_clear_has_fpu(struct task_struct *tsk) 291 291 { 292 292 tsk->thread.fpu.has_fpu = 0; 293 - percpu_write(fpu_owner_task, NULL); 293 + this_cpu_write(fpu_owner_task, NULL); 294 294 } 295 295 296 296 /* Must be paired with a 'clts' before! */ 297 297 static inline void __thread_set_has_fpu(struct task_struct *tsk) 298 298 { 299 299 tsk->thread.fpu.has_fpu = 1; 300 - percpu_write(fpu_owner_task, tsk); 300 + this_cpu_write(fpu_owner_task, tsk); 301 301 } 302 302 303 303 /* ··· 344 344 */ 345 345 static inline int fpu_lazy_restore(struct task_struct *new, unsigned int cpu) 346 346 { 347 - return new == percpu_read_stable(fpu_owner_task) && 347 + return new == this_cpu_read_stable(fpu_owner_task) && 348 348 cpu == new->thread.fpu.last_cpu; 349 349 } 350 350
+5 -4
arch/x86/include/asm/hardirq.h
··· 35 35 36 36 #define __ARCH_IRQ_STAT 37 37 38 - #define inc_irq_stat(member) percpu_inc(irq_stat.member) 38 + #define inc_irq_stat(member) this_cpu_inc(irq_stat.member) 39 39 40 - #define local_softirq_pending() percpu_read(irq_stat.__softirq_pending) 40 + #define local_softirq_pending() this_cpu_read(irq_stat.__softirq_pending) 41 41 42 42 #define __ARCH_SET_SOFTIRQ_PENDING 43 43 44 - #define set_softirq_pending(x) percpu_write(irq_stat.__softirq_pending, (x)) 45 - #define or_softirq_pending(x) percpu_or(irq_stat.__softirq_pending, (x)) 44 + #define set_softirq_pending(x) \ 45 + this_cpu_write(irq_stat.__softirq_pending, (x)) 46 + #define or_softirq_pending(x) this_cpu_or(irq_stat.__softirq_pending, (x)) 46 47 47 48 extern void ack_bad_irq(unsigned int irq); 48 49
+2 -2
arch/x86/include/asm/irq_regs.h
··· 15 15 16 16 static inline struct pt_regs *get_irq_regs(void) 17 17 { 18 - return percpu_read(irq_regs); 18 + return this_cpu_read(irq_regs); 19 19 } 20 20 21 21 static inline struct pt_regs *set_irq_regs(struct pt_regs *new_regs) ··· 23 23 struct pt_regs *old_regs; 24 24 25 25 old_regs = get_irq_regs(); 26 - percpu_write(irq_regs, new_regs); 26 + this_cpu_write(irq_regs, new_regs); 27 27 28 28 return old_regs; 29 29 }
+6 -6
arch/x86/include/asm/mmu_context.h
··· 25 25 static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) 26 26 { 27 27 #ifdef CONFIG_SMP 28 - if (percpu_read(cpu_tlbstate.state) == TLBSTATE_OK) 29 - percpu_write(cpu_tlbstate.state, TLBSTATE_LAZY); 28 + if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_OK) 29 + this_cpu_write(cpu_tlbstate.state, TLBSTATE_LAZY); 30 30 #endif 31 31 } 32 32 ··· 37 37 38 38 if (likely(prev != next)) { 39 39 #ifdef CONFIG_SMP 40 - percpu_write(cpu_tlbstate.state, TLBSTATE_OK); 41 - percpu_write(cpu_tlbstate.active_mm, next); 40 + this_cpu_write(cpu_tlbstate.state, TLBSTATE_OK); 41 + this_cpu_write(cpu_tlbstate.active_mm, next); 42 42 #endif 43 43 cpumask_set_cpu(cpu, mm_cpumask(next)); 44 44 ··· 56 56 } 57 57 #ifdef CONFIG_SMP 58 58 else { 59 - percpu_write(cpu_tlbstate.state, TLBSTATE_OK); 60 - BUG_ON(percpu_read(cpu_tlbstate.active_mm) != next); 59 + this_cpu_write(cpu_tlbstate.state, TLBSTATE_OK); 60 + BUG_ON(this_cpu_read(cpu_tlbstate.active_mm) != next); 61 61 62 62 if (!cpumask_test_and_set_cpu(cpu, mm_cpumask(next))) { 63 63 /* We were in lazy tlb mode and leave_mm disabled
+10 -14
arch/x86/include/asm/percpu.h
··· 46 46 47 47 #ifdef CONFIG_SMP 48 48 #define __percpu_prefix "%%"__stringify(__percpu_seg)":" 49 - #define __my_cpu_offset percpu_read(this_cpu_off) 49 + #define __my_cpu_offset this_cpu_read(this_cpu_off) 50 50 51 51 /* 52 52 * Compared to the generic __my_cpu_offset version, the following ··· 351 351 }) 352 352 353 353 /* 354 - * percpu_read() makes gcc load the percpu variable every time it is 355 - * accessed while percpu_read_stable() allows the value to be cached. 356 - * percpu_read_stable() is more efficient and can be used if its value 354 + * this_cpu_read() makes gcc load the percpu variable every time it is 355 + * accessed while this_cpu_read_stable() allows the value to be cached. 356 + * this_cpu_read_stable() is more efficient and can be used if its value 357 357 * is guaranteed to be valid across cpus. The current users include 358 358 * get_current() and get_thread_info() both of which are actually 359 359 * per-thread variables implemented as per-cpu variables and thus 360 360 * stable for the duration of the respective task. 361 361 */ 362 - #define percpu_read(var) percpu_from_op("mov", var, "m" (var)) 363 - #define percpu_read_stable(var) percpu_from_op("mov", var, "p" (&(var))) 364 - #define percpu_write(var, val) percpu_to_op("mov", var, val) 365 - #define percpu_add(var, val) percpu_add_op(var, val) 366 - #define percpu_sub(var, val) percpu_add_op(var, -(val)) 367 - #define percpu_and(var, val) percpu_to_op("and", var, val) 368 - #define percpu_or(var, val) percpu_to_op("or", var, val) 369 - #define percpu_xor(var, val) percpu_to_op("xor", var, val) 370 - #define percpu_inc(var) percpu_unary_op("inc", var) 362 + #define this_cpu_read_stable(var) percpu_from_op("mov", var, "p" (&(var))) 371 363 372 364 #define __this_cpu_read_1(pcp) percpu_from_op("mov", (pcp), "m"(pcp)) 373 365 #define __this_cpu_read_2(pcp) percpu_from_op("mov", (pcp), "m"(pcp)) ··· 504 512 { 505 513 unsigned long __percpu *a = (unsigned long *)addr + nr / BITS_PER_LONG; 506 514 507 - return ((1UL << (nr % BITS_PER_LONG)) & percpu_read(*a)) != 0; 515 + #ifdef CONFIG_X86_64 516 + return ((1UL << (nr % BITS_PER_LONG)) & __this_cpu_read_8(*a)) != 0; 517 + #else 518 + return ((1UL << (nr % BITS_PER_LONG)) & __this_cpu_read_4(*a)) != 0; 519 + #endif 508 520 } 509 521 510 522 static inline int x86_this_cpu_variable_test_bit(int nr,
+2 -2
arch/x86/include/asm/smp.h
··· 191 191 * from the initial startup. We map APIC_BASE very early in page_setup(), 192 192 * so this is correct in the x86 case. 193 193 */ 194 - #define raw_smp_processor_id() (percpu_read(cpu_number)) 194 + #define raw_smp_processor_id() (this_cpu_read(cpu_number)) 195 195 extern int safe_smp_processor_id(void); 196 196 197 197 #elif defined(CONFIG_X86_64_SMP) 198 - #define raw_smp_processor_id() (percpu_read(cpu_number)) 198 + #define raw_smp_processor_id() (this_cpu_read(cpu_number)) 199 199 200 200 #define stack_smp_processor_id() \ 201 201 ({ \
+2 -2
arch/x86/include/asm/stackprotector.h
··· 75 75 76 76 current->stack_canary = canary; 77 77 #ifdef CONFIG_X86_64 78 - percpu_write(irq_stack_union.stack_canary, canary); 78 + this_cpu_write(irq_stack_union.stack_canary, canary); 79 79 #else 80 - percpu_write(stack_canary.canary, canary); 80 + this_cpu_write(stack_canary.canary, canary); 81 81 #endif 82 82 } 83 83
+1 -1
arch/x86/include/asm/thread_info.h
··· 204 204 static inline struct thread_info *current_thread_info(void) 205 205 { 206 206 struct thread_info *ti; 207 - ti = (void *)(percpu_read_stable(kernel_stack) + 207 + ti = (void *)(this_cpu_read_stable(kernel_stack) + 208 208 KERNEL_STACK_OFFSET - THREAD_SIZE); 209 209 return ti; 210 210 }
+2 -2
arch/x86/include/asm/tlbflush.h
··· 156 156 157 157 static inline void reset_lazy_tlbstate(void) 158 158 { 159 - percpu_write(cpu_tlbstate.state, 0); 160 - percpu_write(cpu_tlbstate.active_mm, &init_mm); 159 + this_cpu_write(cpu_tlbstate.state, 0); 160 + this_cpu_write(cpu_tlbstate.active_mm, &init_mm); 161 161 } 162 162 163 163 #endif /* SMP */
+1 -1
arch/x86/kernel/cpu/common.c
··· 1185 1185 oist = &per_cpu(orig_ist, cpu); 1186 1186 1187 1187 #ifdef CONFIG_NUMA 1188 - if (cpu != 0 && percpu_read(numa_node) == 0 && 1188 + if (cpu != 0 && this_cpu_read(numa_node) == 0 && 1189 1189 early_cpu_to_node(cpu) != NUMA_NO_NODE) 1190 1190 set_numa_node(early_cpu_to_node(cpu)); 1191 1191 #endif
+2 -2
arch/x86/kernel/cpu/mcheck/mce.c
··· 583 583 struct mce m; 584 584 int i; 585 585 586 - percpu_inc(mce_poll_count); 586 + this_cpu_inc(mce_poll_count); 587 587 588 588 mce_gather_info(&m, NULL); 589 589 ··· 1017 1017 1018 1018 atomic_inc(&mce_entry); 1019 1019 1020 - percpu_inc(mce_exception_count); 1020 + this_cpu_inc(mce_exception_count); 1021 1021 1022 1022 if (!banks) 1023 1023 goto out;
+1 -1
arch/x86/kernel/i387.c
··· 88 88 __thread_clear_has_fpu(me); 89 89 /* We do 'stts()' in kernel_fpu_end() */ 90 90 } else { 91 - percpu_write(fpu_owner_task, NULL); 91 + this_cpu_write(fpu_owner_task, NULL); 92 92 clts(); 93 93 } 94 94 }
+1
arch/x86/kernel/nmi_selftest.c
··· 13 13 #include <linux/cpumask.h> 14 14 #include <linux/delay.h> 15 15 #include <linux/init.h> 16 + #include <linux/percpu.h> 16 17 17 18 #include <asm/apic.h> 18 19 #include <asm/nmi.h>
+6 -6
arch/x86/kernel/paravirt.c
··· 241 241 242 242 static inline void enter_lazy(enum paravirt_lazy_mode mode) 243 243 { 244 - BUG_ON(percpu_read(paravirt_lazy_mode) != PARAVIRT_LAZY_NONE); 244 + BUG_ON(this_cpu_read(paravirt_lazy_mode) != PARAVIRT_LAZY_NONE); 245 245 246 - percpu_write(paravirt_lazy_mode, mode); 246 + this_cpu_write(paravirt_lazy_mode, mode); 247 247 } 248 248 249 249 static void leave_lazy(enum paravirt_lazy_mode mode) 250 250 { 251 - BUG_ON(percpu_read(paravirt_lazy_mode) != mode); 251 + BUG_ON(this_cpu_read(paravirt_lazy_mode) != mode); 252 252 253 - percpu_write(paravirt_lazy_mode, PARAVIRT_LAZY_NONE); 253 + this_cpu_write(paravirt_lazy_mode, PARAVIRT_LAZY_NONE); 254 254 } 255 255 256 256 void paravirt_enter_lazy_mmu(void) ··· 267 267 { 268 268 BUG_ON(preemptible()); 269 269 270 - if (percpu_read(paravirt_lazy_mode) == PARAVIRT_LAZY_MMU) { 270 + if (this_cpu_read(paravirt_lazy_mode) == PARAVIRT_LAZY_MMU) { 271 271 arch_leave_lazy_mmu_mode(); 272 272 set_ti_thread_flag(task_thread_info(prev), TIF_LAZY_MMU_UPDATES); 273 273 } ··· 289 289 if (in_interrupt()) 290 290 return PARAVIRT_LAZY_NONE; 291 291 292 - return percpu_read(paravirt_lazy_mode); 292 + return this_cpu_read(paravirt_lazy_mode); 293 293 } 294 294 295 295 void arch_flush_lazy_mmu_mode(void)
+1 -1
arch/x86/kernel/process.c
··· 385 385 #ifdef CONFIG_X86_64 386 386 void enter_idle(void) 387 387 { 388 - percpu_write(is_idle, 1); 388 + this_cpu_write(is_idle, 1); 389 389 atomic_notifier_call_chain(&idle_notifier, IDLE_START, NULL); 390 390 } 391 391
+1 -1
arch/x86/kernel/process_32.c
··· 302 302 303 303 switch_fpu_finish(next_p, fpu); 304 304 305 - percpu_write(current_task, next_p); 305 + this_cpu_write(current_task, next_p); 306 306 307 307 return prev_p; 308 308 }
+5 -5
arch/x86/kernel/process_64.c
··· 237 237 current->thread.usersp = new_sp; 238 238 regs->ip = new_ip; 239 239 regs->sp = new_sp; 240 - percpu_write(old_rsp, new_sp); 240 + this_cpu_write(old_rsp, new_sp); 241 241 regs->cs = _cs; 242 242 regs->ss = _ss; 243 243 regs->flags = X86_EFLAGS_IF; ··· 359 359 /* 360 360 * Switch the PDA and FPU contexts. 361 361 */ 362 - prev->usersp = percpu_read(old_rsp); 363 - percpu_write(old_rsp, next->usersp); 364 - percpu_write(current_task, next_p); 362 + prev->usersp = this_cpu_read(old_rsp); 363 + this_cpu_write(old_rsp, next->usersp); 364 + this_cpu_write(current_task, next_p); 365 365 366 - percpu_write(kernel_stack, 366 + this_cpu_write(kernel_stack, 367 367 (unsigned long)task_stack_page(next_p) + 368 368 THREAD_SIZE - KERNEL_STACK_OFFSET); 369 369
+5 -5
arch/x86/mm/tlb.c
··· 61 61 */ 62 62 void leave_mm(int cpu) 63 63 { 64 - if (percpu_read(cpu_tlbstate.state) == TLBSTATE_OK) 64 + if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_OK) 65 65 BUG(); 66 66 cpumask_clear_cpu(cpu, 67 - mm_cpumask(percpu_read(cpu_tlbstate.active_mm))); 67 + mm_cpumask(this_cpu_read(cpu_tlbstate.active_mm))); 68 68 load_cr3(swapper_pg_dir); 69 69 } 70 70 EXPORT_SYMBOL_GPL(leave_mm); ··· 152 152 * BUG(); 153 153 */ 154 154 155 - if (f->flush_mm == percpu_read(cpu_tlbstate.active_mm)) { 156 - if (percpu_read(cpu_tlbstate.state) == TLBSTATE_OK) { 155 + if (f->flush_mm == this_cpu_read(cpu_tlbstate.active_mm)) { 156 + if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_OK) { 157 157 if (f->flush_va == TLB_FLUSH_ALL) 158 158 local_flush_tlb(); 159 159 else ··· 322 322 static void do_flush_tlb_all(void *info) 323 323 { 324 324 __flush_tlb_all(); 325 - if (percpu_read(cpu_tlbstate.state) == TLBSTATE_LAZY) 325 + if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_LAZY) 326 326 leave_mm(smp_processor_id()); 327 327 } 328 328
-54
include/linux/percpu.h
··· 166 166 (typeof(type) __percpu *)__alloc_percpu(sizeof(type), __alignof__(type)) 167 167 168 168 /* 169 - * Optional methods for optimized non-lvalue per-cpu variable access. 170 - * 171 - * @var can be a percpu variable or a field of it and its size should 172 - * equal char, int or long. percpu_read() evaluates to a lvalue and 173 - * all others to void. 174 - * 175 - * These operations are guaranteed to be atomic. 176 - * The generic versions disable interrupts. Archs are 177 - * encouraged to implement single-instruction alternatives which don't 178 - * require protection. 179 - */ 180 - #ifndef percpu_read 181 - # define percpu_read(var) \ 182 - ({ \ 183 - typeof(var) *pr_ptr__ = &(var); \ 184 - typeof(var) pr_ret__; \ 185 - pr_ret__ = get_cpu_var(*pr_ptr__); \ 186 - put_cpu_var(*pr_ptr__); \ 187 - pr_ret__; \ 188 - }) 189 - #endif 190 - 191 - #define __percpu_generic_to_op(var, val, op) \ 192 - do { \ 193 - typeof(var) *pgto_ptr__ = &(var); \ 194 - get_cpu_var(*pgto_ptr__) op val; \ 195 - put_cpu_var(*pgto_ptr__); \ 196 - } while (0) 197 - 198 - #ifndef percpu_write 199 - # define percpu_write(var, val) __percpu_generic_to_op(var, (val), =) 200 - #endif 201 - 202 - #ifndef percpu_add 203 - # define percpu_add(var, val) __percpu_generic_to_op(var, (val), +=) 204 - #endif 205 - 206 - #ifndef percpu_sub 207 - # define percpu_sub(var, val) __percpu_generic_to_op(var, (val), -=) 208 - #endif 209 - 210 - #ifndef percpu_and 211 - # define percpu_and(var, val) __percpu_generic_to_op(var, (val), &=) 212 - #endif 213 - 214 - #ifndef percpu_or 215 - # define percpu_or(var, val) __percpu_generic_to_op(var, (val), |=) 216 - #endif 217 - 218 - #ifndef percpu_xor 219 - # define percpu_xor(var, val) __percpu_generic_to_op(var, (val), ^=) 220 - #endif 221 - 222 - /* 223 169 * Branching function to split up a function into a set of functions that 224 170 * are called for different scalar sizes of the objects handled. 225 171 */
+2 -2
include/linux/topology.h
··· 239 239 #ifndef set_numa_node 240 240 static inline void set_numa_node(int node) 241 241 { 242 - percpu_write(numa_node, node); 242 + this_cpu_write(numa_node, node); 243 243 } 244 244 #endif 245 245 ··· 274 274 #ifndef set_numa_mem 275 275 static inline void set_numa_mem(int node) 276 276 { 277 - percpu_write(_numa_mem_, node); 277 + this_cpu_write(_numa_mem_, node); 278 278 } 279 279 #endif 280 280
+6 -6
net/netfilter/xt_TEE.c
··· 87 87 const struct xt_tee_tginfo *info = par->targinfo; 88 88 struct iphdr *iph; 89 89 90 - if (percpu_read(tee_active)) 90 + if (__this_cpu_read(tee_active)) 91 91 return XT_CONTINUE; 92 92 /* 93 93 * Copy the skb, and route the copy. Will later return %XT_CONTINUE for ··· 124 124 ip_send_check(iph); 125 125 126 126 if (tee_tg_route4(skb, info)) { 127 - percpu_write(tee_active, true); 127 + __this_cpu_write(tee_active, true); 128 128 ip_local_out(skb); 129 - percpu_write(tee_active, false); 129 + __this_cpu_write(tee_active, false); 130 130 } else { 131 131 kfree_skb(skb); 132 132 } ··· 168 168 { 169 169 const struct xt_tee_tginfo *info = par->targinfo; 170 170 171 - if (percpu_read(tee_active)) 171 + if (__this_cpu_read(tee_active)) 172 172 return XT_CONTINUE; 173 173 skb = pskb_copy(skb, GFP_ATOMIC); 174 174 if (skb == NULL) ··· 186 186 --iph->hop_limit; 187 187 } 188 188 if (tee_tg_route6(skb, info)) { 189 - percpu_write(tee_active, true); 189 + __this_cpu_write(tee_active, true); 190 190 ip6_local_out(skb); 191 - percpu_write(tee_active, false); 191 + __this_cpu_write(tee_active, false); 192 192 } else { 193 193 kfree_skb(skb); 194 194 }
+2 -2
net/socket.c
··· 479 479 inode->i_uid = current_fsuid(); 480 480 inode->i_gid = current_fsgid(); 481 481 482 - percpu_add(sockets_in_use, 1); 482 + this_cpu_add(sockets_in_use, 1); 483 483 return sock; 484 484 } 485 485 ··· 522 522 if (rcu_dereference_protected(sock->wq, 1)->fasync_list) 523 523 printk(KERN_ERR "sock_release: fasync list not empty!\n"); 524 524 525 - percpu_sub(sockets_in_use, 1); 525 + this_cpu_sub(sockets_in_use, 1); 526 526 if (!sock->file) { 527 527 iput(SOCK_INODE(sock)); 528 528 return;