diff options
Diffstat (limited to 'drivers/net/e1000e/netdev.c')
-rw-r--r-- | drivers/net/e1000e/netdev.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index 478c34a47d18..c5f65a29865a 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
@@ -52,7 +52,7 @@ | |||
52 | 52 | ||
53 | #include "e1000.h" | 53 | #include "e1000.h" |
54 | 54 | ||
55 | #define DRV_VERSION "1.0.2-k2" | 55 | #define DRV_VERSION "1.0.2-k4" |
56 | char e1000e_driver_name[] = "e1000e"; | 56 | char e1000e_driver_name[] = "e1000e"; |
57 | const char e1000e_driver_version[] = DRV_VERSION; | 57 | const char e1000e_driver_version[] = DRV_VERSION; |
58 | 58 | ||
@@ -4070,6 +4070,22 @@ link_up: | |||
4070 | } | 4070 | } |
4071 | } | 4071 | } |
4072 | 4072 | ||
4073 | /* Simple mode for Interrupt Throttle Rate (ITR) */ | ||
4074 | if (adapter->itr_setting == 4) { | ||
4075 | /* | ||
4076 | * Symmetric Tx/Rx gets a reduced ITR=2000; | ||
4077 | * Total asymmetrical Tx or Rx gets ITR=8000; | ||
4078 | * everyone else is between 2000-8000. | ||
4079 | */ | ||
4080 | u32 goc = (adapter->gotc + adapter->gorc) / 10000; | ||
4081 | u32 dif = (adapter->gotc > adapter->gorc ? | ||
4082 | adapter->gotc - adapter->gorc : | ||
4083 | adapter->gorc - adapter->gotc) / 10000; | ||
4084 | u32 itr = goc > 0 ? (dif * 6000 / goc + 2000) : 8000; | ||
4085 | |||
4086 | ew32(ITR, 1000000000 / (itr * 256)); | ||
4087 | } | ||
4088 | |||
4073 | /* Cause software interrupt to ensure Rx ring is cleaned */ | 4089 | /* Cause software interrupt to ensure Rx ring is cleaned */ |
4074 | if (adapter->msix_entries) | 4090 | if (adapter->msix_entries) |
4075 | ew32(ICS, adapter->rx_ring->ims_val); | 4091 | ew32(ICS, adapter->rx_ring->ims_val); |