module_param: avoid bool abuse, add bint for special cases.
Subsystems (8)
PATCH 2/15 module_param: avoid bool abuse, add bint for special cases.
For historical reasons, we allow module_param(bool) to take an int (or an unsigned int). That's going away.
A few drivers really want an int: they set it to -1 and a parameter will set it to 0 or 1. This sucks: reading them from sysfs will give 'Y' for both -1 and 1, but if we change it to an int, then the users might be broken (if they did "param" instead of "param=1").
Use a new 'bint' parser for them.
(ntfs has a different problem: it needs an int for debug_msgs because it's also exposed via sysctl.)
--- drivers/hwmon/emc2103.c | 2 +- drivers/infiniband/hw/ehca/ehca_main.c | 2 +- drivers/s390/cio/cmf.c | 2 +- fs/ntfs/super.c | 2 +- include/linux/moduleparam.h | 6 ++++++ kernel/params.c | 24 ++++++++++++++++++++++++ sound/pci/intel8x0.c | 4 ++-- 7 files changed, 36 insertions(+), 6 deletions(-)
drivers/hwmon/emc2103.c +1 -1
@@ -55,7 +55,7 @@ static const u8 REG_TEMP_MAX[4] = { 0x34* it. Default is to leave the device in the state it's already in (-1). * This parameter allows APD mode to be optionally forced on or off */ static int apd =-1 ; -module_param (apd, bool,0 ); +module_param (apd, bint,0 );MODULE_PARM_DESC (init,"Set to zero to disable anti-parallel diode mode" );struct temperature {
drivers/infiniband/hw/ehca/ehca_main.c +1 -1
@@ -82,7 +82,7 @@ module_param_named(port_act_time, ehca_pmodule_param_named (poll_all_eqs, ehca_poll_all_eqs, bool,S_IRUGO );module_param_named (static_rate, ehca_static_rate, int,S_IRUGO );module_param_named (scaling_code, ehca_scaling_code, bool,S_IRUGO ); -module_param_named (lock_hcalls, ehca_lock_hcalls, bool,S_IRUGO ); +module_param_named (lock_hcalls, ehca_lock_hcalls, bint,S_IRUGO );module_param_named (number_of_cqs, ehca_max_cq, int,S_IRUGO );module_param_named (number_of_qps, ehca_max_qp, int,S_IRUGO );
drivers/s390/cio/cmf.c +1 -1
@@ -98,7 +98,7 @@ enum cmb_format {* enum cmb_format. */ static int format =CMF_AUTODETECT ; -module_param (format, bool,0444 ); +module_param (format, bint,0444 );/** * struct cmb_operations - functions to use depending on cmb_format
fs/ntfs/super.c +1 -1
@@ -3198,7 +3198,7 @@ MODULE_DESCRIPTION("NTFS 1.2/3.x driverMODULE_VERSION (NTFS_VERSION );MODULE_LICENSE ("GPL" );#ifdef DEBUG -module_param (debug_msgs, bool,0 ); +module_param (debug_msgs, bint,0 );MODULE_PARM_DESC (debug_msgs,"Enable debug messages." );#endif
include/linux/moduleparam.h +6 -0
@@ -367,6 +367,12 @@ extern int param_set_invbool(const charextern int param_get_invbool (char *buffer,const struct kernel_param *kp);#define param_check_invbool (name, p) __param_check(name, p, bool) +/* An int, which can only be set like a bool (though it shows as an int). */ +extern struct kernel_param_ops param_ops_bint; +extern int param_set_bint (const char *val,const struct kernel_param *kp); +#define param_get_bint param_get_int +#define param_check_bint param_check_int +/** * module_param_array - a parameter which is an array of some type * @name: the name of the array variable
kernel/params.c +24 -0
@@ -369,6 +369,30 @@ struct kernel_param_ops param_ops_invboo };EXPORT_SYMBOL (param_ops_invbool); +int param_set_bint (const char *val,const struct kernel_param *kp) +{ +struct kernel_param boolkp; +bool v; +int ret; + +/* Match bool exactly, by re-using it. */ + boolkp = *kp; + boolkp.arg = &v; + boolkp.flags |=KPARAM_ISBOOL ; + + ret =param_set_bool (val, &boolkp); +if (ret ==0 ) + *(int *)kp->arg = v; +return ret; +} +EXPORT_SYMBOL (param_set_bint); + +struct kernel_param_ops param_ops_bint = { + .set = param_set_bint, + .get = param_get_int, +}; +EXPORT_SYMBOL (param_ops_bint); +/* We break the rule and mangle the string. */ static int param_array(const char *name, const char *val,
sound/pci/intel8x0.c +2 -2
@@ -95,13 +95,13 @@ module_param(ac97_quirk, charp, 0444);MODULE_PARM_DESC (ac97_quirk,"AC'97 workaround for strange hardware." );module_param (buggy_semaphore, bool,0444 );MODULE_PARM_DESC (buggy_semaphore,"Enable workaround for hardwares with problematic codec semaphores." ); -module_param (buggy_irq, bool,0444 ); +module_param (buggy_irq, bint,0444 );MODULE_PARM_DESC (buggy_irq,"Enable workaround for buggy interrupts on some motherboards." );module_param (xbox, bool,0444 );MODULE_PARM_DESC (xbox,"Set to 1 for Xbox, if you have problems with the AC'97 codec detection." );module_param (spdif_aclink, int,0444 );MODULE_PARM_DESC (spdif_aclink,"S/PDIF over AC-link." ); -module_param (inside_vm, bool,0444 ); +module_param (inside_vm, bint,0444 );MODULE_PARM_DESC (inside_vm,"KVM/Parallels optimization." );/* just for backward compatibility */
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
At Thu, 15 Dec 2011 13:32:26 +1030,
Quoted 14 lines · Rusty Russell
For historical reasons, we allow
module_param(bool)to take an int (or an unsigned int). That's going away.A few drivers really want an int: they set it to -1 and a parameter will set it to 0 or 1. This sucks: reading them from sysfs will give 'Y' for both -1 and 1, but if we change it to an int, then the users might be broken (if they did "param" instead of "param=1").
Use a new 'bint' parser for them.
(ntfs has a different problem: it needs an int for
debug_msgsbecause it's also exposed via sysctl.)
Quoted 12 lines
Cc Steve Glendinning <[email protected]>Cc Jean Delvare <[email protected]>Cc Guenter Roeck <guenter.roeck-IzeFyvvaP7pWk0Htik3J/[email protected]>Cc Hoang-Nam Nguyen <[email protected]>Cc Christoph Raisch <[email protected]>Cc Roland Dreier <[email protected]>Cc Sean Hefty <[email protected]>Cc Hal Rosenstock <[email protected]>Cc Anton Altaparmakov <[email protected]>Cc Jaroslav Kysela <perex-/Fr2/[email protected]>Cc Takashi Iwai <[email protected]>
For the sound part,
It's a nice feature. I know many drivers can be replaced with bint gracefully now (e.g. i915 driver).
thanks,
Takashi
Quoted 124 lines
Cc alsa-devel-K7yf7f+aM1XWsZ/[email protected]Signed-off-by Rusty Russell <rusty-8n+1lVoiYb80n/[email protected]>--- drivers/hwmon/emc2103.c | 2 +- drivers/infiniband/hw/ehca/ehca_main.c | 2 +- drivers/s390/cio/cmf.c | 2 +- fs/ntfs/super.c | 2 +- include/linux/moduleparam.h | 6 ++++++ kernel/params.c | 24 ++++++++++++++++++++++++ sound/pci/intel8x0.c | 4 ++-- 7 files changed, 36 insertions(+), 6 deletions(-)drivers/hwmon/emc2103.c +1
-1@@ -55,7 +55,7 @@ static const u8 REG_TEMP_MAX[4] = { 0x34* it. Default is to leave the device in the state it's already in (-1). * This parameter allows APD mode to be optionally forced on or off */ static int apd =-1 ; -module_param (apd, bool,0 ); +module_param (apd, bint,0 );MODULE_PARM_DESC (init,"Set to zero to disable anti-parallel diode mode" );struct temperature {drivers/infiniband/hw/ehca/ehca_main.c +1
-1@@ -82,7 +82,7 @@ module_param_named(port_act_time, ehca_pmodule_param_named (poll_all_eqs, ehca_poll_all_eqs, bool,S_IRUGO );module_param_named (static_rate, ehca_static_rate, int,S_IRUGO );module_param_named (scaling_code, ehca_scaling_code, bool,S_IRUGO ); -module_param_named (lock_hcalls, ehca_lock_hcalls, bool,S_IRUGO ); +module_param_named (lock_hcalls, ehca_lock_hcalls, bint,S_IRUGO );module_param_named (number_of_cqs, ehca_max_cq, int,S_IRUGO );module_param_named (number_of_qps, ehca_max_qp, int,S_IRUGO );drivers/s390/cio/cmf.c +1
-1@@ -98,7 +98,7 @@ enum cmb_format {* enum cmb_format. */ static int format =CMF_AUTODETECT ; -module_param (format, bool,0444 ); +module_param (format, bint,0444 );/** * struct cmb_operations - functions to use depending on cmb_format fs/ntfs/super.c +1
-1@@ -3198,7 +3198,7 @@ MODULE_DESCRIPTION("NTFS 1.2/3.x driverMODULE_VERSION (NTFS_VERSION );MODULE_LICENSE ("GPL" );#ifdef DEBUG -module_param (debug_msgs, bool,0 ); +module_param (debug_msgs, bint,0 );MODULE_PARM_DESC (debug_msgs,"Enable debug messages." );#endif include/linux/moduleparam.h +6
-0@@ -367,6 +367,12 @@ extern int param_set_invbool(const charextern int param_get_invbool (char *buffer,const struct kernel_param *kp);#define param_check_invbool (name, p) __param_check(name, p, bool) +/* An int, which can only be set like a bool (though it shows as an int). */ +extern struct kernel_param_ops param_ops_bint; +extern int param_set_bint (const char *val,const struct kernel_param *kp); +#define param_get_bint param_get_int +#define param_check_bint param_check_int +/** * module_param_array - a parameter which is an array of some type * @name: the name of the array variable kernel/params.c +24
-0@@ -369,6 +369,30 @@ struct kernel_param_ops param_ops_invboo };EXPORT_SYMBOL (param_ops_invbool); +int param_set_bint (const char *val,const struct kernel_param *kp) +{ +struct kernel_param boolkp; +bool v; +int ret; + +/* Match bool exactly, by re-using it. */ + boolkp = *kp; + boolkp.arg = &v; + boolkp.flags |=KPARAM_ISBOOL ; + + ret =param_set_bool (val, &boolkp); +if (ret ==0 ) + *(int *)kp->arg = v; +return ret; +} +EXPORT_SYMBOL (param_set_bint); + +struct kernel_param_ops param_ops_bint = { + .set = param_set_bint, + .get = param_get_int, +}; +EXPORT_SYMBOL (param_ops_bint); +/* We break the rule and mangle the string. */ static int param_array(const char *name, const char *val,sound/pci/intel8x0.c +1
-1@@ -95,13 +95,13 @@ module_param(ac97_quirk, charp, 0444);MODULE_PARM_DESC (ac97_quirk,"AC'97 workaround for strange hardware." );module_param (buggy_semaphore, bool,0444 );MODULE_PARM_DESC (buggy_semaphore,"Enable workaround for hardwares with problematic codec semaphores." ); -module_param (buggy_irq, bool,0444 ); +module_param (buggy_irq, bint,0444 );
sound/pci/intel8x0.c module_param(ac97_quirk, charp, 0444); · line 107
Quoted 10 lines
sound/pci/intel8x0.c +1
-1MODULE_PARM_DESC (buggy_irq,"Enable workaround for buggy interrupts on some motherboards." );module_param (xbox, bool,0444 );MODULE_PARM_DESC (xbox,"Set to 1 for Xbox, if you have problems with the AC'97 codec detection." );module_param (spdif_aclink, int,0444 );MODULE_PARM_DESC (spdif_aclink,"S/PDIF over AC-link." ); -module_param (inside_vm, bool,0444 ); +module_param (inside_vm, bint,0444 );MODULE_PARM_DESC (inside_vm,"KVM/Parallels optimization." );/* just for backward compatibility */
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 31 lines · Rusty Russell
For historical reasons, we allow
module_param(bool)to take an int (or an unsigned int). That's going away.A few drivers really want an int: they set it to -1 and a parameter will set it to 0 or 1. This sucks: reading them from sysfs will give 'Y' for both -1 and 1, but if we change it to an int, then the users might be broken (if they did "param" instead of "param=1").
Use a new 'bint' parser for them.
(ntfs has a different problem: it needs an int for
debug_msgsbecause it's also exposed via sysctl.)Cc Steve Glendinning <[email protected]>Cc Jean Delvare <[email protected]>Cc Guenter Roeck <guenter.roeck-IzeFyvvaP7pWk0Htik3J/[email protected]>Cc Hoang-Nam Nguyen <[email protected]>Cc Christoph Raisch <[email protected]>Cc Roland Dreier <[email protected]>Cc Sean Hefty <[email protected]>Cc Hal Rosenstock <[email protected]>Cc Anton Altaparmakov <[email protected]>Cc Jaroslav Kysela <perex-/Fr2/[email protected]>Cc Takashi Iwai <[email protected]>Cc alsa-devel-K7yf7f+aM1XWsZ/[email protected]Signed-off-by Rusty Russell <rusty-8n+1lVoiYb80n/[email protected]>
Quoted 2 lines
--- drivers/hwmon/emc2103.c | 2 +-
For the hwmon driver:
Quoted 125 lines
drivers/infiniband/hw/ehca/ehca_main.c | 2 +- drivers/s390/cio/cmf.c | 2 +- fs/ntfs/super.c | 2 +- include/linux/moduleparam.h | 6 ++++++ kernel/params.c | 24 ++++++++++++++++++++++++ sound/pci/intel8x0.c | 4 ++-- 7 files changed, 36 insertions(+), 6 deletions(-)drivers/hwmon/emc2103.c +1
-1@@ -55,7 +55,7 @@ static const u8 REG_TEMP_MAX[4] = { 0x34* it. Default is to leave the device in the state it's already in (-1). * This parameter allows APD mode to be optionally forced on or off */ static int apd =-1 ; -module_param (apd, bool,0 ); +module_param (apd, bint,0 );MODULE_PARM_DESC (init,"Set to zero to disable anti-parallel diode mode" );struct temperature {drivers/infiniband/hw/ehca/ehca_main.c +1
-1@@ -82,7 +82,7 @@ module_param_named(port_act_time, ehca_pmodule_param_named (poll_all_eqs, ehca_poll_all_eqs, bool,S_IRUGO );module_param_named (static_rate, ehca_static_rate, int,S_IRUGO );module_param_named (scaling_code, ehca_scaling_code, bool,S_IRUGO ); -module_param_named (lock_hcalls, ehca_lock_hcalls, bool,S_IRUGO ); +module_param_named (lock_hcalls, ehca_lock_hcalls, bint,S_IRUGO );module_param_named (number_of_cqs, ehca_max_cq, int,S_IRUGO );module_param_named (number_of_qps, ehca_max_qp, int,S_IRUGO );drivers/s390/cio/cmf.c +1
-1@@ -98,7 +98,7 @@ enum cmb_format {* enum cmb_format. */ static int format =CMF_AUTODETECT ; -module_param (format, bool,0444 ); +module_param (format, bint,0444 );/** * struct cmb_operations - functions to use depending on cmb_format fs/ntfs/super.c +1
-1@@ -3198,7 +3198,7 @@ MODULE_DESCRIPTION("NTFS 1.2/3.x driverMODULE_VERSION (NTFS_VERSION );MODULE_LICENSE ("GPL" );#ifdef DEBUG -module_param (debug_msgs, bool,0 ); +module_param (debug_msgs, bint,0 );MODULE_PARM_DESC (debug_msgs,"Enable debug messages." );#endif include/linux/moduleparam.h +6
-0@@ -367,6 +367,12 @@ extern int param_set_invbool(const charextern int param_get_invbool (char *buffer,const struct kernel_param *kp);#define param_check_invbool (name, p) __param_check(name, p, bool) +/* An int, which can only be set like a bool (though it shows as an int). */ +extern struct kernel_param_ops param_ops_bint; +extern int param_set_bint (const char *val,const struct kernel_param *kp); +#define param_get_bint param_get_int +#define param_check_bint param_check_int +/** * module_param_array - a parameter which is an array of some type * @name: the name of the array variable kernel/params.c +24
-0@@ -369,6 +369,30 @@ struct kernel_param_ops param_ops_invboo };EXPORT_SYMBOL (param_ops_invbool); +int param_set_bint (const char *val,const struct kernel_param *kp) +{ +struct kernel_param boolkp; +bool v; +int ret; + +/* Match bool exactly, by re-using it. */ + boolkp = *kp; + boolkp.arg = &v; + boolkp.flags |=KPARAM_ISBOOL ; + + ret =param_set_bool (val, &boolkp); +if (ret ==0 ) + *(int *)kp->arg = v; +return ret; +} +EXPORT_SYMBOL (param_set_bint); + +struct kernel_param_ops param_ops_bint = { + .set = param_set_bint, + .get = param_get_int, +}; +EXPORT_SYMBOL (param_ops_bint); +/* We break the rule and mangle the string. */ static int param_array(const char *name, const char *val,sound/pci/intel8x0.c +2
-2@@ -95,13 +95,13 @@ module_param(ac97_quirk, charp, 0444);MODULE_PARM_DESC (ac97_quirk,"AC'97 workaround for strange hardware." );module_param (buggy_semaphore, bool,0444 );MODULE_PARM_DESC (buggy_semaphore,"Enable workaround for hardwares with problematic codec semaphores." ); -module_param (buggy_irq, bool,0444 ); +module_param (buggy_irq, bint,0444 );MODULE_PARM_DESC (buggy_irq,"Enable workaround for buggy interrupts on some motherboards." );module_param (xbox, bool,0444 );MODULE_PARM_DESC (xbox,"Set to 1 for Xbox, if you have problems with the AC'97 codec detection." );module_param (spdif_aclink, int,0444 );MODULE_PARM_DESC (spdif_aclink,"S/PDIF over AC-link." ); -module_param (inside_vm, bool,0444 ); +module_param (inside_vm, bint,0444 );MODULE_PARM_DESC (inside_vm,"KVM/Parallels optimization." );/* just for backward compatibility */
Signature · 7 lines
Guenter Roeck Distinguished Engineer PDU IP Systems -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html