Auke Kok
3f3dc0dd20
ixgb: allocate only buffersize needed
In order to help correct window size growth, use the MFS register
to limit the packet sizes received and allocate only the buffer
size necessary
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com>
Signed-off-by: John Ronciak <john.ronciak@intel.com>
index 0905a82..84a8064 100644
--- a/drivers/net/ixgb/ixgb_main.c
+++ b/drivers/net/ixgb/ixgb_main.c
@@ -574,9 +574,8 @@ ixgb_sw_init(struct ixgb_adapter *adapte
hw->subsystem_vendor_id = pdev->subsystem_vendor;
hw->subsystem_id = pdev->subsystem_device;
- adapter->rx_buffer_len = IXGB_RXBUFFER_2048;
-
hw->max_frame_size = netdev->mtu + ENET_HEADER_SIZE + ENET_FCS_LENGTH;
+ adapter->rx_buffer_len = hw->max_frame_size;
if((hw->device_id == IXGB_DEVICE_ID_82597EX)
|| (hw->device_id == IXGB_DEVICE_ID_82597EX_CX4)
@@ -820,21 +819,14 @@ ixgb_setup_rctl(struct ixgb_adapter *ada
rctl |= IXGB_RCTL_SECRC;
- switch (adapter->rx_buffer_len) {
- case IXGB_RXBUFFER_2048:
- default:
+ if (adapter->rx_buffer_len <= IXGB_RXBUFFER_2048)
rctl |= IXGB_RCTL_BSIZE_2048;
- break;
- case IXGB_RXBUFFER_4096:
+ else if (adapter->rx_buffer_len <= IXGB_RXBUFFER_4096)
rctl |= IXGB_RCTL_BSIZE_4096;
- break;
- case IXGB_RXBUFFER_8192:
+ else if (adapter->rx_buffer_len <= IXGB_RXBUFFER_8192)
rctl |= IXGB_RCTL_BSIZE_8192;
- break;
- case IXGB_RXBUFFER_16384:
+ else if (adapter->rx_buffer_len <= IXGB_RXBUFFER_16384)
rctl |= IXGB_RCTL_BSIZE_16384;
- break;
- }
IXGB_WRITE_REG(&adapter->hw, RCTL, rctl);
}
@@ -1551,25 +1543,12 @@ ixgb_change_mtu(struct net_device *netde
DPRINTK(PROBE, ERR, "Invalid MTU setting %d\n", new_mtu);
return -EINVAL;
}
-
- if((max_frame <= IXGB_MAX_ENET_FRAME_SIZE_WITHOUT_FCS + ENET_FCS_LENGTH)
- || (max_frame <= IXGB_RXBUFFER_2048)) {
- adapter->rx_buffer_len = IXGB_RXBUFFER_2048;
-
- } else if(max_frame <= IXGB_RXBUFFER_4096) {
- adapter->rx_buffer_len = IXGB_RXBUFFER_4096;
- } else if(max_frame <= IXGB_RXBUFFER_8192) {
- adapter->rx_buffer_len = IXGB_RXBUFFER_8192;
+ adapter->rx_buffer_len = max_frame;
- } else {
- adapter->rx_buffer_len = IXGB_RXBUFFER_16384;
- }
-
netdev->mtu = new_mtu;
-
- if(old_max_frame != max_frame && netif_running(netdev)) {
+ if ((old_max_frame != max_frame) && netif_running(netdev)) {
ixgb_down(adapter, TRUE);
ixgb_up(adapter);
}
2006-05-26 09:35:43 -07:00
..
2006-02-13 15:53:41 -08:00
2006-04-02 12:58:45 -07:00
2006-03-24 12:10:55 -05:00
2006-03-29 17:34:02 -05:00
2006-04-04 16:51:41 +02:00
2006-05-23 13:36:19 -07:00
2006-03-25 08:22:52 -08:00
2006-03-25 08:22:52 -08:00
2006-05-03 23:24:35 -07:00
2006-05-09 15:27:04 -07:00
2006-05-26 09:35:43 -07:00
2006-05-15 12:25:29 -07:00
2006-05-24 00:28:37 -04:00
2006-05-24 00:28:37 -04:00
2006-05-24 02:51:33 -04:00
2006-03-24 07:33:24 -08:00
2006-03-21 16:00:53 -05:00
2006-04-02 13:52:48 +02:00
2006-05-20 00:20:29 -04:00
2006-04-14 20:48:55 -04:00
2006-05-23 17:20:58 -04:00
2006-03-31 12:18:55 -08:00
2006-03-11 20:32:17 -05:00
2006-04-02 13:52:48 +02:00
2006-03-24 07:33:28 -08:00
2006-03-29 17:34:02 -05:00
2006-03-25 08:22:53 -08:00
2006-03-29 17:28:49 -05:00
2006-03-25 08:22:53 -08:00
2006-03-25 08:22:52 -08:00
2006-03-25 08:22:52 -08:00
2006-03-25 08:22:52 -08:00
2006-05-20 00:03:38 -04:00
2006-05-16 07:59:31 -07:00
2006-03-03 21:33:57 -05:00
2006-05-22 16:39:20 -07:00
2006-03-23 01:13:43 -08:00
2006-04-20 17:42:05 -04:00
2006-03-20 22:34:09 -08:00
2006-03-11 13:29:09 -05:00
2006-03-22 20:30:45 -05:00
2006-03-03 21:33:57 -05:00
2006-03-25 08:22:53 -08:00
2006-05-15 11:20:58 -07:00
2006-03-16 19:27:08 -05:00
2006-03-03 21:33:57 -05:00
2006-03-03 21:33:57 -05:00
2006-04-02 13:52:48 +02:00
2006-03-03 21:33:57 -05:00
2006-05-21 12:59:16 -07:00
2006-04-20 17:55:06 -04:00
2006-02-07 02:04:33 -05:00
2006-04-20 17:55:06 -04:00
2006-04-20 17:55:06 -04:00
2006-04-20 17:55:06 -04:00
2006-03-25 08:22:52 -08:00
2006-03-03 21:33:57 -05:00
2006-02-09 14:17:05 -05:00
2006-03-24 07:33:19 -08:00
2006-03-25 08:22:53 -08:00
2006-03-25 08:22:53 -08:00
2006-05-24 01:31:14 -04:00
2006-05-24 01:31:14 -04:00
2006-05-24 01:31:14 -04:00
2006-05-24 01:31:14 -04:00
2006-02-23 16:23:51 -08:00
2006-03-28 09:16:07 -08:00
2006-05-24 00:27:31 -04:00
2006-03-24 07:33:19 -08:00
2006-03-25 08:22:52 -08:00
2006-03-28 09:16:05 -08:00
2006-03-25 08:22:52 -08:00
2006-03-25 08:22:52 -08:00
2006-05-24 00:27:31 -04:00
2006-03-25 08:22:52 -08:00
2006-05-02 15:18:54 -04:00
2006-03-21 16:00:51 -05:00
2006-04-12 18:08:45 -04:00
2006-04-02 13:52:48 +02:00
2006-03-25 08:22:52 -08:00
2006-05-08 16:00:58 -07:00
2006-04-09 22:25:25 -07:00
2006-03-25 08:22:52 -08:00
2006-04-02 13:52:48 +02:00
2006-03-29 17:34:02 -05:00
2006-03-03 21:33:57 -05:00
2006-03-23 07:38:10 -08:00
2006-03-03 21:33:57 -05:00
2006-03-20 22:43:56 -08:00
2006-03-03 21:33:57 -05:00
2006-05-02 15:16:36 -04:00
2006-05-24 01:28:14 -04:00
2006-05-02 15:16:36 -04:00
2006-03-03 21:33:57 -05:00
2006-03-03 21:23:02 -05:00
2006-03-11 20:32:17 -05:00
2006-03-03 21:33:57 -05:00
2006-05-20 00:03:38 -04:00
2006-04-20 17:29:43 -04:00
2006-05-20 00:17:07 -04:00
2006-03-23 17:13:54 -05:00
2006-05-24 00:36:09 -04:00
2006-05-20 00:15:39 -04:00
2006-03-21 16:00:53 -05:00
2006-04-01 14:32:52 -05:00
2006-04-20 17:39:14 -04:00
2006-04-20 17:39:14 -04:00
2006-05-08 16:01:12 -07:00
2006-05-08 16:01:11 -07:00
2006-04-12 18:08:45 -04:00
2006-03-25 08:22:52 -08:00
2006-03-03 22:22:45 -05:00
2006-05-08 16:01:12 -07:00
2006-05-08 16:01:12 -07:00
2006-03-20 22:34:25 -08:00
2006-03-20 22:34:25 -08:00
2006-05-22 16:36:27 -07:00
2006-04-29 18:56:34 -07:00
2006-02-24 00:20:08 -05:00
2006-03-11 18:49:13 -08:00
2006-04-12 18:08:45 -04:00
2006-05-20 00:14:49 -04:00
2006-02-27 23:11:08 +01:00
2006-04-02 13:52:48 +02:00
2006-03-25 08:22:53 -08:00