2015-07-30 06:59:44 +03:00
/*
2015-08-03 12:42:57 +03:00
* Kernel module for testing static keys .
2015-07-30 06:59:44 +03:00
*
* Copyright 2015 Akamai Technologies Inc . All Rights Reserved
*
* Authors :
* Jason Baron < jbaron @ akamai . com >
*
* This software is licensed under the terms of the GNU General Public
* License version 2 , as published by the Free Software Foundation , and
* may be copied , distributed , and modified under those terms .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*/
# include <linux/module.h>
# include <linux/jump_label.h>
/* old keys */
struct static_key base_old_true_key = STATIC_KEY_INIT_TRUE ;
EXPORT_SYMBOL_GPL ( base_old_true_key ) ;
struct static_key base_inv_old_true_key = STATIC_KEY_INIT_TRUE ;
EXPORT_SYMBOL_GPL ( base_inv_old_true_key ) ;
struct static_key base_old_false_key = STATIC_KEY_INIT_FALSE ;
EXPORT_SYMBOL_GPL ( base_old_false_key ) ;
struct static_key base_inv_old_false_key = STATIC_KEY_INIT_FALSE ;
EXPORT_SYMBOL_GPL ( base_inv_old_false_key ) ;
/* new keys */
DEFINE_STATIC_KEY_TRUE ( base_true_key ) ;
EXPORT_SYMBOL_GPL ( base_true_key ) ;
DEFINE_STATIC_KEY_TRUE ( base_inv_true_key ) ;
EXPORT_SYMBOL_GPL ( base_inv_true_key ) ;
DEFINE_STATIC_KEY_FALSE ( base_false_key ) ;
EXPORT_SYMBOL_GPL ( base_false_key ) ;
DEFINE_STATIC_KEY_FALSE ( base_inv_false_key ) ;
EXPORT_SYMBOL_GPL ( base_inv_false_key ) ;
static void invert_key ( struct static_key * key )
{
if ( static_key_enabled ( key ) )
static_key_disable ( key ) ;
else
static_key_enable ( key ) ;
}
2015-08-03 12:42:57 +03:00
static int __init test_static_key_base_init ( void )
2015-07-30 06:59:44 +03:00
{
invert_key ( & base_inv_old_true_key ) ;
invert_key ( & base_inv_old_false_key ) ;
invert_key ( & base_inv_true_key . key ) ;
invert_key ( & base_inv_false_key . key ) ;
return 0 ;
}
2015-08-03 12:42:57 +03:00
static void __exit test_static_key_base_exit ( void )
2015-07-30 06:59:44 +03:00
{
}
2015-08-03 12:42:57 +03:00
module_init ( test_static_key_base_init ) ;
module_exit ( test_static_key_base_exit ) ;
2015-07-30 06:59:44 +03:00
MODULE_AUTHOR ( " Jason Baron <jbaron@akamai.com> " ) ;
MODULE_LICENSE ( " GPL " ) ;