Message ID | 20191001080739.18513-1-jani.nikula@intel.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v3] string-choice: add yesno(), onoff(), enableddisabled(), plural() helpers | expand |
On Tue, Oct 01, 2019 at 11:07:39AM +0300, Jani Nikula wrote: > The kernel has plenty of ternary operators to choose between constant > strings, such as condition ? "yes" : "no", as well as value == 1 ? "" : > "s": > > $ git grep '? "yes" : "no"' | wc -l > 258 > $ git grep '? "on" : "off"' | wc -l > 204 > $ git grep '? "enabled" : "disabled"' | wc -l > 196 > $ git grep '? "" : "s"' | wc -l > 25 > > Additionally, there are some occurences of the same in reverse order, > split to multiple lines, or otherwise not caught by the simple grep. > > Add helpers to return the constant strings. Remove existing equivalent > and conflicting functions in i915, cxgb4, and USB core. Further > conversion can be done incrementally. > > While the main goal here is to abstract recurring patterns, and slightly > clean up the code base by not open coding the ternary operators, there > are also some space savings to be had via better string constant > pooling. > > Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> > Cc: intel-gfx@lists.freedesktop.org > Cc: Vishal Kulkarni <vishal@chelsio.com> > Cc: netdev@vger.kernel.org > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Cc: linux-usb@vger.kernel.org > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: linux-kernel@vger.kernel.org > Cc: Julia Lawall <julia.lawall@lip6.fr> > Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> > Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> # v1 As this is a totally different version, please drop my reviewed-by as that's really not true here :(
On Tue, 01 Oct 2019, Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > On Tue, Oct 01, 2019 at 11:07:39AM +0300, Jani Nikula wrote: >> The kernel has plenty of ternary operators to choose between constant >> strings, such as condition ? "yes" : "no", as well as value == 1 ? "" : >> "s": >> >> $ git grep '? "yes" : "no"' | wc -l >> 258 >> $ git grep '? "on" : "off"' | wc -l >> 204 >> $ git grep '? "enabled" : "disabled"' | wc -l >> 196 >> $ git grep '? "" : "s"' | wc -l >> 25 >> >> Additionally, there are some occurences of the same in reverse order, >> split to multiple lines, or otherwise not caught by the simple grep. >> >> Add helpers to return the constant strings. Remove existing equivalent >> and conflicting functions in i915, cxgb4, and USB core. Further >> conversion can be done incrementally. >> >> While the main goal here is to abstract recurring patterns, and slightly >> clean up the code base by not open coding the ternary operators, there >> are also some space savings to be had via better string constant >> pooling. >> >> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> >> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> >> Cc: intel-gfx@lists.freedesktop.org >> Cc: Vishal Kulkarni <vishal@chelsio.com> >> Cc: netdev@vger.kernel.org >> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> >> Cc: linux-usb@vger.kernel.org >> Cc: Andrew Morton <akpm@linux-foundation.org> >> Cc: linux-kernel@vger.kernel.org >> Cc: Julia Lawall <julia.lawall@lip6.fr> >> Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> >> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> # v1 > > As this is a totally different version, please drop my reviewed-by as > that's really not true here :( I did indicate it was for v1. Indeed v2 was different, but care to elaborate what's wrong with v3? BR, Jani.
On Tue, Oct 01, 2019 at 12:42:34PM +0300, Jani Nikula wrote: > On Tue, 01 Oct 2019, Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Tue, Oct 01, 2019 at 11:07:39AM +0300, Jani Nikula wrote: > >> The kernel has plenty of ternary operators to choose between constant > >> strings, such as condition ? "yes" : "no", as well as value == 1 ? "" : > >> "s": > >> > >> $ git grep '? "yes" : "no"' | wc -l > >> 258 > >> $ git grep '? "on" : "off"' | wc -l > >> 204 > >> $ git grep '? "enabled" : "disabled"' | wc -l > >> 196 > >> $ git grep '? "" : "s"' | wc -l > >> 25 > >> > >> Additionally, there are some occurences of the same in reverse order, > >> split to multiple lines, or otherwise not caught by the simple grep. > >> > >> Add helpers to return the constant strings. Remove existing equivalent > >> and conflicting functions in i915, cxgb4, and USB core. Further > >> conversion can be done incrementally. > >> > >> While the main goal here is to abstract recurring patterns, and slightly > >> clean up the code base by not open coding the ternary operators, there > >> are also some space savings to be had via better string constant > >> pooling. > >> > >> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > >> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> > >> Cc: intel-gfx@lists.freedesktop.org > >> Cc: Vishal Kulkarni <vishal@chelsio.com> > >> Cc: netdev@vger.kernel.org > >> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > >> Cc: linux-usb@vger.kernel.org > >> Cc: Andrew Morton <akpm@linux-foundation.org> > >> Cc: linux-kernel@vger.kernel.org > >> Cc: Julia Lawall <julia.lawall@lip6.fr> > >> Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> > >> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> # v1 > > > > As this is a totally different version, please drop my reviewed-by as > > that's really not true here :( > > I did indicate it was for v1. Indeed v2 was different, but care to > elaborate what's wrong with v3? No idea, but I haven't reviewed it yet, so to put my tag on there isn't the nicest... greg k-h
On Tue, 01 Oct 2019, Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > On Tue, Oct 01, 2019 at 12:42:34PM +0300, Jani Nikula wrote: >> On Tue, 01 Oct 2019, Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: >> > On Tue, Oct 01, 2019 at 11:07:39AM +0300, Jani Nikula wrote: >> >> The kernel has plenty of ternary operators to choose between constant >> >> strings, such as condition ? "yes" : "no", as well as value == 1 ? "" : >> >> "s": >> >> >> >> $ git grep '? "yes" : "no"' | wc -l >> >> 258 >> >> $ git grep '? "on" : "off"' | wc -l >> >> 204 >> >> $ git grep '? "enabled" : "disabled"' | wc -l >> >> 196 >> >> $ git grep '? "" : "s"' | wc -l >> >> 25 >> >> >> >> Additionally, there are some occurences of the same in reverse order, >> >> split to multiple lines, or otherwise not caught by the simple grep. >> >> >> >> Add helpers to return the constant strings. Remove existing equivalent >> >> and conflicting functions in i915, cxgb4, and USB core. Further >> >> conversion can be done incrementally. >> >> >> >> While the main goal here is to abstract recurring patterns, and slightly >> >> clean up the code base by not open coding the ternary operators, there >> >> are also some space savings to be had via better string constant >> >> pooling. >> >> >> >> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> >> >> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> >> >> Cc: intel-gfx@lists.freedesktop.org >> >> Cc: Vishal Kulkarni <vishal@chelsio.com> >> >> Cc: netdev@vger.kernel.org >> >> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> >> >> Cc: linux-usb@vger.kernel.org >> >> Cc: Andrew Morton <akpm@linux-foundation.org> >> >> Cc: linux-kernel@vger.kernel.org >> >> Cc: Julia Lawall <julia.lawall@lip6.fr> >> >> Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> >> >> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> # v1 >> > >> > As this is a totally different version, please drop my reviewed-by as >> > that's really not true here :( >> >> I did indicate it was for v1. Indeed v2 was different, but care to >> elaborate what's wrong with v3? > > No idea, but I haven't reviewed it yet, so to put my tag on there isn't > the nicest... Apologies, no harm intended. At times, I've seen the "# vN" notation used, I suppose both to indicate that the *ideas* presented in the earlier version warranted Reviewed-by from so-and-so, though this particular version still needs detailed review, and that the approval of the reviewer of the earlier version should be sought out before merging a subsequent version. BR, Jani.
On Tue, 01 Oct 2019, Jani Nikula <jani.nikula@intel.com> wrote: > While the main goal here is to abstract recurring patterns, and slightly > clean up the code base by not open coding the ternary operators, there > are also some space savings to be had via better string constant > pooling. Make that """ While the main goal here is to abstract recurring patterns, and slightly clean up the code base by not open coding the ternary operators, using functions to access the strings also makes it easier to seek different implementation options for potential space savings on string constants in the future. """ to be more explicit that this change does not directly translate to any space savings. Rasmus, okay with that? BR, Jani.
On 02/10/2019 12.11, Jani Nikula wrote: > On Tue, 01 Oct 2019, Jani Nikula <jani.nikula@intel.com> wrote: >> While the main goal here is to abstract recurring patterns, and slightly >> clean up the code base by not open coding the ternary operators, there >> are also some space savings to be had via better string constant >> pooling. > > Make that > > """ > While the main goal here is to abstract recurring patterns, and slightly > clean up the code base by not open coding the ternary operators, using > functions to access the strings also makes it easier to seek different > implementation options for potential space savings on string constants > in the future. > """ > > to be more explicit that this change does not directly translate to any > space savings. > > Rasmus, okay with that? It's rather fluffy, but it doesn't make unfounded claims about space savings, so in that regard I'm fine with it. [It's probably just my lack of imagination, but I still fail to see how one could ever achieve better than the linker creating just 1 vmlinux-wide instance of "enabled", which I believe happens regardless of whether one uses these helpers or not.] Rasmus
On Tue, Oct 01, 2019 at 11:07:39AM +0300, Jani Nikula wrote: > The kernel has plenty of ternary operators to choose between constant > strings, such as condition ? "yes" : "no", as well as value == 1 ? "" : > "s": > > $ git grep '? "yes" : "no"' | wc -l > 258 > $ git grep '? "on" : "off"' | wc -l > 204 > $ git grep '? "enabled" : "disabled"' | wc -l > 196 > $ git grep '? "" : "s"' | wc -l > 25 > > Additionally, there are some occurences of the same in reverse order, > split to multiple lines, or otherwise not caught by the simple grep. > > Add helpers to return the constant strings. Remove existing equivalent > and conflicting functions in i915, cxgb4, and USB core. Further > conversion can be done incrementally. > > While the main goal here is to abstract recurring patterns, and slightly > clean up the code base by not open coding the ternary operators, there > are also some space savings to be had via better string constant > pooling. > > Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> > Cc: intel-gfx@lists.freedesktop.org > Cc: Vishal Kulkarni <vishal@chelsio.com> > Cc: netdev@vger.kernel.org > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Cc: linux-usb@vger.kernel.org > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: linux-kernel@vger.kernel.org > Cc: Julia Lawall <julia.lawall@lip6.fr> > Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> > Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> # v1 > Signed-off-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> For this version at least :)
diff --git a/drivers/gpu/drm/i915/i915_utils.h b/drivers/gpu/drm/i915/i915_utils.h index 562f756da421..794f02a90efe 100644 --- a/drivers/gpu/drm/i915/i915_utils.h +++ b/drivers/gpu/drm/i915/i915_utils.h @@ -28,6 +28,7 @@ #include <linux/list.h> #include <linux/overflow.h> #include <linux/sched.h> +#include <linux/string-choice.h> #include <linux/types.h> #include <linux/workqueue.h> @@ -395,21 +396,6 @@ wait_remaining_ms_from_jiffies(unsigned long timestamp_jiffies, int to_wait_ms) #define MBps(x) KBps(1000 * (x)) #define GBps(x) ((u64)1000 * MBps((x))) -static inline const char *yesno(bool v) -{ - return v ? "yes" : "no"; -} - -static inline const char *onoff(bool v) -{ - return v ? "on" : "off"; -} - -static inline const char *enableddisabled(bool v) -{ - return v ? "enabled" : "disabled"; -} - static inline void add_taint_for_CI(unsigned int taint) { /* diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c index ae6a47dd7dc9..d9123dae1d00 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c @@ -35,6 +35,7 @@ #include <linux/seq_file.h> #include <linux/debugfs.h> #include <linux/string_helpers.h> +#include <linux/string-choice.h> #include <linux/sort.h> #include <linux/ctype.h> @@ -2023,17 +2024,6 @@ static const struct file_operations rss_debugfs_fops = { /* RSS Configuration. */ -/* Small utility function to return the strings "yes" or "no" if the supplied - * argument is non-zero. - */ -static const char *yesno(int x) -{ - static const char *yes = "yes"; - static const char *no = "no"; - - return x ? yes : no; -} - static int rss_config_show(struct seq_file *seq, void *v) { struct adapter *adapter = seq->private; diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c index 151a74a54386..52cee9067eb4 100644 --- a/drivers/usb/core/config.c +++ b/drivers/usb/core/config.c @@ -10,6 +10,7 @@ #include <linux/module.h> #include <linux/slab.h> #include <linux/device.h> +#include <linux/string-choice.h> #include <asm/byteorder.h> #include "usb.h" @@ -19,11 +20,6 @@ #define USB_MAXCONFIG 8 /* Arbitrary limit */ -static inline const char *plural(int n) -{ - return (n == 1 ? "" : "s"); -} - static int find_next_descriptor(unsigned char *buffer, int size, int dt1, int dt2, int *num_skipped) { diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c index 38f8b3e31762..a784a09794d6 100644 --- a/drivers/usb/core/generic.c +++ b/drivers/usb/core/generic.c @@ -21,14 +21,10 @@ #include <linux/usb.h> #include <linux/usb/hcd.h> +#include <linux/string-choice.h> #include <uapi/linux/usb/audio.h> #include "usb.h" -static inline const char *plural(int n) -{ - return (n == 1 ? "" : "s"); -} - static int is_rndis(struct usb_interface_descriptor *desc) { return desc->bInterfaceClass == USB_CLASS_COMM diff --git a/include/linux/string-choice.h b/include/linux/string-choice.h new file mode 100644 index 000000000000..320b598bd8f0 --- /dev/null +++ b/include/linux/string-choice.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright © 2019 Intel Corporation + */ + +#ifndef __STRING_CHOICE_H__ +#define __STRING_CHOICE_H__ + +#include <linux/types.h> + +static inline const char *yesno(bool v) +{ + return v ? "yes" : "no"; +} + +static inline const char *onoff(bool v) +{ + return v ? "on" : "off"; +} + +static inline const char *enableddisabled(bool v) +{ + return v ? "enabled" : "disabled"; +} + +static inline const char *plural(long v) +{ + return v == 1 ? "" : "s"; +} + +#endif /* __STRING_CHOICE_H__ */