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 */ 23struct static_key base_old_true_key = STATIC_KEY_INIT_TRUE; 24EXPORT_SYMBOL_GPL(base_old_true_key); 25struct static_key base_inv_old_true_key = STATIC_KEY_INIT_TRUE; 26EXPORT_SYMBOL_GPL(base_inv_old_true_key); 27struct static_key base_old_false_key = STATIC_KEY_INIT_FALSE; 28EXPORT_SYMBOL_GPL(base_old_false_key); 29struct static_key base_inv_old_false_key = STATIC_KEY_INIT_FALSE; 30EXPORT_SYMBOL_GPL(base_inv_old_false_key); 31 32/* new keys */ 33DEFINE_STATIC_KEY_TRUE(base_true_key); 34EXPORT_SYMBOL_GPL(base_true_key); 35DEFINE_STATIC_KEY_TRUE(base_inv_true_key); 36EXPORT_SYMBOL_GPL(base_inv_true_key); 37DEFINE_STATIC_KEY_FALSE(base_false_key); 38EXPORT_SYMBOL_GPL(base_false_key); 39DEFINE_STATIC_KEY_FALSE(base_inv_false_key); 40EXPORT_SYMBOL_GPL(base_inv_false_key); 41 42static 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 50static 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 60static void __exit test_static_key_base_exit(void) 61{ 62} 63 64module_init(test_static_key_base_init); 65module_exit(test_static_key_base_exit); 66 67MODULE_AUTHOR("Jason Baron <jbaron@akamai.com>"); 68MODULE_LICENSE("GPL"); 69