diff options
| -rw-r--r-- | arch/x86/include/asm/hardirq.h | 2 | ||||
| -rw-r--r-- | arch/x86/include/asm/percpu.h | 24 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce.c | 4 |
3 files changed, 27 insertions, 3 deletions
diff --git a/arch/x86/include/asm/hardirq.h b/arch/x86/include/asm/hardirq.h index 0f8576427cfe..aeab29aee617 100644 --- a/arch/x86/include/asm/hardirq.h +++ b/arch/x86/include/asm/hardirq.h | |||
| @@ -35,7 +35,7 @@ DECLARE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); | |||
| 35 | 35 | ||
| 36 | #define __ARCH_IRQ_STAT | 36 | #define __ARCH_IRQ_STAT |
| 37 | 37 | ||
| 38 | #define inc_irq_stat(member) percpu_add(irq_stat.member, 1) | 38 | #define inc_irq_stat(member) percpu_inc(irq_stat.member) |
| 39 | 39 | ||
| 40 | #define local_softirq_pending() percpu_read(irq_stat.__softirq_pending) | 40 | #define local_softirq_pending() percpu_read(irq_stat.__softirq_pending) |
| 41 | 41 | ||
diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h index 66a272dfd8b8..0ec6d12d84e6 100644 --- a/arch/x86/include/asm/percpu.h +++ b/arch/x86/include/asm/percpu.h | |||
| @@ -190,6 +190,29 @@ do { \ | |||
| 190 | pfo_ret__; \ | 190 | pfo_ret__; \ |
| 191 | }) | 191 | }) |
| 192 | 192 | ||
| 193 | #define percpu_unary_op(op, var) \ | ||
| 194 | ({ \ | ||
| 195 | switch (sizeof(var)) { \ | ||
| 196 | case 1: \ | ||
| 197 | asm(op "b "__percpu_arg(0) \ | ||
| 198 | : "+m" (var)); \ | ||
| 199 | break; \ | ||
| 200 | case 2: \ | ||
| 201 | asm(op "w "__percpu_arg(0) \ | ||
| 202 | : "+m" (var)); \ | ||
| 203 | break; \ | ||
| 204 | case 4: \ | ||
| 205 | asm(op "l "__percpu_arg(0) \ | ||
| 206 | : "+m" (var)); \ | ||
| 207 | break; \ | ||
| 208 | case 8: \ | ||
| 209 | asm(op "q "__percpu_arg(0) \ | ||
| 210 | : "+m" (var)); \ | ||
| 211 | break; \ | ||
| 212 | default: __bad_percpu_size(); \ | ||
| 213 | } \ | ||
| 214 | }) | ||
| 215 | |||
| 193 | /* | 216 | /* |
| 194 | * percpu_read() makes gcc load the percpu variable every time it is | 217 | * percpu_read() makes gcc load the percpu variable every time it is |
| 195 | * accessed while percpu_read_stable() allows the value to be cached. | 218 | * accessed while percpu_read_stable() allows the value to be cached. |
| @@ -207,6 +230,7 @@ do { \ | |||
| 207 | #define percpu_and(var, val) percpu_to_op("and", var, val) | 230 | #define percpu_and(var, val) percpu_to_op("and", var, val) |
| 208 | #define percpu_or(var, val) percpu_to_op("or", var, val) | 231 | #define percpu_or(var, val) percpu_to_op("or", var, val) |
| 209 | #define percpu_xor(var, val) percpu_to_op("xor", var, val) | 232 | #define percpu_xor(var, val) percpu_to_op("xor", var, val) |
| 233 | #define percpu_inc(var) percpu_unary_op("inc", var) | ||
| 210 | 234 | ||
| 211 | #define __this_cpu_read_1(pcp) percpu_from_op("mov", (pcp), "m"(pcp)) | 235 | #define __this_cpu_read_1(pcp) percpu_from_op("mov", (pcp), "m"(pcp)) |
| 212 | #define __this_cpu_read_2(pcp) percpu_from_op("mov", (pcp), "m"(pcp)) | 236 | #define __this_cpu_read_2(pcp) percpu_from_op("mov", (pcp), "m"(pcp)) |
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index 8a6f0afa767e..7a355ddcc64b 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c | |||
| @@ -539,7 +539,7 @@ void machine_check_poll(enum mcp_flags flags, mce_banks_t *b) | |||
| 539 | struct mce m; | 539 | struct mce m; |
| 540 | int i; | 540 | int i; |
| 541 | 541 | ||
| 542 | __get_cpu_var(mce_poll_count)++; | 542 | percpu_inc(mce_poll_count); |
| 543 | 543 | ||
| 544 | mce_setup(&m); | 544 | mce_setup(&m); |
| 545 | 545 | ||
| @@ -934,7 +934,7 @@ void do_machine_check(struct pt_regs *regs, long error_code) | |||
| 934 | 934 | ||
| 935 | atomic_inc(&mce_entry); | 935 | atomic_inc(&mce_entry); |
| 936 | 936 | ||
| 937 | __get_cpu_var(mce_exception_count)++; | 937 | percpu_inc(mce_exception_count); |
| 938 | 938 | ||
| 939 | if (notify_die(DIE_NMI, "machine check", regs, error_code, | 939 | if (notify_die(DIE_NMI, "machine check", regs, error_code, |
| 940 | 18, SIGKILL) == NOTIFY_STOP) | 940 | 18, SIGKILL) == NOTIFY_STOP) |
