* [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning
@ 2014-05-21 0:19 ` Chen Gang
0 siblings, 0 replies; 17+ messages in thread
From: Chen Gang @ 2014-05-21 0:19 UTC (permalink / raw)
To: dccp
'dccp_timestamp_seed' is initialized once by ktime_get_real() in
dccp_timestamping_init(). It is always less than ktime_get_real()
in dccp_timestamp().
Then, ktime_us_delta() in dccp_timestamp() will always return positive
number. So can use manual type cast to let compiler and do_div() know
about it to avoid warning.
The related warning (with allmodconfig under unicore32):
CC [M] net/dccp/timer.o
net/dccp/timer.c: In function ‘dccp_timestamp’:
net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
---
net/dccp/timer.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/dccp/timer.c b/net/dccp/timer.c
index 16f0b22..1cd46a3 100644
--- a/net/dccp/timer.c
+++ b/net/dccp/timer.c
@@ -280,7 +280,7 @@ static ktime_t dccp_timestamp_seed;
*/
u32 dccp_timestamp(void)
{
- s64 delta = ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
+ u64 delta = (u64)ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
do_div(delta, 10);
return delta;
--
1.9.2.459.g68773ac
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning
@ 2014-05-21 0:19 ` Chen Gang
0 siblings, 0 replies; 17+ messages in thread
From: Chen Gang @ 2014-05-21 0:19 UTC (permalink / raw)
To: gerrit
Cc: Guan Xuetao, David Miller, dccp, netdev,
linux-kernel@vger.kernel.org
'dccp_timestamp_seed' is initialized once by ktime_get_real() in
dccp_timestamping_init(). It is always less than ktime_get_real()
in dccp_timestamp().
Then, ktime_us_delta() in dccp_timestamp() will always return positive
number. So can use manual type cast to let compiler and do_div() know
about it to avoid warning.
The related warning (with allmodconfig under unicore32):
CC [M] net/dccp/timer.o
net/dccp/timer.c: In function ‘dccp_timestamp’:
net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
---
net/dccp/timer.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/dccp/timer.c b/net/dccp/timer.c
index 16f0b22..1cd46a3 100644
--- a/net/dccp/timer.c
+++ b/net/dccp/timer.c
@@ -280,7 +280,7 @@ static ktime_t dccp_timestamp_seed;
*/
u32 dccp_timestamp(void)
{
- s64 delta = ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
+ u64 delta = (u64)ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
do_div(delta, 10);
return delta;
--
1.9.2.459.g68773ac
^ permalink raw reply related [flat|nested] 17+ messages in thread
* 回复: [PATCH linux-next] net/dccp/timer.c: use 'u
2014-05-21 0:19 ` Chen Gang
@ 2014-05-22 0:26 ` 管雪涛
-1 siblings, 0 replies; 17+ messages in thread
From: 管雪涛 @ 2014-05-22 0:26 UTC (permalink / raw)
To: dccp
----- Chen Gang <gang.chen.5i5j@gmail.com> 写道:
> 'dccp_timestamp_seed' is initialized once by ktime_get_real() in
> dccp_timestamping_init(). It is always less than ktime_get_real()
> in dccp_timestamp().
>
> Then, ktime_us_delta() in dccp_timestamp() will always return positive
> number. So can use manual type cast to let compiler and do_div() know
> about it to avoid warning.
>
> The related warning (with allmodconfig under unicore32):
>
> CC [M] net/dccp/timer.o
> net/dccp/timer.c: In function ‘dccp_timestamp’:
> net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
>
>
> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
> ---
> net/dccp/timer.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/dccp/timer.c b/net/dccp/timer.c
> index 16f0b22..1cd46a3 100644
> --- a/net/dccp/timer.c
> +++ b/net/dccp/timer.c
> @@ -280,7 +280,7 @@ static ktime_t dccp_timestamp_seed;
> */
> u32 dccp_timestamp(void)
> {
> - s64 delta = ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
> + u64 delta = (u64)ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
Do you assume that delta should be very small?
Otherwise, return value will be different if data type is changed.
>
> do_div(delta, 10);
> return delta;
> --
> 1.9.2.459.g68773ac
^ permalink raw reply [flat|nested] 17+ messages in thread
* 回复: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning
@ 2014-05-22 0:26 ` 管雪涛
0 siblings, 0 replies; 17+ messages in thread
From: 管雪涛 @ 2014-05-22 0:26 UTC (permalink / raw)
To: Chen Gang; +Cc: gerrit, Guan Xuetao, David Miller, dccp, netdev, linux-kernel
----- Chen Gang <gang.chen.5i5j@gmail.com> 写道:
> 'dccp_timestamp_seed' is initialized once by ktime_get_real() in
> dccp_timestamping_init(). It is always less than ktime_get_real()
> in dccp_timestamp().
>
> Then, ktime_us_delta() in dccp_timestamp() will always return positive
> number. So can use manual type cast to let compiler and do_div() know
> about it to avoid warning.
>
> The related warning (with allmodconfig under unicore32):
>
> CC [M] net/dccp/timer.o
> net/dccp/timer.c: In function ‘dccp_timestamp’:
> net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
>
>
> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
> ---
> net/dccp/timer.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/dccp/timer.c b/net/dccp/timer.c
> index 16f0b22..1cd46a3 100644
> --- a/net/dccp/timer.c
> +++ b/net/dccp/timer.c
> @@ -280,7 +280,7 @@ static ktime_t dccp_timestamp_seed;
> */
> u32 dccp_timestamp(void)
> {
> - s64 delta = ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
> + u64 delta = (u64)ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
Do you assume that delta should be very small?
Otherwise, return value will be different if data type is changed.
>
> do_div(delta, 10);
> return delta;
> --
> 1.9.2.459.g68773ac
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: 回复: [PATCH linux-next] net/dccp/ =?UTF-8?B?dGltZXIuYzogdXNlICd1N
2014-05-22 0:26 ` 回复: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning 管雪涛
@ 2014-05-22 1:01 ` Chen Gang
-1 siblings, 0 replies; 17+ messages in thread
From: Chen Gang @ 2014-05-22 1:01 UTC (permalink / raw)
To: dccp
On 05/22/2014 08:26 AM, 管雪涛 wrote:
>
> ----- Chen Gang <gang.chen.5i5j@gmail.com> 写道:
>> 'dccp_timestamp_seed' is initialized once by ktime_get_real() in
>> dccp_timestamping_init(). It is always less than ktime_get_real()
>> in dccp_timestamp().
>>
>> Then, ktime_us_delta() in dccp_timestamp() will always return positive
>> number. So can use manual type cast to let compiler and do_div() know
>> about it to avoid warning.
>>
>> The related warning (with allmodconfig under unicore32):
>>
>> CC [M] net/dccp/timer.o
>> net/dccp/timer.c: In function ‘dccp_timestamp’:
>> net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
>>
>>
>> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
>> ---
>> net/dccp/timer.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/net/dccp/timer.c b/net/dccp/timer.c
>> index 16f0b22..1cd46a3 100644
>> --- a/net/dccp/timer.c
>> +++ b/net/dccp/timer.c
>> @@ -280,7 +280,7 @@ static ktime_t dccp_timestamp_seed;
>> */
>> u32 dccp_timestamp(void)
>> {
>> - s64 delta = ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
>> + u64 delta = (u64)ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
>
> Do you assume that delta should be very small?
> Otherwise, return value will be different if data type is changed.
>
'u64' is a very very large number. after calculation, if it is based on
nano second (although I am not quite sure whether it is based on it).
a hour, 3,600,000,000,000ns
a day, 90,000,000,000,000ns
a year, 50,000,000,000,000,000ns
10 years, 500,000,000,000,000,000ns
100 years, 5,000,000,000,000,000,000ns
4G * 4G = 16,000,000,000,000,000,000ns
So we can assume it will never overflow for 'u64'.
Thanks.
--
Chen Gang
Open, share, and attitude like air, water, and life which God blessed
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: 回复: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning
@ 2014-05-22 1:01 ` Chen Gang
0 siblings, 0 replies; 17+ messages in thread
From: Chen Gang @ 2014-05-22 1:01 UTC (permalink / raw)
To: 管雪涛
Cc: gerrit, Guan Xuetao, David Miller, dccp, netdev, linux-kernel
On 05/22/2014 08:26 AM, 管雪涛 wrote:
>
> ----- Chen Gang <gang.chen.5i5j@gmail.com> 写道:
>> 'dccp_timestamp_seed' is initialized once by ktime_get_real() in
>> dccp_timestamping_init(). It is always less than ktime_get_real()
>> in dccp_timestamp().
>>
>> Then, ktime_us_delta() in dccp_timestamp() will always return positive
>> number. So can use manual type cast to let compiler and do_div() know
>> about it to avoid warning.
>>
>> The related warning (with allmodconfig under unicore32):
>>
>> CC [M] net/dccp/timer.o
>> net/dccp/timer.c: In function ‘dccp_timestamp’:
>> net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
>>
>>
>> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
>> ---
>> net/dccp/timer.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/net/dccp/timer.c b/net/dccp/timer.c
>> index 16f0b22..1cd46a3 100644
>> --- a/net/dccp/timer.c
>> +++ b/net/dccp/timer.c
>> @@ -280,7 +280,7 @@ static ktime_t dccp_timestamp_seed;
>> */
>> u32 dccp_timestamp(void)
>> {
>> - s64 delta = ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
>> + u64 delta = (u64)ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
>
> Do you assume that delta should be very small?
> Otherwise, return value will be different if data type is changed.
>
'u64' is a very very large number. after calculation, if it is based on
nano second (although I am not quite sure whether it is based on it).
a hour, 3,600,000,000,000ns
a day, 90,000,000,000,000ns
a year, 50,000,000,000,000,000ns
10 years, 500,000,000,000,000,000ns
100 years, 5,000,000,000,000,000,000ns
4G * 4G = 16,000,000,000,000,000,000ns
So we can assume it will never overflow for 'u64'.
Thanks.
--
Chen Gang
Open, share, and attitude like air, water, and life which God blessed
^ permalink raw reply [flat|nested] 17+ messages in thread
* 回复: Re: 回复: [PATCH linux- =
2014-05-22 1:01 ` 回复: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning Chen Gang
@ 2014-05-22 1:06 ` 管雪涛
-1 siblings, 0 replies; 17+ messages in thread
From: 管雪涛 @ 2014-05-22 1:06 UTC (permalink / raw)
To: dccp
----- Chen Gang <gang.chen.5i5j@gmail.com> 写道:
> On 05/22/2014 08:26 AM, 管雪涛 wrote:
> >
> > ----- Chen Gang <gang.chen.5i5j@gmail.com> 写道:
> >> 'dccp_timestamp_seed' is initialized once by ktime_get_real() in
> >> dccp_timestamping_init(). It is always less than ktime_get_real()
> >> in dccp_timestamp().
> >>
> >> Then, ktime_us_delta() in dccp_timestamp() will always return positive
> >> number. So can use manual type cast to let compiler and do_div() know
> >> about it to avoid warning.
> >>
> >> The related warning (with allmodconfig under unicore32):
> >>
> >> CC [M] net/dccp/timer.o
> >> net/dccp/timer.c: In function ‘dccp_timestamp’:
> >> net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
> >>
> >>
> >> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
> >> ---
> >> net/dccp/timer.c | 2 +-
> >> 1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/net/dccp/timer.c b/net/dccp/timer.c
> >> index 16f0b22..1cd46a3 100644
> >> --- a/net/dccp/timer.c
> >> +++ b/net/dccp/timer.c
> >> @@ -280,7 +280,7 @@ static ktime_t dccp_timestamp_seed;
> >> */
> >> u32 dccp_timestamp(void)
> >> {
> >> - s64 delta = ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
> >> + u64 delta = (u64)ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
> >
> > Do you assume that delta should be very small?
> > Otherwise, return value will be different if data type is changed.
> >
>
> 'u64' is a very very large number. after calculation, if it is based on
> nano second (although I am not quite sure whether it is based on it).
>
> a hour, 3,600,000,000,000ns
> a day, 90,000,000,000,000ns
> a year, 50,000,000,000,000,000ns
> 10 years, 500,000,000,000,000,000ns
> 100 years, 5,000,000,000,000,000,000ns
> 4G * 4G = 16,000,000,000,000,000,000ns
>
> So we can assume it will never overflow for 'u64'.
However, return value of dccp_timestamp function is u32.
>
>
> Thanks.
> --
> Chen Gang
>
> Open, share, and attitude like air, water, and life which God blessed
^ permalink raw reply [flat|nested] 17+ messages in thread
* 回复: Re: 回复: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning
@ 2014-05-22 1:06 ` 管雪涛
0 siblings, 0 replies; 17+ messages in thread
From: 管雪涛 @ 2014-05-22 1:06 UTC (permalink / raw)
To: Chen Gang; +Cc: gerrit, Guan Xuetao, David Miller, dccp, netdev, linux-kernel
----- Chen Gang <gang.chen.5i5j@gmail.com> 写道:
> On 05/22/2014 08:26 AM, 管雪涛 wrote:
> >
> > ----- Chen Gang <gang.chen.5i5j@gmail.com> 写道:
> >> 'dccp_timestamp_seed' is initialized once by ktime_get_real() in
> >> dccp_timestamping_init(). It is always less than ktime_get_real()
> >> in dccp_timestamp().
> >>
> >> Then, ktime_us_delta() in dccp_timestamp() will always return positive
> >> number. So can use manual type cast to let compiler and do_div() know
> >> about it to avoid warning.
> >>
> >> The related warning (with allmodconfig under unicore32):
> >>
> >> CC [M] net/dccp/timer.o
> >> net/dccp/timer.c: In function ‘dccp_timestamp’:
> >> net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
> >>
> >>
> >> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
> >> ---
> >> net/dccp/timer.c | 2 +-
> >> 1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/net/dccp/timer.c b/net/dccp/timer.c
> >> index 16f0b22..1cd46a3 100644
> >> --- a/net/dccp/timer.c
> >> +++ b/net/dccp/timer.c
> >> @@ -280,7 +280,7 @@ static ktime_t dccp_timestamp_seed;
> >> */
> >> u32 dccp_timestamp(void)
> >> {
> >> - s64 delta = ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
> >> + u64 delta = (u64)ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
> >
> > Do you assume that delta should be very small?
> > Otherwise, return value will be different if data type is changed.
> >
>
> 'u64' is a very very large number. after calculation, if it is based on
> nano second (although I am not quite sure whether it is based on it).
>
> a hour, 3,600,000,000,000ns
> a day, 90,000,000,000,000ns
> a year, 50,000,000,000,000,000ns
> 10 years, 500,000,000,000,000,000ns
> 100 years, 5,000,000,000,000,000,000ns
> 4G * 4G = 16,000,000,000,000,000,000ns
>
> So we can assume it will never overflow for 'u64'.
However, return value of dccp_timestamp function is u32.
>
>
> Thanks.
> --
> Chen Gang
>
> Open, share, and attitude like air, water, and life which God blessed
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: 回复: Re: 回复: [PATCH linux-n =?UTF-8?B?ZXh0XSBuZXQvZGNjcC90a
2014-05-22 1:06 ` 回复: Re: 回复: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning 管雪涛
@ 2014-05-22 1:14 ` Chen Gang
-1 siblings, 0 replies; 17+ messages in thread
From: Chen Gang @ 2014-05-22 1:14 UTC (permalink / raw)
To: dccp
On 05/22/2014 09:06 AM, 管雪涛 wrote:
>
> ----- Chen Gang <gang.chen.5i5j@gmail.com> 写道:
>> On 05/22/2014 08:26 AM, 管雪涛 wrote:
>>>
>>> ----- Chen Gang <gang.chen.5i5j@gmail.com> 写道:
>>>> 'dccp_timestamp_seed' is initialized once by ktime_get_real() in
>>>> dccp_timestamping_init(). It is always less than ktime_get_real()
>>>> in dccp_timestamp().
>>>>
>>>> Then, ktime_us_delta() in dccp_timestamp() will always return positive
>>>> number. So can use manual type cast to let compiler and do_div() know
>>>> about it to avoid warning.
>>>>
>>>> The related warning (with allmodconfig under unicore32):
>>>>
>>>> CC [M] net/dccp/timer.o
>>>> net/dccp/timer.c: In function ‘dccp_timestamp’:
>>>> net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
>>>>
>>>>
>>>> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
>>>> ---
>>>> net/dccp/timer.c | 2 +-
>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/net/dccp/timer.c b/net/dccp/timer.c
>>>> index 16f0b22..1cd46a3 100644
>>>> --- a/net/dccp/timer.c
>>>> +++ b/net/dccp/timer.c
>>>> @@ -280,7 +280,7 @@ static ktime_t dccp_timestamp_seed;
>>>> */
>>>> u32 dccp_timestamp(void)
>>>> {
>>>> - s64 delta = ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
>>>> + u64 delta = (u64)ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
>>>
>>> Do you assume that delta should be very small?
>>> Otherwise, return value will be different if data type is changed.
>>>
>>
>> 'u64' is a very very large number. after calculation, if it is based on
>> nano second (although I am not quite sure whether it is based on it).
>>
>> a hour, 3,600,000,000,000ns
>> a day, 90,000,000,000,000ns
>> a year, 50,000,000,000,000,000ns
>> 10 years, 500,000,000,000,000,000ns
>> 100 years, 5,000,000,000,000,000,000ns
>> 4G * 4G = 16,000,000,000,000,000,000ns
>>
>> So we can assume it will never overflow for 'u64'.
>
> However, return value of dccp_timestamp function is u32.
>
After check the function comments.
/**
* dccp_timestamp - 10s of microseconds time source
* Returns the number of 10s of microseconds since loading DCCP. This is native
* DCCP time difference format (RFC 4340, sec. 13).
* Please note: This will wrap around about circa every 11.9 hours.
*/
So, it is still acceptable, although it is truncated into 'u32' before return.
>>
>>
>> Thanks.
>> --
>> Chen Gang
>>
>> Open, share, and attitude like air, water, and life which God blessed
--
Chen Gang
Open, share, and attitude like air, water, and life which God blessed
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: 回复: Re: 回复: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning
@ 2014-05-22 1:14 ` Chen Gang
0 siblings, 0 replies; 17+ messages in thread
From: Chen Gang @ 2014-05-22 1:14 UTC (permalink / raw)
To: 管雪涛
Cc: gerrit, Guan Xuetao, David Miller, dccp, netdev, linux-kernel
On 05/22/2014 09:06 AM, 管雪涛 wrote:
>
> ----- Chen Gang <gang.chen.5i5j@gmail.com> 写道:
>> On 05/22/2014 08:26 AM, 管雪涛 wrote:
>>>
>>> ----- Chen Gang <gang.chen.5i5j@gmail.com> 写道:
>>>> 'dccp_timestamp_seed' is initialized once by ktime_get_real() in
>>>> dccp_timestamping_init(). It is always less than ktime_get_real()
>>>> in dccp_timestamp().
>>>>
>>>> Then, ktime_us_delta() in dccp_timestamp() will always return positive
>>>> number. So can use manual type cast to let compiler and do_div() know
>>>> about it to avoid warning.
>>>>
>>>> The related warning (with allmodconfig under unicore32):
>>>>
>>>> CC [M] net/dccp/timer.o
>>>> net/dccp/timer.c: In function ‘dccp_timestamp’:
>>>> net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
>>>>
>>>>
>>>> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
>>>> ---
>>>> net/dccp/timer.c | 2 +-
>>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/net/dccp/timer.c b/net/dccp/timer.c
>>>> index 16f0b22..1cd46a3 100644
>>>> --- a/net/dccp/timer.c
>>>> +++ b/net/dccp/timer.c
>>>> @@ -280,7 +280,7 @@ static ktime_t dccp_timestamp_seed;
>>>> */
>>>> u32 dccp_timestamp(void)
>>>> {
>>>> - s64 delta = ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
>>>> + u64 delta = (u64)ktime_us_delta(ktime_get_real(), dccp_timestamp_seed);
>>>
>>> Do you assume that delta should be very small?
>>> Otherwise, return value will be different if data type is changed.
>>>
>>
>> 'u64' is a very very large number. after calculation, if it is based on
>> nano second (although I am not quite sure whether it is based on it).
>>
>> a hour, 3,600,000,000,000ns
>> a day, 90,000,000,000,000ns
>> a year, 50,000,000,000,000,000ns
>> 10 years, 500,000,000,000,000,000ns
>> 100 years, 5,000,000,000,000,000,000ns
>> 4G * 4G = 16,000,000,000,000,000,000ns
>>
>> So we can assume it will never overflow for 'u64'.
>
> However, return value of dccp_timestamp function is u32.
>
After check the function comments.
/**
* dccp_timestamp - 10s of microseconds time source
* Returns the number of 10s of microseconds since loading DCCP. This is native
* DCCP time difference format (RFC 4340, sec. 13).
* Please note: This will wrap around about circa every 11.9 hours.
*/
So, it is still acceptable, although it is truncated into 'u32' before return.
>>
>>
>> Thanks.
>> --
>> Chen Gang
>>
>> Open, share, and attitude like air, water, and life which God blessed
--
Chen Gang
Open, share, and attitude like air, water, and life which God blessed
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning
2014-05-21 0:19 ` Chen Gang
(?)
@ 2014-05-22 19:33 ` David Miller
-1 siblings, 0 replies; 17+ messages in thread
From: David Miller @ 2014-05-22 19:33 UTC (permalink / raw)
To: dccp
RnJvbTogQ2hlbiBHYW5nIDxnYW5nLmNoZW4uNWk1akBnbWFpbC5jb20+DQpEYXRlOiBXZWQsIDIx
IE1heSAyMDE0IDA4OjE5OjM0ICswODAwDQoNCj4gJ2RjY3BfdGltZXN0YW1wX3NlZWQnIGlzIGlu
aXRpYWxpemVkIG9uY2UgYnkga3RpbWVfZ2V0X3JlYWwoKSBpbg0KPiBkY2NwX3RpbWVzdGFtcGlu
Z19pbml0KCkuIEl0IGlzIGFsd2F5cyBsZXNzIHRoYW4ga3RpbWVfZ2V0X3JlYWwoKQ0KPiBpbiBk
Y2NwX3RpbWVzdGFtcCgpLg0KPiANCj4gVGhlbiwga3RpbWVfdXNfZGVsdGEoKSBpbiBkY2NwX3Rp
bWVzdGFtcCgpIHdpbGwgYWx3YXlzIHJldHVybiBwb3NpdGl2ZQ0KPiBudW1iZXIuIFNvIGNhbiB1
c2UgbWFudWFsIHR5cGUgY2FzdCB0byBsZXQgY29tcGlsZXIgYW5kIGRvX2RpdigpIGtub3cNCj4g
YWJvdXQgaXQgdG8gYXZvaWQgd2FybmluZy4NCj4gDQo+IFRoZSByZWxhdGVkIHdhcm5pbmcgKHdp
dGggYWxsbW9kY29uZmlnIHVuZGVyIHVuaWNvcmUzMik6DQo+IA0KPiAgICAgQ0MgW01dICBuZXQv
ZGNjcC90aW1lci5vDQo+ICAgbmV0L2RjY3AvdGltZXIuYzogSW4gZnVuY3Rpb24goWRjY3BfdGlt
ZXN0YW1wojoNCj4gICBuZXQvZGNjcC90aW1lci5jOjI4NTogd2FybmluZzogY29tcGFyaXNvbiBv
ZiBkaXN0aW5jdCBwb2ludGVyIHR5cGVzIGxhY2tzIGEgY2FzdA0KPiANCj4gDQo+IFNpZ25lZC1v
ZmYtYnk6IENoZW4gR2FuZyA8Z2FuZy5jaGVuLjVpNWpAZ21haWwuY29tPg0KDQpBcHBsaWVkIHRv
IG5ldC1uZXh0LCB0aGFua3MuDQoNCkJ1dCB0aGF0IHR5cGUgY2hlY2sgaW4gaW5jbHVkZS9hc20t
Z2VuZXJpYy9kaXY2NC5oIGlzIGJvZ3VzLCBpdCBzaG91bGQNCmJlIGNoZWNraW5nIHNpemVvZihY
KSA9PSA4IHJhdGhlciB0aGFuIHRoZSB0eXBlIHRoaW5nLCBpdCBqdXN0IHdhbnRzIHRvDQptYWtl
IHN1cmUgdGhhdCB0aGUgdmFsdWUgaXMgNjQtYml0IHJlZ2FyZGxlc3Mgb2YgaXQncyBzaWduZWRu
ZXNzLg0KDQpUaGUgYXJjaCBsb2NhbCBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IGRvIHRoaXMsIGFu
ZCB0aGF0J3Mgd2h5IHZlcnkgZmV3DQpvdGhlciBwZW9wbGUgbm90aWNlIHRoaXMgd2FybmluZy4N
Cg=
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning
@ 2014-05-22 19:33 ` David Miller
0 siblings, 0 replies; 17+ messages in thread
From: David Miller @ 2014-05-22 19:33 UTC (permalink / raw)
To: gang.chen.5i5j; +Cc: gerrit, gxt, dccp, netdev, linux-kernel
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: Text/Plain; charset=iso-8859-7, Size: 1216 bytes --]
From: Chen Gang <gang.chen.5i5j@gmail.com>
Date: Wed, 21 May 2014 08:19:34 +0800
> 'dccp_timestamp_seed' is initialized once by ktime_get_real() in
> dccp_timestamping_init(). It is always less than ktime_get_real()
> in dccp_timestamp().
>
> Then, ktime_us_delta() in dccp_timestamp() will always return positive
> number. So can use manual type cast to let compiler and do_div() know
> about it to avoid warning.
>
> The related warning (with allmodconfig under unicore32):
>
> CC [M] net/dccp/timer.o
> net/dccp/timer.c: In function ¡dccp_timestamp¢:
> net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
>
>
> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
Applied to net-next, thanks.
But that type check in include/asm-generic/div64.h is bogus, it should
be checking sizeof(X) == 8 rather than the type thing, it just wants to
make sure that the value is 64-bit regardless of it's signedness.
The arch local implementations do not do this, and that's why very few
other people notice this warning.
ÿôèº{.nÇ+·®+%Ëÿ±éݶ\x17¥wÿº{.nÇ+·¥{±þG«éÿ{ayº\x1dÊÚë,j\a¢f£¢·hïêÿêçz_è®\x03(éÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?¨èÚ&£ø§~á¶iOæ¬z·vØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?I¥
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning
@ 2014-05-22 19:33 ` David Miller
0 siblings, 0 replies; 17+ messages in thread
From: David Miller @ 2014-05-22 19:33 UTC (permalink / raw)
To: gang.chen.5i5j; +Cc: gerrit, gxt, dccp, netdev, linux-kernel
From: Chen Gang <gang.chen.5i5j@gmail.com>
Date: Wed, 21 May 2014 08:19:34 +0800
> 'dccp_timestamp_seed' is initialized once by ktime_get_real() in
> dccp_timestamping_init(). It is always less than ktime_get_real()
> in dccp_timestamp().
>
> Then, ktime_us_delta() in dccp_timestamp() will always return positive
> number. So can use manual type cast to let compiler and do_div() know
> about it to avoid warning.
>
> The related warning (with allmodconfig under unicore32):
>
> CC [M] net/dccp/timer.o
> net/dccp/timer.c: In function ‘dccp_timestamp’:
> net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
>
>
> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
Applied to net-next, thanks.
But that type check in include/asm-generic/div64.h is bogus, it should
be checking sizeof(X) == 8 rather than the type thing, it just wants to
make sure that the value is 64-bit regardless of it's signedness.
The arch local implementations do not do this, and that's why very few
other people notice this warning.
^ permalink raw reply [flat|nested] 17+ messages in thread
* 回复: Re: [PATCH linux-next] net/dccp/timer.c: use
2014-05-22 19:33 ` David Miller
@ 2014-05-22 23:58 ` 管雪涛
-1 siblings, 0 replies; 17+ messages in thread
From: 管雪涛 @ 2014-05-22 23:58 UTC (permalink / raw)
To: dccp
----- David Miller <davem@davemloft.net> 写道:
> From: Chen Gang <gang.chen.5i5j@gmail.com>
> Date: Wed, 21 May 2014 08:19:34 +0800
>
> > 'dccp_timestamp_seed' is initialized once by ktime_get_real() in
> > dccp_timestamping_init(). It is always less than ktime_get_real()
> > in dccp_timestamp().
> >
> > Then, ktime_us_delta() in dccp_timestamp() will always return positive
> > number. So can use manual type cast to let compiler and do_div() know
> > about it to avoid warning.
> >
> > The related warning (with allmodconfig under unicore32):
> >
> > CC [M] net/dccp/timer.o
> > net/dccp/timer.c: In function ‘dccp_timestamp’:
> > net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
> >
> >
> > Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
>
> Applied to net-next, thanks.
>
> But that type check in include/asm-generic/div64.h is bogus, it should
> be checking sizeof(X) = 8 rather than the type thing, it just wants to
> make sure that the value is 64-bit regardless of it's signedness.
>
> The arch local implementations do not do this, and that's why very few
> other people notice this warning.
Arch-dependent codes implement it with unsigned long long type.
And, every warning should not be ignored.
^ permalink raw reply [flat|nested] 17+ messages in thread
* 回复: Re: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning
@ 2014-05-22 23:58 ` 管雪涛
0 siblings, 0 replies; 17+ messages in thread
From: 管雪涛 @ 2014-05-22 23:58 UTC (permalink / raw)
To: David Miller; +Cc: gang chen 5i5j, gerrit, gxt, dccp, netdev, linux-kernel
----- David Miller <davem@davemloft.net> 写道:
> From: Chen Gang <gang.chen.5i5j@gmail.com>
> Date: Wed, 21 May 2014 08:19:34 +0800
>
> > 'dccp_timestamp_seed' is initialized once by ktime_get_real() in
> > dccp_timestamping_init(). It is always less than ktime_get_real()
> > in dccp_timestamp().
> >
> > Then, ktime_us_delta() in dccp_timestamp() will always return positive
> > number. So can use manual type cast to let compiler and do_div() know
> > about it to avoid warning.
> >
> > The related warning (with allmodconfig under unicore32):
> >
> > CC [M] net/dccp/timer.o
> > net/dccp/timer.c: In function ‘dccp_timestamp’:
> > net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
> >
> >
> > Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
>
> Applied to net-next, thanks.
>
> But that type check in include/asm-generic/div64.h is bogus, it should
> be checking sizeof(X) == 8 rather than the type thing, it just wants to
> make sure that the value is 64-bit regardless of it's signedness.
>
> The arch local implementations do not do this, and that's why very few
> other people notice this warning.
Arch-dependent codes implement it with unsigned long long type.
And, every warning should not be ignored.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: 回复: Re: [PATCH linux-next] net/d =?UTF-8?B?Y2NwL3RpbWVyLmM6IHVzZ
2014-05-22 23:58 ` 回复: Re: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning 管雪涛
@ 2014-05-23 1:43 ` Chen Gang
-1 siblings, 0 replies; 17+ messages in thread
From: Chen Gang @ 2014-05-23 1:43 UTC (permalink / raw)
To: dccp
On 05/23/2014 07:58 AM, 管雪涛 wrote:
>
> ----- David Miller <davem@davemloft.net> 写道:
>> From: Chen Gang <gang.chen.5i5j@gmail.com>
>> Date: Wed, 21 May 2014 08:19:34 +0800
>>
>>> 'dccp_timestamp_seed' is initialized once by ktime_get_real() in
>>> dccp_timestamping_init(). It is always less than ktime_get_real()
>>> in dccp_timestamp().
>>>
>>> Then, ktime_us_delta() in dccp_timestamp() will always return positive
>>> number. So can use manual type cast to let compiler and do_div() know
>>> about it to avoid warning.
>>>
>>> The related warning (with allmodconfig under unicore32):
>>>
>>> CC [M] net/dccp/timer.o
>>> net/dccp/timer.c: In function ‘dccp_timestamp’:
>>> net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
>>>
>>>
>>> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
>>
>> Applied to net-next, thanks.
>>
Thank you for your work.
>> But that type check in include/asm-generic/div64.h is bogus, it should
>> be checking sizeof(X) = 8 rather than the type thing, it just wants to
>> make sure that the value is 64-bit regardless of it's signedness.
>>
>> The arch local implementations do not do this, and that's why very few
>> other people notice this warning.
>
> Arch-dependent codes implement it with unsigned long long type.
> And, every warning should not be ignored.
>
Yeah, we have to let do_div() no touch (especially for 32-bit machine,
which the highest bit is checked). The related code in
"include/asm-generic/div64.h":
23 #if BITS_PER_LONG = 64
24
25 # define do_div(n,base) ({ \
26 uint32_t __base = (base); \
27 uint32_t __rem; \
28 __rem = ((uint64_t)(n)) % __base; \
29 (n) = ((uint64_t)(n)) / __base; \
30 __rem; \
31 })
32
33 #elif BITS_PER_LONG = 32
34
35 extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor);
36
37 /* The unnecessary pointer compare is there
38 * to check for type safety (n must be 64bit)
39 */
40 # define do_div(n,base) ({ \
41 uint32_t __base = (base); \
42 uint32_t __rem; \
43 (void)(((typeof((n)) *)0) = ((uint64_t *)0)); \
44 if (likely(((n) >> 32) = 0)) { \
45 __rem = (uint32_t)(n) % __base; \
46 (n) = (uint32_t)(n) / __base; \
47 } else \
48 __rem = __div64_32(&(n), __base); \
49 __rem; \
50 })
And for division operation, architectures are signed/unsigned
sensitive, e.g. div_u64() and div_s64(), they are different.
Thanks.
--
Chen Gang
Open, share, and attitude like air, water, and life which God blessed
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: 回复: Re: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning
@ 2014-05-23 1:43 ` Chen Gang
0 siblings, 0 replies; 17+ messages in thread
From: Chen Gang @ 2014-05-23 1:43 UTC (permalink / raw)
To: 管雪涛, David Miller
Cc: gerrit, gxt, dccp, netdev, linux-kernel
On 05/23/2014 07:58 AM, 管雪涛 wrote:
>
> ----- David Miller <davem@davemloft.net> 写道:
>> From: Chen Gang <gang.chen.5i5j@gmail.com>
>> Date: Wed, 21 May 2014 08:19:34 +0800
>>
>>> 'dccp_timestamp_seed' is initialized once by ktime_get_real() in
>>> dccp_timestamping_init(). It is always less than ktime_get_real()
>>> in dccp_timestamp().
>>>
>>> Then, ktime_us_delta() in dccp_timestamp() will always return positive
>>> number. So can use manual type cast to let compiler and do_div() know
>>> about it to avoid warning.
>>>
>>> The related warning (with allmodconfig under unicore32):
>>>
>>> CC [M] net/dccp/timer.o
>>> net/dccp/timer.c: In function ‘dccp_timestamp’:
>>> net/dccp/timer.c:285: warning: comparison of distinct pointer types lacks a cast
>>>
>>>
>>> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
>>
>> Applied to net-next, thanks.
>>
Thank you for your work.
>> But that type check in include/asm-generic/div64.h is bogus, it should
>> be checking sizeof(X) == 8 rather than the type thing, it just wants to
>> make sure that the value is 64-bit regardless of it's signedness.
>>
>> The arch local implementations do not do this, and that's why very few
>> other people notice this warning.
>
> Arch-dependent codes implement it with unsigned long long type.
> And, every warning should not be ignored.
>
Yeah, we have to let do_div() no touch (especially for 32-bit machine,
which the highest bit is checked). The related code in
"include/asm-generic/div64.h":
23 #if BITS_PER_LONG == 64
24
25 # define do_div(n,base) ({ \
26 uint32_t __base = (base); \
27 uint32_t __rem; \
28 __rem = ((uint64_t)(n)) % __base; \
29 (n) = ((uint64_t)(n)) / __base; \
30 __rem; \
31 })
32
33 #elif BITS_PER_LONG == 32
34
35 extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor);
36
37 /* The unnecessary pointer compare is there
38 * to check for type safety (n must be 64bit)
39 */
40 # define do_div(n,base) ({ \
41 uint32_t __base = (base); \
42 uint32_t __rem; \
43 (void)(((typeof((n)) *)0) == ((uint64_t *)0)); \
44 if (likely(((n) >> 32) == 0)) { \
45 __rem = (uint32_t)(n) % __base; \
46 (n) = (uint32_t)(n) / __base; \
47 } else \
48 __rem = __div64_32(&(n), __base); \
49 __rem; \
50 })
And for division operation, architectures are signed/unsigned
sensitive, e.g. div_u64() and div_s64(), they are different.
Thanks.
--
Chen Gang
Open, share, and attitude like air, water, and life which God blessed
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2014-05-23 1:43 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-21 0:19 [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning Chen Gang
2014-05-21 0:19 ` Chen Gang
2014-05-22 19:33 ` David Miller
2014-05-22 19:33 ` David Miller
2014-05-22 19:33 ` David Miller
-- strict thread matches above, loose matches on Subject: below --
2014-05-22 0:26 回复: [PATCH linux-next] net/dccp/timer.c: use 'u 管雪涛
2014-05-22 0:26 ` 回复: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning 管雪涛
2014-05-22 1:01 回复: [PATCH linux-next] net/dccp/ =?UTF-8?B?dGltZXIuYzogdXNlICd1N Chen Gang
2014-05-22 1:01 ` 回复: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning Chen Gang
2014-05-22 1:06 回复: Re: 回复: [PATCH linux- = 管雪涛
2014-05-22 1:06 ` 回复: Re: 回复: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning 管雪涛
2014-05-22 23:58 ` 回复: Re: [PATCH linux-next] net/dccp/timer.c: use 管雪涛
2014-05-22 23:58 ` 回复: Re: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning 管雪涛
2014-05-22 1:14 回复: Re: 回复: [PATCH linux-n =?UTF-8?B?ZXh0XSBuZXQvZGNjcC90a Chen Gang
2014-05-22 1:14 ` 回复: Re: 回复: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning Chen Gang
2014-05-23 1:43 回复: Re: [PATCH linux-next] net/d =?UTF-8?B?Y2NwL3RpbWVyLmM6IHVzZ Chen Gang
2014-05-23 1:43 ` 回复: Re: [PATCH linux-next] net/dccp/timer.c: use 'u64' instead of 's64' to avoid compiler's warning Chen Gang
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.