igb: make rxcsum configuration seperate from multiqueue
The igb driver was being incorrectly setup to only allow disabling receive checksum if multiqueue was disabled. This change corrects that so that RXCSUM is configured regardless of queue configuration. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
3935358ebc
commit
2844f79758
@@ -2236,29 +2236,21 @@ static void igb_configure_rx(struct igb_adapter *adapter)
|
||||
mrqc |= (E1000_MRQC_RSS_FIELD_IPV6_UDP_EX |
|
||||
E1000_MRQC_RSS_FIELD_IPV6_TCP_EX);
|
||||
|
||||
|
||||
wr32(E1000_MRQC, mrqc);
|
||||
|
||||
/* Multiqueue and raw packet checksumming are mutually
|
||||
* exclusive. Note that this not the same as TCP/IP
|
||||
* checksumming, which works fine. */
|
||||
rxcsum = rd32(E1000_RXCSUM);
|
||||
rxcsum |= E1000_RXCSUM_PCSD;
|
||||
wr32(E1000_RXCSUM, rxcsum);
|
||||
} else {
|
||||
} else if (adapter->vfs_allocated_count) {
|
||||
/* Enable multi-queue for sr-iov */
|
||||
if (adapter->vfs_allocated_count)
|
||||
wr32(E1000_MRQC, E1000_MRQC_ENABLE_VMDQ);
|
||||
/* Enable Receive Checksum Offload for TCP and UDP */
|
||||
rxcsum = rd32(E1000_RXCSUM);
|
||||
if (adapter->rx_csum)
|
||||
rxcsum |= E1000_RXCSUM_TUOFL | E1000_RXCSUM_IPPCSE;
|
||||
else
|
||||
rxcsum &= ~(E1000_RXCSUM_TUOFL | E1000_RXCSUM_IPPCSE);
|
||||
|
||||
wr32(E1000_RXCSUM, rxcsum);
|
||||
wr32(E1000_MRQC, E1000_MRQC_ENABLE_VMDQ);
|
||||
}
|
||||
|
||||
/* Enable Receive Checksum Offload for TCP and UDP */
|
||||
rxcsum = rd32(E1000_RXCSUM);
|
||||
/* Disable raw packet checksumming */
|
||||
rxcsum |= E1000_RXCSUM_PCSD;
|
||||
/* Don't need to set TUOFL or IPOFL, they default to 1 */
|
||||
if (!adapter->rx_csum)
|
||||
rxcsum &= ~(E1000_RXCSUM_TUOFL | E1000_RXCSUM_IPOFL);
|
||||
wr32(E1000_RXCSUM, rxcsum);
|
||||
|
||||
/* Set the default pool for the PF's first queue */
|
||||
igb_configure_vt_default_pool(adapter);
|
||||
|
||||
|
Reference in New Issue
Block a user