diff options
| author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2017-10-21 13:09:18 +0200 |
|---|---|---|
| committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2017-10-21 13:09:18 +0200 |
| commit | a2ab5fc41533c952706ebdfaa378bb746e535cc1 (patch) | |
| tree | 9fb86bb4e9ecb67f7e651d284c2f12c6c5d4378f /include/asm-generic/percpu.h | |
| parent | a380f2edef65b2447a043251bb3c00a9d2153a8b (diff) | |
| parent | 0e708fc602531b8355b5de6ea7c98f09129b223f (diff) | |
| download | lwn-a2ab5fc41533c952706ebdfaa378bb746e535cc1.tar.gz lwn-a2ab5fc41533c952706ebdfaa378bb746e535cc1.zip | |
Merge branch 'pm-sleep' into pm-core
Diffstat (limited to 'include/asm-generic/percpu.h')
| -rw-r--r-- | include/asm-generic/percpu.h | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/include/asm-generic/percpu.h b/include/asm-generic/percpu.h index 0504ef8f3aa3..976f8ac26665 100644 --- a/include/asm-generic/percpu.h +++ b/include/asm-generic/percpu.h @@ -115,15 +115,35 @@ do { \ (__ret); \ }) -#define this_cpu_generic_read(pcp) \ +#define __this_cpu_generic_read_nopreempt(pcp) \ ({ \ typeof(pcp) __ret; \ preempt_disable_notrace(); \ - __ret = raw_cpu_generic_read(pcp); \ + __ret = READ_ONCE(*raw_cpu_ptr(&(pcp))); \ preempt_enable_notrace(); \ __ret; \ }) +#define __this_cpu_generic_read_noirq(pcp) \ +({ \ + typeof(pcp) __ret; \ + unsigned long __flags; \ + raw_local_irq_save(__flags); \ + __ret = raw_cpu_generic_read(pcp); \ + raw_local_irq_restore(__flags); \ + __ret; \ +}) + +#define this_cpu_generic_read(pcp) \ +({ \ + typeof(pcp) __ret; \ + if (__native_word(pcp)) \ + __ret = __this_cpu_generic_read_nopreempt(pcp); \ + else \ + __ret = __this_cpu_generic_read_noirq(pcp); \ + __ret; \ +}) + #define this_cpu_generic_to_op(pcp, val, op) \ do { \ unsigned long __flags; \ |
