|
@@ -295,12 +295,11 @@ static void ixgbevf_receive_skb(struct ixgbevf_q_vector *q_vector,
|
|
|
|
|
|
/**
|
|
|
* ixgbevf_rx_checksum - indicate in skb if hw indicated a good cksum
|
|
|
- * @adapter: address of board private structure
|
|
|
+ * @ring: pointer to Rx descriptor ring structure
|
|
|
* @status_err: hardware indication of status of receive
|
|
|
* @skb: skb currently being received and modified
|
|
|
**/
|
|
|
-static inline void ixgbevf_rx_checksum(struct ixgbevf_adapter *adapter,
|
|
|
- struct ixgbevf_ring *ring,
|
|
|
+static inline void ixgbevf_rx_checksum(struct ixgbevf_ring *ring,
|
|
|
u32 status_err, struct sk_buff *skb)
|
|
|
{
|
|
|
skb_checksum_none_assert(skb);
|
|
@@ -312,7 +311,7 @@ static inline void ixgbevf_rx_checksum(struct ixgbevf_adapter *adapter,
|
|
|
/* if IP and error */
|
|
|
if ((status_err & IXGBE_RXD_STAT_IPCS) &&
|
|
|
(status_err & IXGBE_RXDADV_ERR_IPE)) {
|
|
|
- adapter->hw_csum_rx_error++;
|
|
|
+ ring->hw_csum_rx_error++;
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -320,13 +319,13 @@ static inline void ixgbevf_rx_checksum(struct ixgbevf_adapter *adapter,
|
|
|
return;
|
|
|
|
|
|
if (status_err & IXGBE_RXDADV_ERR_TCPE) {
|
|
|
- adapter->hw_csum_rx_error++;
|
|
|
+ ring->hw_csum_rx_error++;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
/* It must be a TCP or UDP packet with a valid checksum */
|
|
|
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
|
|
- adapter->hw_csum_rx_good++;
|
|
|
+ ring->hw_csum_rx_good++;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -462,7 +461,7 @@ static bool ixgbevf_clean_rx_irq(struct ixgbevf_q_vector *q_vector,
|
|
|
goto next_desc;
|
|
|
}
|
|
|
|
|
|
- ixgbevf_rx_checksum(adapter, rx_ring, staterr, skb);
|
|
|
+ ixgbevf_rx_checksum(rx_ring, staterr, skb);
|
|
|
|
|
|
/* probably a little skewed due to removing CRC */
|
|
|
total_rx_bytes += skb->len;
|
|
@@ -2094,6 +2093,7 @@ out:
|
|
|
void ixgbevf_update_stats(struct ixgbevf_adapter *adapter)
|
|
|
{
|
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
|
+ int i;
|
|
|
|
|
|
UPDATE_VF_COUNTER_32bit(IXGBE_VFGPRC, adapter->stats.last_vfgprc,
|
|
|
adapter->stats.vfgprc);
|
|
@@ -2107,6 +2107,15 @@ void ixgbevf_update_stats(struct ixgbevf_adapter *adapter)
|
|
|
adapter->stats.vfgotc);
|
|
|
UPDATE_VF_COUNTER_32bit(IXGBE_VFMPRC, adapter->stats.last_vfmprc,
|
|
|
adapter->stats.vfmprc);
|
|
|
+
|
|
|
+ for (i = 0; i < adapter->num_rx_queues; i++) {
|
|
|
+ adapter->hw_csum_rx_error +=
|
|
|
+ adapter->rx_ring[i].hw_csum_rx_error;
|
|
|
+ adapter->hw_csum_rx_good +=
|
|
|
+ adapter->rx_ring[i].hw_csum_rx_good;
|
|
|
+ adapter->rx_ring[i].hw_csum_rx_error = 0;
|
|
|
+ adapter->rx_ring[i].hw_csum_rx_good = 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|