Re: [PATCH 3/3] lib/vsprintf: Add %pC{,n,r} format specifiers for clocks

From: Andrew Morton
Date: Fri Feb 27 2015 - 17:18:43 EST


On Thu, 26 Feb 2015 12:13:03 +0100 Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> wrote:

> From: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>
>
> Add format specifiers for printing struct clk:
> - '%pC' or '%pCn': name (Common Clock Framework) or address (legacy
> clock framework) of the clock,
> - '%pCr': rate of the clock.
>
> ...
>
> +static noinline_for_stack
> +char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
> + const char *fmt)
> +{
> + if (!clk)
> + return string(buf, end, NULL, spec);
> +
> + switch (fmt[1]) {
> + case 'r':
> + return number(buf, end, clk_get_rate(clk), spec);
> +
> + case 'n':
> + default:
> +#ifdef CONFIG_COMMON_CLK
> + return string(buf, end, __clk_get_name(clk), spec);
> +#else
> + spec.base = 16;
> + spec.field_width = sizeof(unsigned long) * 2 + 2;
> + spec.flags |= SPECIAL | SMALL | ZEROPAD;
> + return number(buf, end, (unsigned long)clk, spec);
> +#endif
> + }
> +}

Seems a bit cruel to teeny systems which don't implement clock. How does
this look? Saves 160 bytes in each powerpc build!

static noinline_for_stack
char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
const char *fmt)
{
#ifdef CONFIG_HAVE_CLK
if (clk) {
switch (fmt[1]) {
case 'r':
return number(buf, end, clk_get_rate(clk), spec);

case 'n':
default:
#ifdef CONFIG_COMMON_CLK
return string(buf, end, __clk_get_name(clk), spec);
#else
spec.base = 16;
spec.field_width = sizeof(unsigned long) * 2 + 2;
spec.flags |= SPECIAL | SMALL | ZEROPAD;
return number(buf, end, (unsigned long)clk, spec);
#endif
}
}
#endif /* CONFIG_HAVE_CLK */

return string(buf, end, NULL, spec);
}

diff -puN lib/vsprintf.c~lib-vsprintf-add-%pcnr-format-specifiers-for-clocks-fix lib/vsprintf.c
--- a/lib/vsprintf.c~lib-vsprintf-add-%pcnr-format-specifiers-for-clocks-fix
+++ a/lib/vsprintf.c
@@ -1320,24 +1320,27 @@ static noinline_for_stack
char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
const char *fmt)
{
- if (!clk)
- return string(buf, end, NULL, spec);
+#ifdef CONFIG_HAVE_CLK
+ if (clk) {
+ switch (fmt[1]) {
+ case 'r':
+ return number(buf, end, clk_get_rate(clk), spec);

- switch (fmt[1]) {
- case 'r':
- return number(buf, end, clk_get_rate(clk), spec);
-
- case 'n':
- default:
-#ifdef CONFIG_COMMON_CLK
- return string(buf, end, __clk_get_name(clk), spec);
-#else
- spec.base = 16;
- spec.field_width = sizeof(unsigned long) * 2 + 2;
- spec.flags |= SPECIAL | SMALL | ZEROPAD;
- return number(buf, end, (unsigned long)clk, spec);
-#endif
+ case 'n':
+ default:
+#ifdef CONFIG_COMMON_CLK
+ return string(buf, end, __clk_get_name(clk), spec);
+#else
+ spec.base = 16;
+ spec.field_width = sizeof(unsigned long) * 2 + 2;
+ spec.flags |= SPECIAL | SMALL | ZEROPAD;
+ return number(buf, end, (unsigned long)clk, spec);
+#endif
+ }
}
+#endif /* CONFIG_HAVE_CLK */
+
+ return string(buf, end, NULL, spec);
}

int kptr_restrict __read_mostly;
_

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/