hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/net/ethernet/intel/igb/igb_main.c
....@@ -1204,8 +1204,12 @@
12041204 if (!q_vector) {
12051205 q_vector = kzalloc(size, GFP_KERNEL);
12061206 } else if (size > ksize(q_vector)) {
1207
- kfree_rcu(q_vector, rcu);
1208
- q_vector = kzalloc(size, GFP_KERNEL);
1207
+ struct igb_q_vector *new_q_vector;
1208
+
1209
+ new_q_vector = kzalloc(size, GFP_KERNEL);
1210
+ if (new_q_vector)
1211
+ kfree_rcu(q_vector, rcu);
1212
+ q_vector = new_q_vector;
12091213 } else {
12101214 memset(q_vector, 0, size);
12111215 }
....@@ -3817,9 +3821,7 @@
38173821 igb_release_hw_control(adapter);
38183822
38193823 #ifdef CONFIG_PCI_IOV
3820
- rtnl_lock();
38213824 igb_disable_sriov(pdev);
3822
- rtnl_unlock();
38233825 #endif
38243826
38253827 unregister_netdev(netdev);
....@@ -3855,8 +3857,9 @@
38553857 struct pci_dev *pdev = adapter->pdev;
38563858 struct e1000_hw *hw = &adapter->hw;
38573859
3858
- /* Virtualization features not supported on i210 family. */
3859
- if ((hw->mac.type == e1000_i210) || (hw->mac.type == e1000_i211))
3860
+ /* Virtualization features not supported on i210 and 82580 family. */
3861
+ if ((hw->mac.type == e1000_i210) || (hw->mac.type == e1000_i211) ||
3862
+ (hw->mac.type == e1000_82580))
38603863 return;
38613864
38623865 /* Of the below we really only want the effect of getting
....@@ -4729,6 +4732,10 @@
47294732 static void igb_set_rx_buffer_len(struct igb_adapter *adapter,
47304733 struct igb_ring *rx_ring)
47314734 {
4735
+#if (PAGE_SIZE < 8192)
4736
+ struct e1000_hw *hw = &adapter->hw;
4737
+#endif
4738
+
47324739 /* set build_skb and buffer size flags */
47334740 clear_ring_build_skb_enabled(rx_ring);
47344741 clear_ring_uses_large_buffer(rx_ring);
....@@ -4739,10 +4746,9 @@
47394746 set_ring_build_skb_enabled(rx_ring);
47404747
47414748 #if (PAGE_SIZE < 8192)
4742
- if (adapter->max_frame_size <= IGB_MAX_FRAME_BUILD_SKB)
4743
- return;
4744
-
4745
- set_ring_uses_large_buffer(rx_ring);
4749
+ if (adapter->max_frame_size > IGB_MAX_FRAME_BUILD_SKB ||
4750
+ rd32(E1000_RCTL) & E1000_RCTL_SBP)
4751
+ set_ring_uses_large_buffer(rx_ring);
47464752 #endif
47474753 }
47484754
....@@ -5879,7 +5885,7 @@
58795885 */
58805886 if (tx_ring->launchtime_enable) {
58815887 ts = ktime_to_timespec64(first->skb->tstamp);
5882
- first->skb->tstamp = ktime_set(0, 0);
5888
+ skb_txtime_consumed(first->skb);
58835889 context_desc->seqnum_seed = cpu_to_le32(ts.tv_nsec / 32);
58845890 } else {
58855891 context_desc->seqnum_seed = 0;
....@@ -9451,6 +9457,11 @@
94519457 struct net_device *netdev = pci_get_drvdata(pdev);
94529458 struct igb_adapter *adapter = netdev_priv(netdev);
94539459
9460
+ if (state == pci_channel_io_normal) {
9461
+ dev_warn(&pdev->dev, "Non-correctable non-fatal error reported.\n");
9462
+ return PCI_ERS_RESULT_CAN_RECOVER;
9463
+ }
9464
+
94549465 netif_device_detach(netdev);
94559466
94569467 if (state == pci_channel_io_perm_failure)