diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-10-30 17:27:10 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-10-30 17:27:10 -0400 |
| commit | 12aee278b50c4a94a93fa0b4d201ae35d792c696 (patch) | |
| tree | 98c0c42c9095aae34d12a4b8c555176698b7202a | |
| parent | c56b097af26cb11c1f49a4311ba538c825666fed (diff) | |
| parent | 5e8cfc3c75b3e43497389896c0ecda62fc311ce9 (diff) | |
Merge branch 'akpm' (fixes from Andrew Morton)
Merge three fixes from Andrew Morton.
* emailed patches from Andrew Morton <akpm@linux-foundation.org>:
memcg: use __this_cpu_sub() to dec stats to avoid incorrect subtrahend casting
percpu: fix this_cpu_sub() subtrahend casting for unsigneds
mm/pagewalk.c: fix walk_page_range() access of wrong PTEs
| -rw-r--r-- | arch/x86/include/asm/percpu.h | 3 | ||||
| -rw-r--r-- | include/linux/percpu.h | 8 | ||||
| -rw-r--r-- | mm/memcontrol.c | 2 | ||||
| -rw-r--r-- | mm/pagewalk.c | 2 |
4 files changed, 8 insertions, 7 deletions
diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h index 0da5200ee79d..b3e18f800302 100644 --- a/arch/x86/include/asm/percpu.h +++ b/arch/x86/include/asm/percpu.h | |||
| @@ -128,7 +128,8 @@ do { \ | |||
| 128 | do { \ | 128 | do { \ |
| 129 | typedef typeof(var) pao_T__; \ | 129 | typedef typeof(var) pao_T__; \ |
| 130 | const int pao_ID__ = (__builtin_constant_p(val) && \ | 130 | const int pao_ID__ = (__builtin_constant_p(val) && \ |
| 131 | ((val) == 1 || (val) == -1)) ? (val) : 0; \ | 131 | ((val) == 1 || (val) == -1)) ? \ |
| 132 | (int)(val) : 0; \ | ||
| 132 | if (0) { \ | 133 | if (0) { \ |
| 133 | pao_T__ pao_tmp__; \ | 134 | pao_T__ pao_tmp__; \ |
| 134 | pao_tmp__ = (val); \ | 135 | pao_tmp__ = (val); \ |
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index cc88172c7d9a..c74088ab103b 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
| @@ -332,7 +332,7 @@ do { \ | |||
| 332 | #endif | 332 | #endif |
| 333 | 333 | ||
| 334 | #ifndef this_cpu_sub | 334 | #ifndef this_cpu_sub |
| 335 | # define this_cpu_sub(pcp, val) this_cpu_add((pcp), -(val)) | 335 | # define this_cpu_sub(pcp, val) this_cpu_add((pcp), -(typeof(pcp))(val)) |
| 336 | #endif | 336 | #endif |
| 337 | 337 | ||
| 338 | #ifndef this_cpu_inc | 338 | #ifndef this_cpu_inc |
| @@ -418,7 +418,7 @@ do { \ | |||
| 418 | # define this_cpu_add_return(pcp, val) __pcpu_size_call_return2(this_cpu_add_return_, pcp, val) | 418 | # define this_cpu_add_return(pcp, val) __pcpu_size_call_return2(this_cpu_add_return_, pcp, val) |
| 419 | #endif | 419 | #endif |
| 420 | 420 | ||
| 421 | #define this_cpu_sub_return(pcp, val) this_cpu_add_return(pcp, -(val)) | 421 | #define this_cpu_sub_return(pcp, val) this_cpu_add_return(pcp, -(typeof(pcp))(val)) |
| 422 | #define this_cpu_inc_return(pcp) this_cpu_add_return(pcp, 1) | 422 | #define this_cpu_inc_return(pcp) this_cpu_add_return(pcp, 1) |
| 423 | #define this_cpu_dec_return(pcp) this_cpu_add_return(pcp, -1) | 423 | #define this_cpu_dec_return(pcp) this_cpu_add_return(pcp, -1) |
| 424 | 424 | ||
| @@ -586,7 +586,7 @@ do { \ | |||
| 586 | #endif | 586 | #endif |
| 587 | 587 | ||
| 588 | #ifndef __this_cpu_sub | 588 | #ifndef __this_cpu_sub |
| 589 | # define __this_cpu_sub(pcp, val) __this_cpu_add((pcp), -(val)) | 589 | # define __this_cpu_sub(pcp, val) __this_cpu_add((pcp), -(typeof(pcp))(val)) |
| 590 | #endif | 590 | #endif |
| 591 | 591 | ||
| 592 | #ifndef __this_cpu_inc | 592 | #ifndef __this_cpu_inc |
| @@ -668,7 +668,7 @@ do { \ | |||
| 668 | __pcpu_size_call_return2(__this_cpu_add_return_, pcp, val) | 668 | __pcpu_size_call_return2(__this_cpu_add_return_, pcp, val) |
| 669 | #endif | 669 | #endif |
| 670 | 670 | ||
| 671 | #define __this_cpu_sub_return(pcp, val) __this_cpu_add_return(pcp, -(val)) | 671 | #define __this_cpu_sub_return(pcp, val) __this_cpu_add_return(pcp, -(typeof(pcp))(val)) |
| 672 | #define __this_cpu_inc_return(pcp) __this_cpu_add_return(pcp, 1) | 672 | #define __this_cpu_inc_return(pcp) __this_cpu_add_return(pcp, 1) |
| 673 | #define __this_cpu_dec_return(pcp) __this_cpu_add_return(pcp, -1) | 673 | #define __this_cpu_dec_return(pcp) __this_cpu_add_return(pcp, -1) |
| 674 | 674 | ||
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 34d3ca9572d6..497ec33ff22d 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
| @@ -3774,7 +3774,7 @@ void mem_cgroup_move_account_page_stat(struct mem_cgroup *from, | |||
| 3774 | /* Update stat data for mem_cgroup */ | 3774 | /* Update stat data for mem_cgroup */ |
| 3775 | preempt_disable(); | 3775 | preempt_disable(); |
| 3776 | WARN_ON_ONCE(from->stat->count[idx] < nr_pages); | 3776 | WARN_ON_ONCE(from->stat->count[idx] < nr_pages); |
| 3777 | __this_cpu_add(from->stat->count[idx], -nr_pages); | 3777 | __this_cpu_sub(from->stat->count[idx], nr_pages); |
| 3778 | __this_cpu_add(to->stat->count[idx], nr_pages); | 3778 | __this_cpu_add(to->stat->count[idx], nr_pages); |
| 3779 | preempt_enable(); | 3779 | preempt_enable(); |
| 3780 | } | 3780 | } |
diff --git a/mm/pagewalk.c b/mm/pagewalk.c index 5da2cbcfdbb5..2beeabf502c5 100644 --- a/mm/pagewalk.c +++ b/mm/pagewalk.c | |||
| @@ -242,7 +242,7 @@ int walk_page_range(unsigned long addr, unsigned long end, | |||
| 242 | if (err) | 242 | if (err) |
| 243 | break; | 243 | break; |
| 244 | pgd++; | 244 | pgd++; |
| 245 | } while (addr = next, addr != end); | 245 | } while (addr = next, addr < end); |
| 246 | 246 | ||
| 247 | return err; | 247 | return err; |
| 248 | } | 248 | } |
