WARNING: This server is unstable and will be retired in the next days. If you want to keep this forum available, please request immediately a migration on the Nabble Support forum. Forums that don't receive any migration request will be deleted forever.

 « Return to Thread: [PATCH 2/15] module_param: avoid bool abuse, add bint for special cases.

Re: [PATCH 2/15] module_param: avoid bool abuse, add bint for special cases.

by Takashi Iwai :: Rate this Message:

| View in Thread

At Thu, 15 Dec 2011 13:32:26 +1030,
Rusty Russell wrote:

>
> 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.)
>
> Cc: Steve Glendinning <steve.glendinning@...>
> Cc: Jean Delvare <khali@...>
> Cc: Guenter Roeck <guenter.roeck@...>
> Cc: Hoang-Nam Nguyen <hnguyen@...>
> Cc: Christoph Raisch <raisch@...>
> Cc: Roland Dreier <roland@...>
> Cc: Sean Hefty <sean.hefty@...>
> Cc: Hal Rosenstock <hal.rosenstock@...>
> Cc: linux390@...
> Cc: Anton Altaparmakov <anton@...>
> Cc: Jaroslav Kysela <perex@...>
> Cc: Takashi Iwai <tiwai@...>

For the sound part,

  Acked-by: Takashi Iwai <tiwai@...>

It's a nice feature.  I know many drivers can be replaced with bint
gracefully now (e.g. i915 driver).


thanks,

Takashi


> Cc: lm-sensors@...
> Cc: linux-rdma@...
> Cc: linux-s390@...
> Cc: linux-ntfs-dev@...
> Cc: alsa-devel@...
> Signed-off-by: Rusty Russell <rusty@...>
> ---
>  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(-)
>
> diff --git a/drivers/hwmon/emc2103.c b/drivers/hwmon/emc2103.c
> --- a/drivers/hwmon/emc2103.c
> +++ b/drivers/hwmon/emc2103.c
> @@ -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 {
> diff --git a/drivers/infiniband/hw/ehca/ehca_main.c b/drivers/infiniband/hw/ehca/ehca_main.c
> --- a/drivers/infiniband/hw/ehca/ehca_main.c
> +++ b/drivers/infiniband/hw/ehca/ehca_main.c
> @@ -82,7 +82,7 @@ module_param_named(port_act_time, ehca_p
>  module_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);
>  
> diff --git a/drivers/s390/cio/cmf.c b/drivers/s390/cio/cmf.c
> --- a/drivers/s390/cio/cmf.c
> +++ b/drivers/s390/cio/cmf.c
> @@ -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
> diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c
> --- a/fs/ntfs/super.c
> +++ b/fs/ntfs/super.c
> @@ -3198,7 +3198,7 @@ MODULE_DESCRIPTION("NTFS 1.2/3.x driver
>  MODULE_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
>  
> diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h
> --- a/include/linux/moduleparam.h
> +++ b/include/linux/moduleparam.h
> @@ -367,6 +367,12 @@ extern int param_set_invbool(const char
>  extern 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
> diff --git a/kernel/params.c b/kernel/params.c
> --- a/kernel/params.c
> +++ b/kernel/params.c
> @@ -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,
> diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c
> --- a/sound/pci/intel8x0.c
> +++ b/sound/pci/intel8x0.c
> @@ -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 */
>

------------------------------------------------------------------------------
10 Tips for Better Server Consolidation
Server virtualization is being driven by many needs.  
But none more important than the need to reduce IT complexity
while improving strategic productivity.  Learn More!
http://www.accelacomm.com/jaw/sdnl/114/51507609/
_______________________________________________
Linux-NTFS-Dev mailing list
Linux-NTFS-Dev@...
https://lists.sourceforge.net/lists/listinfo/linux-ntfs-dev

 « Return to Thread: [PATCH 2/15] module_param: avoid bool abuse, add bint for special cases.