|
@@ -3866,9 +3866,8 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
|
|
* of reassembly being done in the stack */
|
|
* of reassembly being done in the stack */
|
|
if (length < copybreak) {
|
|
if (length < copybreak) {
|
|
struct sk_buff *new_skb =
|
|
struct sk_buff *new_skb =
|
|
- netdev_alloc_skb(netdev, length + NET_IP_ALIGN);
|
|
|
|
|
|
+ netdev_alloc_skb_ip_align(netdev, length);
|
|
if (new_skb) {
|
|
if (new_skb) {
|
|
- skb_reserve(new_skb, NET_IP_ALIGN);
|
|
|
|
skb_copy_to_linear_data_offset(new_skb,
|
|
skb_copy_to_linear_data_offset(new_skb,
|
|
-NET_IP_ALIGN,
|
|
-NET_IP_ALIGN,
|
|
(skb->data -
|
|
(skb->data -
|
|
@@ -3937,9 +3936,7 @@ e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter,
|
|
struct e1000_buffer *buffer_info;
|
|
struct e1000_buffer *buffer_info;
|
|
struct sk_buff *skb;
|
|
struct sk_buff *skb;
|
|
unsigned int i;
|
|
unsigned int i;
|
|
- unsigned int bufsz = 256 -
|
|
|
|
- 16 /*for skb_reserve */ -
|
|
|
|
- NET_IP_ALIGN;
|
|
|
|
|
|
+ unsigned int bufsz = 256 - 16 /*for skb_reserve */ ;
|
|
|
|
|
|
i = rx_ring->next_to_use;
|
|
i = rx_ring->next_to_use;
|
|
buffer_info = &rx_ring->buffer_info[i];
|
|
buffer_info = &rx_ring->buffer_info[i];
|
|
@@ -3951,7 +3948,7 @@ e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter,
|
|
goto check_page;
|
|
goto check_page;
|
|
}
|
|
}
|
|
|
|
|
|
- skb = netdev_alloc_skb(netdev, bufsz);
|
|
|
|
|
|
+ skb = netdev_alloc_skb_ip_align(netdev, bufsz);
|
|
if (unlikely(!skb)) {
|
|
if (unlikely(!skb)) {
|
|
/* Better luck next round */
|
|
/* Better luck next round */
|
|
adapter->alloc_rx_buff_failed++;
|
|
adapter->alloc_rx_buff_failed++;
|
|
@@ -3964,7 +3961,7 @@ e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter,
|
|
DPRINTK(PROBE, ERR, "skb align check failed: %u bytes "
|
|
DPRINTK(PROBE, ERR, "skb align check failed: %u bytes "
|
|
"at %p\n", bufsz, skb->data);
|
|
"at %p\n", bufsz, skb->data);
|
|
/* Try again, without freeing the previous */
|
|
/* Try again, without freeing the previous */
|
|
- skb = netdev_alloc_skb(netdev, bufsz);
|
|
|
|
|
|
+ skb = netdev_alloc_skb_ip_align(netdev, bufsz);
|
|
/* Failed allocation, critical failure */
|
|
/* Failed allocation, critical failure */
|
|
if (!skb) {
|
|
if (!skb) {
|
|
dev_kfree_skb(oldskb);
|
|
dev_kfree_skb(oldskb);
|
|
@@ -3982,12 +3979,6 @@ e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter,
|
|
/* Use new allocation */
|
|
/* Use new allocation */
|
|
dev_kfree_skb(oldskb);
|
|
dev_kfree_skb(oldskb);
|
|
}
|
|
}
|
|
- /* Make buffer alignment 2 beyond a 16 byte boundary
|
|
|
|
- * this will result in a 16 byte aligned IP header after
|
|
|
|
- * the 14 byte MAC header is removed
|
|
|
|
- */
|
|
|
|
- skb_reserve(skb, NET_IP_ALIGN);
|
|
|
|
-
|
|
|
|
buffer_info->skb = skb;
|
|
buffer_info->skb = skb;
|
|
buffer_info->length = adapter->rx_buffer_len;
|
|
buffer_info->length = adapter->rx_buffer_len;
|
|
check_page:
|
|
check_page:
|
|
@@ -4044,7 +4035,7 @@ static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
|
|
struct e1000_buffer *buffer_info;
|
|
struct e1000_buffer *buffer_info;
|
|
struct sk_buff *skb;
|
|
struct sk_buff *skb;
|
|
unsigned int i;
|
|
unsigned int i;
|
|
- unsigned int bufsz = adapter->rx_buffer_len + NET_IP_ALIGN;
|
|
|
|
|
|
+ unsigned int bufsz = adapter->rx_buffer_len;
|
|
|
|
|
|
i = rx_ring->next_to_use;
|
|
i = rx_ring->next_to_use;
|
|
buffer_info = &rx_ring->buffer_info[i];
|
|
buffer_info = &rx_ring->buffer_info[i];
|
|
@@ -4056,7 +4047,7 @@ static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
|
|
goto map_skb;
|
|
goto map_skb;
|
|
}
|
|
}
|
|
|
|
|
|
- skb = netdev_alloc_skb(netdev, bufsz);
|
|
|
|
|
|
+ skb = netdev_alloc_skb_ip_align(netdev, bufsz);
|
|
if (unlikely(!skb)) {
|
|
if (unlikely(!skb)) {
|
|
/* Better luck next round */
|
|
/* Better luck next round */
|
|
adapter->alloc_rx_buff_failed++;
|
|
adapter->alloc_rx_buff_failed++;
|
|
@@ -4069,7 +4060,7 @@ static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
|
|
DPRINTK(RX_ERR, ERR, "skb align check failed: %u bytes "
|
|
DPRINTK(RX_ERR, ERR, "skb align check failed: %u bytes "
|
|
"at %p\n", bufsz, skb->data);
|
|
"at %p\n", bufsz, skb->data);
|
|
/* Try again, without freeing the previous */
|
|
/* Try again, without freeing the previous */
|
|
- skb = netdev_alloc_skb(netdev, bufsz);
|
|
|
|
|
|
+ skb = netdev_alloc_skb_ip_align(netdev, bufsz);
|
|
/* Failed allocation, critical failure */
|
|
/* Failed allocation, critical failure */
|
|
if (!skb) {
|
|
if (!skb) {
|
|
dev_kfree_skb(oldskb);
|
|
dev_kfree_skb(oldskb);
|
|
@@ -4088,12 +4079,6 @@ static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
|
|
/* Use new allocation */
|
|
/* Use new allocation */
|
|
dev_kfree_skb(oldskb);
|
|
dev_kfree_skb(oldskb);
|
|
}
|
|
}
|
|
- /* Make buffer alignment 2 beyond a 16 byte boundary
|
|
|
|
- * this will result in a 16 byte aligned IP header after
|
|
|
|
- * the 14 byte MAC header is removed
|
|
|
|
- */
|
|
|
|
- skb_reserve(skb, NET_IP_ALIGN);
|
|
|
|
-
|
|
|
|
buffer_info->skb = skb;
|
|
buffer_info->skb = skb;
|
|
buffer_info->length = adapter->rx_buffer_len;
|
|
buffer_info->length = adapter->rx_buffer_len;
|
|
map_skb:
|
|
map_skb:
|