diff options
author | David S. Miller <davem@davemloft.net> | 2012-08-31 16:03:33 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-08-31 16:03:33 -0400 |
commit | fcb118491bc8bc16c4eeb8142366bcbe17fe615d (patch) | |
tree | 8eb8aba6fe58519aea313820bb4b9c0859721cbd /drivers/net/ethernet/intel/e1000e/netdev.c | |
parent | 80f0fd8a7f18af78dd26bf94230e89c3ae82d4ba (diff) | |
parent | dd1fe113e7532c7513ff03f832312d81628a23ff (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next
Diffstat (limited to 'drivers/net/ethernet/intel/e1000e/netdev.c')
-rw-r--r-- | drivers/net/ethernet/intel/e1000e/netdev.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index d01a099475a1..121990cab144 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c | |||
@@ -56,7 +56,7 @@ | |||
56 | 56 | ||
57 | #define DRV_EXTRAVERSION "-k" | 57 | #define DRV_EXTRAVERSION "-k" |
58 | 58 | ||
59 | #define DRV_VERSION "2.0.0" DRV_EXTRAVERSION | 59 | #define DRV_VERSION "2.1.4" DRV_EXTRAVERSION |
60 | char e1000e_driver_name[] = "e1000e"; | 60 | char e1000e_driver_name[] = "e1000e"; |
61 | const char e1000e_driver_version[] = DRV_VERSION; | 61 | const char e1000e_driver_version[] = DRV_VERSION; |
62 | 62 | ||
@@ -3446,7 +3446,7 @@ void e1000e_reset(struct e1000_adapter *adapter) | |||
3446 | 3446 | ||
3447 | /* | 3447 | /* |
3448 | * if short on Rx space, Rx wins and must trump Tx | 3448 | * if short on Rx space, Rx wins and must trump Tx |
3449 | * adjustment or use Early Receive if available | 3449 | * adjustment |
3450 | */ | 3450 | */ |
3451 | if (pba < min_rx_space) | 3451 | if (pba < min_rx_space) |
3452 | pba = min_rx_space; | 3452 | pba = min_rx_space; |
@@ -3755,6 +3755,10 @@ static irqreturn_t e1000_intr_msi_test(int irq, void *data) | |||
3755 | e_dbg("icr is %08X\n", icr); | 3755 | e_dbg("icr is %08X\n", icr); |
3756 | if (icr & E1000_ICR_RXSEQ) { | 3756 | if (icr & E1000_ICR_RXSEQ) { |
3757 | adapter->flags &= ~FLAG_MSI_TEST_FAILED; | 3757 | adapter->flags &= ~FLAG_MSI_TEST_FAILED; |
3758 | /* | ||
3759 | * Force memory writes to complete before acknowledging the | ||
3760 | * interrupt is handled. | ||
3761 | */ | ||
3758 | wmb(); | 3762 | wmb(); |
3759 | } | 3763 | } |
3760 | 3764 | ||
@@ -3796,6 +3800,10 @@ static int e1000_test_msi_interrupt(struct e1000_adapter *adapter) | |||
3796 | goto msi_test_failed; | 3800 | goto msi_test_failed; |
3797 | } | 3801 | } |
3798 | 3802 | ||
3803 | /* | ||
3804 | * Force memory writes to complete before enabling and firing an | ||
3805 | * interrupt. | ||
3806 | */ | ||
3799 | wmb(); | 3807 | wmb(); |
3800 | 3808 | ||
3801 | e1000_irq_enable(adapter); | 3809 | e1000_irq_enable(adapter); |
@@ -3807,7 +3815,7 @@ static int e1000_test_msi_interrupt(struct e1000_adapter *adapter) | |||
3807 | 3815 | ||
3808 | e1000_irq_disable(adapter); | 3816 | e1000_irq_disable(adapter); |
3809 | 3817 | ||
3810 | rmb(); | 3818 | rmb(); /* read flags after interrupt has been fired */ |
3811 | 3819 | ||
3812 | if (adapter->flags & FLAG_MSI_TEST_FAILED) { | 3820 | if (adapter->flags & FLAG_MSI_TEST_FAILED) { |
3813 | adapter->int_mode = E1000E_INT_MODE_LEGACY; | 3821 | adapter->int_mode = E1000E_INT_MODE_LEGACY; |
@@ -4670,7 +4678,7 @@ static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb) | |||
4670 | struct e1000_buffer *buffer_info; | 4678 | struct e1000_buffer *buffer_info; |
4671 | unsigned int i; | 4679 | unsigned int i; |
4672 | u32 cmd_length = 0; | 4680 | u32 cmd_length = 0; |
4673 | u16 ipcse = 0, tucse, mss; | 4681 | u16 ipcse = 0, mss; |
4674 | u8 ipcss, ipcso, tucss, tucso, hdr_len; | 4682 | u8 ipcss, ipcso, tucss, tucso, hdr_len; |
4675 | 4683 | ||
4676 | if (!skb_is_gso(skb)) | 4684 | if (!skb_is_gso(skb)) |
@@ -4704,7 +4712,6 @@ static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb) | |||
4704 | ipcso = (void *)&(ip_hdr(skb)->check) - (void *)skb->data; | 4712 | ipcso = (void *)&(ip_hdr(skb)->check) - (void *)skb->data; |
4705 | tucss = skb_transport_offset(skb); | 4713 | tucss = skb_transport_offset(skb); |
4706 | tucso = (void *)&(tcp_hdr(skb)->check) - (void *)skb->data; | 4714 | tucso = (void *)&(tcp_hdr(skb)->check) - (void *)skb->data; |
4707 | tucse = 0; | ||
4708 | 4715 | ||
4709 | cmd_length |= (E1000_TXD_CMD_DEXT | E1000_TXD_CMD_TSE | | 4716 | cmd_length |= (E1000_TXD_CMD_DEXT | E1000_TXD_CMD_TSE | |
4710 | E1000_TXD_CMD_TCP | (skb->len - (hdr_len))); | 4717 | E1000_TXD_CMD_TCP | (skb->len - (hdr_len))); |
@@ -4718,7 +4725,7 @@ static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb) | |||
4718 | context_desc->lower_setup.ip_fields.ipcse = cpu_to_le16(ipcse); | 4725 | context_desc->lower_setup.ip_fields.ipcse = cpu_to_le16(ipcse); |
4719 | context_desc->upper_setup.tcp_fields.tucss = tucss; | 4726 | context_desc->upper_setup.tcp_fields.tucss = tucss; |
4720 | context_desc->upper_setup.tcp_fields.tucso = tucso; | 4727 | context_desc->upper_setup.tcp_fields.tucso = tucso; |
4721 | context_desc->upper_setup.tcp_fields.tucse = cpu_to_le16(tucse); | 4728 | context_desc->upper_setup.tcp_fields.tucse = 0; |
4722 | context_desc->tcp_seg_setup.fields.mss = cpu_to_le16(mss); | 4729 | context_desc->tcp_seg_setup.fields.mss = cpu_to_le16(mss); |
4723 | context_desc->tcp_seg_setup.fields.hdr_len = hdr_len; | 4730 | context_desc->tcp_seg_setup.fields.hdr_len = hdr_len; |
4724 | context_desc->cmd_and_length = cpu_to_le32(cmd_length); | 4731 | context_desc->cmd_and_length = cpu_to_le32(cmd_length); |