2007-09-26 10:39:17

by Maxim Uvarov

[permalink] [raw]
Subject: [PATCH] Since we have counters in __u64 format we have to print them with %llu macros.


Small fix for documentation.



---

Documentation/accounting/getdelays.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/Documentation/accounting/getdelays.c b/Documentation/accounting/getdelays.c
index cbee3a2..73924df 100644
--- a/Documentation/accounting/getdelays.c
+++ b/Documentation/accounting/getdelays.c
@@ -208,7 +208,7 @@ void print_delayacct(struct taskstats *t)
void task_context_switch_counts(struct taskstats *t)
{
printf("\n\nTask %15s%15s\n"
- " %15lu%15lu\n",
+ " %15llu%15llu\n",
"voluntary", "nonvoluntary",
t->nvcsw, t->nivcsw);
}


2007-09-26 11:03:47

by Balbir Singh

[permalink] [raw]
Subject: Re: [PATCH] Since we have counters in __u64 format we have to print themwith %llu macros.

Maxim Uvarov wrote:
> Small fix for documentation.
>
>
>
> ---
>
> Documentation/accounting/getdelays.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/Documentation/accounting/getdelays.c b/Documentation/accounting/getdelays.c
> index cbee3a2..73924df 100644
> --- a/Documentation/accounting/getdelays.c
> +++ b/Documentation/accounting/getdelays.c
> @@ -208,7 +208,7 @@ void print_delayacct(struct taskstats *t)
> void task_context_switch_counts(struct taskstats *t)
> {
> printf("\n\nTask %15s%15s\n"
> - " %15lu%15lu\n",
> + " %15llu%15llu\n",
> "voluntary", "nonvoluntary",
> t->nvcsw, t->nivcsw);
> }
>

Looks good!

Acked-by: Balbir Singh <[email protected]>


--
Warm Regards,
Balbir Singh
Linux Technology Center
IBM, ISTL

2007-09-26 11:32:49

by Andreas Schwab

[permalink] [raw]
Subject: Re: [PATCH] Since we have counters in __u64 format we have to print them with %llu macros.

Maxim Uvarov <[email protected]> writes:

