#include /* validate @native and @pcp counter values match @expected */ #define CHECK(native, pcp, expected) \ do { \ WARN((native) != (expected), \ "raw %ld (0x%lx) != expected %lld (0x%llx)", \ (native), (native), \ (long long)(expected), (long long)(expected)); \ WARN(__this_cpu_read(pcp) != (expected), \ "pcp %ld (0x%lx) != expected %lld (0x%llx)", \ __this_cpu_read(pcp), __this_cpu_read(pcp), \ (long long)(expected), (long long)(expected)); \ } while (0) static DEFINE_PER_CPU(long, long_counter); static DEFINE_PER_CPU(unsigned long, ulong_counter); static int __init percpu_test_init(void) { /* * volatile prevents compiler from optimizing it uses, otherwise the * +ul_one/-ul_one below would replace with inc/dec instructions. */ volatile unsigned int ui_one = 1; long l = 0; unsigned long ul = 0; pr_info("percpu test start\n"); preempt_disable(); l += -1; __this_cpu_add(long_counter, -1); CHECK(l, long_counter, -1); l += 1; __this_cpu_add(long_counter, 1); CHECK(l, long_counter, 0); ul = 0; __this_cpu_write(ulong_counter, 0); ul += 1UL; __this_cpu_add(ulong_counter, 1UL); CHECK(ul, ulong_counter, 1); ul += -1UL; __this_cpu_add(ulong_counter, -1UL); CHECK(ul, ulong_counter, 0); ul += -(unsigned long)1; __this_cpu_add(ulong_counter, -(unsigned long)1); CHECK(ul, ulong_counter, -1); ul = 0; __this_cpu_write(ulong_counter, 0); ul -= 1; __this_cpu_dec(ulong_counter); CHECK(ul, ulong_counter, -1); CHECK(ul, ulong_counter, ULONG_MAX); l += -ui_one; __this_cpu_add(long_counter, -ui_one); CHECK(l, long_counter, 0xffffffff); l += ui_one; __this_cpu_add(long_counter, ui_one); CHECK(l, long_counter, (long)0x100000000LL); l = 0; __this_cpu_write(long_counter, 0); l -= ui_one; __this_cpu_sub(long_counter, ui_one); CHECK(l, long_counter, -1); l = 0; __this_cpu_write(long_counter, 0); l += ui_one; __this_cpu_add(long_counter, ui_one); CHECK(l, long_counter, 1); l += -ui_one; __this_cpu_add(long_counter, -ui_one); CHECK(l, long_counter, (long)0x100000000LL); l = 0; __this_cpu_write(long_counter, 0); l -= ui_one; this_cpu_sub(long_counter, ui_one); CHECK(l, long_counter, -1); CHECK(l, long_counter, ULONG_MAX); ul = 0; __this_cpu_write(ulong_counter, 0); ul += ui_one; __this_cpu_add(ulong_counter, ui_one); CHECK(ul, ulong_counter, 1); ul = 0; __this_cpu_write(ulong_counter, 0); ul -= ui_one; __this_cpu_sub(ulong_counter, ui_one); CHECK(ul, ulong_counter, -1); CHECK(ul, ulong_counter, ULONG_MAX); ul = 3; __this_cpu_write(ulong_counter, 3); ul = this_cpu_sub_return(ulong_counter, ui_one); CHECK(ul, ulong_counter, 2); ul = __this_cpu_sub_return(ulong_counter, ui_one); CHECK(ul, ulong_counter, 1); preempt_enable(); pr_info("percpu test done\n"); return -EAGAIN; /* Fail will directly unload the module */ } static void __exit percpu_test_exit(void) { } module_init(percpu_test_init) module_exit(percpu_test_exit) MODULE_LICENSE("GPL"); MODULE_AUTHOR("Greg Thelen"); MODULE_DESCRIPTION("percpu operations test"); put type='hidden' name='id' value='cfee5d63767b2e7997c1f36420d008abbe61565c'/>
context:
space:
mode:
authorZach Ploskey <zach@ploskey.com>2017-01-22 00:47:19 -0800
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>2017-01-22 12:47:06 +0200
commitcfee5d63767b2e7997c1f36420d008abbe61565c (patch)
treec66a512525d224f9675c33a8d156e0f058db1de6 /net/batman-adv/bat_v_elp.h
parent5a00b6c2438460b870a451f14593fc40d3c7edf6 (diff)
platform/x86: ideapad-laptop: handle ACPI event 1
On Ideapad laptops, ACPI event 1 is currently not handled. Many models log "ideapad_laptop: Unknown event: 1" every 20 seconds or so while running on battery power. Some convertible laptops receive this event when switching in and out of tablet mode. This adds and additional case for event 1 in ideapad_acpi_notify to call ideapad_input_report(priv, vpc_bit), so that the event is reported to userspace and we avoid unnecessary logging. Fixes bug #107481 (https://bugzilla.kernel.org/show_bug.cgi?id=107481) Fixes bug #65751 (https://bugzilla.kernel.org/show_bug.cgi?id=65751) Signed-off-by: Zach Ploskey <zach@ploskey.com> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Diffstat (limited to 'net/batman-adv/bat_v_elp.h')