Don't use floating point operations in amd8111e driver. This is port of Linus's changes from 2.6.x. --- linux-2.4.26/drivers/net/amd8111e.c.orig 2003-08-25 13:44:42.000000000 +0200 +++ linux-2.4.26/drivers/net/amd8111e.c 2004-05-10 14:02:19.000000000 +0200 @@ -1694,7 +1694,7 @@ /* Restart ipg timer */ if(lp->options & OPTION_DYN_IPG_ENABLE) mod_timer(&lp->ipg_data.ipg_timer, - jiffies + (IPG_CONVERGE_TIME * HZ)); + jiffies + IPG_CONVERGE_JIFFIES); spin_unlock_irq(&lp->lock); return 0; @@ -1768,7 +1768,7 @@ writew((u32)tmp_ipg, mmio + IPG); writew((u32)(tmp_ipg - IFS1_DELTA), mmio + IFS1); } - mod_timer(&lp->ipg_data.ipg_timer, jiffies + (IPG_CONVERGE_TIME * HZ)); + mod_timer(&lp->ipg_data.ipg_timer, jiffies + IPG_CONVERGE_JIFFIES); return; } @@ -1905,7 +1905,7 @@ lp->ipg_data.ipg_timer.data = (unsigned long) dev; lp->ipg_data.ipg_timer.function = (void *)&amd8111e_config_ipg; lp->ipg_data.ipg_timer.expires = jiffies + - IPG_CONVERGE_TIME * HZ; + IPG_CONVERGE_JIFFIES; lp->ipg_data.ipg = DEFAULT_IPG; lp->ipg_data.ipg_state = CSTATE; }; --- linux-2.4.26/drivers/net/amd8111e.h.orig 2003-08-25 13:44:42.000000000 +0200 +++ linux-2.4.26/drivers/net/amd8111e.h 2004-05-10 14:01:51.000000000 +0200 @@ -606,7 +606,7 @@ /* ipg parameters */ #define DEFAULT_IPG 0x60 #define IFS1_DELTA 36 -#define IPG_CONVERGE_TIME 0.5 +#define IPG_CONVERGE_JIFFIES (HZ/2) #define IPG_STABLE_TIME 5 #define MIN_IPG 96 #define MAX_IPG 255