[PR 17] GRETH: Fixed autonego timeout overflow problem

Daniel Hellstrom daniel at gaisler.com
Tue Mar 20 07:51:34 UTC 2012


Hello Ralf,

The problem was first reported by Joris, please see BUG 1465.

-    msecs = (tnow.tv_sec-tstart.tv_sec)*1000+(tnow.tv_usec-tstart.tv_usec)/1000;
+   msecs = (int)(tnow.tv_sec-tstart.tv_sec)*1000+((int)tnow.tv_usec-(int)tstart.tv_usec)/1000;

The seconds part is no problem. If (tstart.tv_usec > tnow.tv_usec) will be negative, but since the variables are unsigned a underflow will result in a very long msecs timeout.

Thanks,
Daniel


On 03/19/2012 11:26 PM, Ralf Corsepius wrote:
> On 03/19/2012 08:59 PM, Joel Sherrill wrote:
>> This looks ok to me.
>
> I am having strong doubts on this patch.
>
> Daniel, could you elaborate the problem you are trying to solve?
>
> Ralf
>
>
>> I would have thought we had some support routines to do this but alas.
>>
>> Please commit someone.
>> ________________________________________
>> From: rtems-devel-bounces at rtems.org [rtems-devel-bounces at rtems.org] On Behalf Of Daniel Hellstrom [daniel at gaisler.com]
>> Sent: Monday, February 06, 2012 8:15 AM
>> To: rtems-devel at rtems.org
>> Subject: [PR 17] GRETH: Fixed autonego timeout overflow problem
>>
>> Signed-off-by: Daniel Hellstrom<daniel at gaisler.com>
>> ---
>>   c/src/libchip/network/greth.c |    2 +-
>>   1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/c/src/libchip/network/greth.c b/c/src/libchip/network/greth.c
>> index aff4d0f..b0e70b4 100644
>> --- a/c/src/libchip/network/greth.c
>> +++ b/c/src/libchip/network/greth.c
>> @@ -339,7 +339,7 @@ greth_initialize_hardware (struct greth_softc *sc)
>>               while (!(((phystatus = read_mii(phyaddr, 1))>>  5)&  1)) {
>>                       if ( rtems_clock_get_tod_timeval(&tnow) != RTEMS_SUCCESSFUL )
>>                         printk("rtems_clock_get_tod_timeval failed\n\r");
>> -                    msecs = (tnow.tv_sec-tstart.tv_sec)*1000+(tnow.tv_usec-tstart.tv_usec)/1000;
>> +                    msecs = (int)(tnow.tv_sec-tstart.tv_sec)*1000+((int)tnow.tv_usec-(int)tstart.tv_usec)/1000;
>>                       if ( msecs>  GRETH_AUTONEGO_TIMEOUT_MS ){
>>                               sc->auto_neg_time = msecs;
>>                               sc->auto_neg = -1; /* Failed */
>> -- 
>> 1.7.0.4
>>
>> _______________________________________________
>> rtems-devel mailing list
>> rtems-devel at rtems.org
>> http://www.rtems.org/mailman/listinfo/rtems-devel
>>
>> _______________________________________________
>> rtems-devel mailing list
>> rtems-devel at rtems.org
>> http://www.rtems.org/mailman/listinfo/rtems-devel
>
>




More information about the devel mailing list