1*9c92ab61SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 22bf9e0abSIngo Molnar /* 32bf9e0abSIngo Molnar * Kernel module for testing static keys. 42bf9e0abSIngo Molnar * 52bf9e0abSIngo Molnar * Copyright 2015 Akamai Technologies Inc. All Rights Reserved 62bf9e0abSIngo Molnar * 72bf9e0abSIngo Molnar * Authors: 82bf9e0abSIngo Molnar * Jason Baron <jbaron@akamai.com> 92bf9e0abSIngo Molnar */ 102bf9e0abSIngo Molnar 112bf9e0abSIngo Molnar #include <linux/module.h> 122bf9e0abSIngo Molnar #include <linux/jump_label.h> 132bf9e0abSIngo Molnar 142bf9e0abSIngo Molnar /* old keys */ 152bf9e0abSIngo Molnar struct static_key base_old_true_key = STATIC_KEY_INIT_TRUE; 162bf9e0abSIngo Molnar EXPORT_SYMBOL_GPL(base_old_true_key); 172bf9e0abSIngo Molnar struct static_key base_inv_old_true_key = STATIC_KEY_INIT_TRUE; 182bf9e0abSIngo Molnar EXPORT_SYMBOL_GPL(base_inv_old_true_key); 192bf9e0abSIngo Molnar struct static_key base_old_false_key = STATIC_KEY_INIT_FALSE; 202bf9e0abSIngo Molnar EXPORT_SYMBOL_GPL(base_old_false_key); 212bf9e0abSIngo Molnar struct static_key base_inv_old_false_key = STATIC_KEY_INIT_FALSE; 222bf9e0abSIngo Molnar EXPORT_SYMBOL_GPL(base_inv_old_false_key); 232bf9e0abSIngo Molnar 242bf9e0abSIngo Molnar /* new keys */ 252bf9e0abSIngo Molnar DEFINE_STATIC_KEY_TRUE(base_true_key); 262bf9e0abSIngo Molnar EXPORT_SYMBOL_GPL(base_true_key); 272bf9e0abSIngo Molnar DEFINE_STATIC_KEY_TRUE(base_inv_true_key); 282bf9e0abSIngo Molnar EXPORT_SYMBOL_GPL(base_inv_true_key); 292bf9e0abSIngo Molnar DEFINE_STATIC_KEY_FALSE(base_false_key); 302bf9e0abSIngo Molnar EXPORT_SYMBOL_GPL(base_false_key); 312bf9e0abSIngo Molnar DEFINE_STATIC_KEY_FALSE(base_inv_false_key); 322bf9e0abSIngo Molnar EXPORT_SYMBOL_GPL(base_inv_false_key); 332bf9e0abSIngo Molnar invert_key(struct static_key * key)342bf9e0abSIngo Molnarstatic void invert_key(struct static_key *key) 352bf9e0abSIngo Molnar { 362bf9e0abSIngo Molnar if (static_key_enabled(key)) 372bf9e0abSIngo Molnar static_key_disable(key); 382bf9e0abSIngo Molnar else 392bf9e0abSIngo Molnar static_key_enable(key); 402bf9e0abSIngo Molnar } 412bf9e0abSIngo Molnar test_static_key_base_init(void)422bf9e0abSIngo Molnarstatic int __init test_static_key_base_init(void) 432bf9e0abSIngo Molnar { 442bf9e0abSIngo Molnar invert_key(&base_inv_old_true_key); 452bf9e0abSIngo Molnar invert_key(&base_inv_old_false_key); 462bf9e0abSIngo Molnar invert_key(&base_inv_true_key.key); 472bf9e0abSIngo Molnar invert_key(&base_inv_false_key.key); 482bf9e0abSIngo Molnar 492bf9e0abSIngo Molnar return 0; 502bf9e0abSIngo Molnar } 512bf9e0abSIngo Molnar test_static_key_base_exit(void)522bf9e0abSIngo Molnarstatic void __exit test_static_key_base_exit(void) 532bf9e0abSIngo Molnar { 542bf9e0abSIngo Molnar } 552bf9e0abSIngo Molnar 562bf9e0abSIngo Molnar module_init(test_static_key_base_init); 572bf9e0abSIngo Molnar module_exit(test_static_key_base_exit); 582bf9e0abSIngo Molnar 592bf9e0abSIngo Molnar MODULE_AUTHOR("Jason Baron <jbaron@akamai.com>"); 602bf9e0abSIngo Molnar MODULE_LICENSE("GPL"); 61