Re: [PATCH] usb: musb: use the new %pa format specifier for dma_addr_t

Emil Goode
2013-06-02T13:32:59Z

Maybe wait and see if %pa gets more usage and if the discussion comes up again.

Best regards,

Emil

On Sat, Jun 01, 2013 at 04:22:18PM -0700, Joe Perches wrote:
> On Sun, 2013-06-02 at 01:06 +0200, Emil Goode wrote:
> > Maybe there should be another format specifier %da and Randy's
> > clarifying comment
>
> maybe %pad but I think the whole thing isn't much necessary.
> It seems there are a grand total of 3 uses of %pa today.
>
> Maybe:
> ---
> Documentation/printk-formats.txt | 7 +++++++
> lib/vsprintf.c | 19 +++++++++++++++----
> 2 files changed, 22 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/printk-formats.txt b/Documentation/printk-formats.txt
> index 3af5ae6..fa48403 100644
> --- a/Documentation/printk-formats.txt
> +++ b/Documentation/printk-formats.txt
> @@ -63,6 +63,13 @@ Physical addresses:
> resource_size_t) which can vary based on build options, regardless of
> the width of the CPU data path. Passed by reference.
>
> +dma_addr_t addresses:
> +
> + %pad 0x01234567 or 0x0123456789abcdef
> +
> + For printing a dma_addr_t type which can vary based on build options,
> + regardless of the width of the CPU data path. Passed by reference.
> +
> Raw buffer as a hex string:
> %*ph 00 01 02 ... 3f
> %*phC 00:01:02: ... :3f
> diff --git a/lib/vsprintf.c b/lib/vsprintf.c
> index 7d84676..b6b8390 100644
> --- a/lib/vsprintf.c
> +++ b/lib/vsprintf.c
> @@ -1039,6 +1039,7 @@ int kptr_restrict __read_mostly;
> * The maximum supported length is 64 bytes of the input. Consider
> * to use print_hex_dump() for the larger input.
> * - 'a' For a phys_addr_t type and its derivative types (passed by reference)
> + * - 'ad' For a dma_addr_t type
> *
> * Note: The difference between 'S' and 'F' is that on ia64 and ppc64
> * function pointers are really function descriptors, which contain a
> @@ -1129,12 +1130,22 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
> return netdev_feature_string(buf, end, ptr, spec);
> }
> break;
> - case 'a':
> + case 'a': {
> + unsigned long long val;
> spec.flags |= SPECIAL | SMALL | ZEROPAD;
> - spec.field_width = sizeof(phys_addr_t) * 2 + 2;
> spec.base = 16;
> - return number(buf, end,
> - (unsigned long long) *((phys_addr_t *)ptr), spec);
> + switch (fmt[1]) {
> + case 'd':
> + spec.field_width = sizeof(dma_addr_t) * 2 + 2;
> + val = (unsigned long long)*((dma_addr_t *)ptr);
> + break;
> + default:
> + spec.field_width = sizeof(phys_addr_t) * 2 + 2;
> + val = (unsigned long long)*((phys_addr_t *)ptr);
> + break;
> + }
> + return number(buf, end, val, spec);
> + }
> }
> spec.flags |= SMALL;
> if (spec.field_width = -1) {
>
>