> diff --git a/Documentation/accounting/getdelays.c b/Documentation/accounting/getdelays.c
> index cbee3a2..73924df 100644
> --- a/Documentation/accounting/getdelays.c
> +++ b/Documentation/accounting/getdelays.c
> @@ -208,7 +208,7 @@ void print_delayacct(struct taskstats *t)
> void task_context_switch_counts(struct taskstats *t)
> {
> printf("\n\nTask %15s%15s\n"
> - " %15lu%15lu\n",
> + " %15llu%15llu\n",
> "voluntary", "nonvoluntary",
> t->nvcsw, t->nivcsw);

__u64 is not always long long.

Andreas.

--
Andreas Schwab, SuSE Labs, [email protected]
SuSE Linux Products GmbH, Maxfeldstra?e 5, 90409 N?rnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."

2007-09-26 11:49:06

by Balbir Singh

[permalink] [raw]
Subject: Re: [PATCH] Since we have counters in __u64 format we have to print them with %llu macros.

Andreas Schwab wrote:
> Maxim Uvarov <[email protected]> writes:
>
>> diff --git a/Documentation/accounting/getdelays.c b/Documentation/accounting/getdelays.c
>> index cbee3a2..73924df 100644
>> --- a/Documentation/accounting/getdelays.c
>> +++ b/Documentation/accounting/getdelays.c
>> @@ -208,7 +208,7 @@ void print_delayacct(struct taskstats *t)
>> void task_context_switch_counts(struct taskstats *t)
>> {
>> printf("\n\nTask %15s%15s\n"
>> - " %15lu%15lu\n",
>> + " %15llu%15llu\n",
>> "voluntary", "nonvoluntary",
>> t->nvcsw, t->nivcsw);
>
> __u64 is not always long long.

What is the maximum size of long long across all architectures?
How does one format __u64 for printing?

--
Warm Regards,
Balbir Singh
Linux Technology Center
IBM, ISTL

2007-09-26 12:43:43

by Mikael Pettersson

[permalink] [raw]
Subject: Re: [PATCH] Since we have counters in __u64 format we have to print them with %llu macros.

On Wed, 26 Sep 2007 17:18:06 +0530, Balbir Singh wrote:
> Andreas Schwab wrote:
> > Maxim Uvarov <[email protected]> writes:
> >
> >> diff --git a/Documentation/accounting/getdelays.c b/Documentation/accounting/getdelays.c
> >> index cbee3a2..73924df 100644
> >> --- a/Documentation/accounting/getdelays.c
> >> +++ b/Documentation/accounting/getdelays.c
> >> @@ -208,7 +208,7 @@ void print_delayacct(struct taskstats *t)
> >> void task_context_switch_counts(struct taskstats *t)
> >> {
> >> printf("\n\nTask %15s%15s\n"
> >> - " %15lu%15lu\n",
> >> + " %15llu%15llu\n",
> >> "voluntary", "nonvoluntary",
> >> t->nvcsw, t->nivcsw);
> >
> > __u64 is not always long long.
>
> What is the maximum size of long long across all architectures?
> How does one format __u64 for printing?

With %lu you get warnings when u64 is long long (32-bit).
With %llu you get warnings when u64 is plain long (most 64-bit).

Hence %llu + long long cast, i.e.:
printf("%llu", (unsigned long long)value);

This is ugly but luckily imposes no runtime overheads on
current 32- or 64-bit machines.

This could be done more cleanly if the u64 typedef also
#define:d a corresponding FMT_U64 format string.

2007-09-26 18:29:52

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [PATCH] Since we have counters in __u64 format we have to print them with %llu macros.

Balbir Singh wrote:
> Andreas Schwab wrote:
>> Maxim Uvarov <[email protected]> writes:
>>
>>> diff --git a/Documentation/accounting/getdelays.c b/Documentation/accounting/getdelays.c
>>> index cbee3a2..73924df 100644
>>> --- a/Documentation/accounting/getdelays.c
>>> +++ b/Documentation/accounting/getdelays.c
>>> @@ -208,7 +208,7 @@ void print_delayacct(struct taskstats *t)
>>> void task_context_switch_counts(struct taskstats *t)
>>> {
>>> printf("\n\nTask %15s%15s\n"
>>> - " %15lu%15lu\n",
>>> + " %15llu%15llu\n",
>>> "voluntary", "nonvoluntary",
>>> t->nvcsw, t->nivcsw);
>> __u64 is not always long long.
>
> What is the maximum size of long long across all architectures?
> How does one format __u64 for printing?
>

In user space, use the macro PRIu64 (or PRIx64 etc) from <inttypes.h>.

-hpa

2007-09-27 08:20:28

by Balbir Singh

[permalink] [raw]
Subject: Re: [PATCH] Since we have counters in __u64 format we have to print them with %llu macros.

H. Peter Anvin wrote:
> Balbir Singh wrote:
>> Andreas Schwab wrote:
>>> Maxim Uvarov <[email protected]> writes:
>>>
>>>> diff --git a/Documentation/accounting/getdelays.c b/Documentation/accounting/getdelays.c
>>>> index cbee3a2..73924df 100644
>>>> --- a/Documentation/accounting/getdelays.c
>>>> +++ b/Documentation/accounting/getdelays.c
>>>> @@ -208,7 +208,7 @@ void print_delayacct(struct taskstats *t)
>>>> void task_context_switch_counts(struct taskstats *t)
>>>> {
>>>> printf("\n\nTask %15s%15s\n"
>>>> - " %15lu%15lu\n",
>>>> + " %15llu%15llu\n",
>>>> "voluntary", "nonvoluntary",
>>>> t->nvcsw, t->nivcsw);
>>> __u64 is not always long long.
>> What is the maximum size of long long across all architectures?
>> How does one format __u64 for printing?
>>
>
> In user space, use the macro PRIu64 (or PRIx64 etc) from <inttypes.h>.
>
> -hpa

Thanks, I'll look into it

--
Warm Regards,
Balbir Singh
Linux Technology Center
IBM, ISTL