1 /* 2 * Kernel module for testing static keys. 3 * 4 * Copyright 2015 Akamai Technologies Inc. All Rights Reserved 5 * 6 * Authors: 7 * Jason Baron <jbaron@akamai.com> 8 * 9 * This software is licensed under the terms of the GNU General Public 10 * License version 2, as published by the Free Software Foundation, and 11 * may be copied, distributed, and modified under those terms. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 */ 18 19 #include <linux/module.h> 20 #include <linux/jump_label.h> 21 22 /* old keys */ 23 struct static_key base_old_true_key = STATIC_KEY_INIT_TRUE; 24 EXPORT_SYMBOL_GPL(base_old_true_key); 25 struct static_key base_inv_old_true_key = STATIC_KEY_INIT_TRUE; 26 EXPORT_SYMBOL_GPL(base_inv_old_true_key); 27 struct static_key base_old_false_key = STATIC_KEY_INIT_FALSE; 28 EXPORT_SYMBOL_GPL(base_old_false_key); 29 struct static_key base_inv_old_false_key = STATIC_KEY_INIT_FALSE; 30 EXPORT_SYMBOL_GPL(base_inv_old_false_key); 31 32 /* new keys */ 33 DEFINE_STATIC_KEY_TRUE(base_true_key); 34 EXPORT_SYMBOL_GPL(base_true_key); 35 DEFINE_STATIC_KEY_TRUE(base_inv_true_key); 36 EXPORT_SYMBOL_GPL(base_inv_true_key); 37 DEFINE_STATIC_KEY_FALSE(base_false_key); 38 EXPORT_SYMBOL_GPL(base_false_key); 39 DEFINE_STATIC_KEY_FALSE(base_inv_false_key); 40 EXPORT_SYMBOL_GPL(base_inv_false_key); 41 42 static void invert_key(struct static_key *key) 43 { 44 if (static_key_enabled(key)) 45 static_key_disable(key); 46 else 47 static_key_enable(key); 48 } 49 50 static int __init test_static_key_base_init(void) 51 { 52 invert_key(&base_inv_old_true_key); 53 invert_key(&base_inv_old_false_key); 54 invert_key(&base_inv_true_key.key); 55 invert_key(&base_inv_false_key.key); 56 57 return 0; 58 } 59 60 static void __exit test_static_key_base_exit(void) 61 { 62 } 63 64 module_init(test_static_key_base_init); 65 module_exit(test_static_key_base_exit); 66 67 MODULE_AUTHOR("Jason Baron <jbaron@akamai.com>"); 68 MODULE_LICENSE("GPL"); 69