On 30/09/2019 16.18, 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": > > > --- > > v2: add string-choice.[ch] to not clutter kernel.h and to actually save > space on string constants. > > +EXPORT_SYMBOL(enableddisabled); > + > +const char *plural(long v) > +{ > + return v == 1 ? "" : "s"; > +} > +EXPORT_SYMBOL(plural); > Say what? I'll bet you a beer that this is a net loss: You're adding hundreds of bytes of export symbol overhead, plus forcing gcc to emit actual calls at the call sites, with all the register saving/restoring that implies. Please just do this as static inlines. As I said, the linker is perfectly capable of merging string literals across translation units (but of course not between vmlinux and modules), so any built-in code that uses those helpers (or open-codes them, doesn't matter) will automatically share those literals. Rasmus