]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/net/bnx2.c
drivers/net: avoid some skb->ip_summed initializations
[karo-tx-linux.git] / drivers / net / bnx2.c
index e6a803f1c507f848ee8b4ac28ddb4ce8fc138c44..4ff76e38e788b4e12b6b53c496d6968e5a7d973b 100644 (file)
@@ -49,6 +49,7 @@
 #include <linux/cache.h>
 #include <linux/firmware.h>
 #include <linux/log2.h>
+#include <linux/aer.h>
 
 #if defined(CONFIG_CNIC) || defined(CONFIG_CNIC_MODULE)
 #define BCM_CNIC 1
@@ -3217,7 +3218,7 @@ bnx2_rx_int(struct bnx2 *bp, struct bnx2_napi *bnapi, int budget)
 
                }
 
-               skb->ip_summed = CHECKSUM_NONE;
+               skb_checksum_none_assert(skb);
                if (bp->rx_csum &&
                        (status & (L2_FHDR_STATUS_TCP_SEGMENT |
                        L2_FHDR_STATUS_UDP_DATAGRAM))) {
@@ -7890,6 +7891,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
        int rc, i, j;
        u32 reg;
        u64 dma_mask, persist_dma_mask;
+       int err;
 
        SET_NETDEV_DEV(dev, &pdev->dev);
        bp = netdev_priv(dev);
@@ -7925,6 +7927,14 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
                goto err_out_disable;
        }
 
+       /* AER (Advanced Error Reporting) hooks */
+       err = pci_enable_pcie_error_reporting(pdev);
+       if (err) {
+               dev_err(&pdev->dev, "pci_enable_pcie_error_reporting failed "
+                                   "0x%x\n", err);
+               /* non-fatal, continue */
+       }
+
        pci_set_master(pdev);
        pci_save_state(pdev);
 
@@ -8246,6 +8256,7 @@ err_out_unmap:
        }
 
 err_out_release:
+       pci_disable_pcie_error_reporting(pdev);
        pci_release_regions(pdev);
 
 err_out_disable:
@@ -8436,6 +8447,9 @@ bnx2_remove_one(struct pci_dev *pdev)
        kfree(bp->temp_stats_blk);
 
        free_netdev(dev);
+
+       pci_disable_pcie_error_reporting(pdev);
+
        pci_release_regions(pdev);
        pci_disable_device(pdev);
        pci_set_drvdata(pdev, NULL);
@@ -8527,25 +8541,35 @@ static pci_ers_result_t bnx2_io_slot_reset(struct pci_dev *pdev)
 {
        struct net_device *dev = pci_get_drvdata(pdev);
        struct bnx2 *bp = netdev_priv(dev);
+       pci_ers_result_t result;
+       int err;
 
        rtnl_lock();
        if (pci_enable_device(pdev)) {
                dev_err(&pdev->dev,
                        "Cannot re-enable PCI device after reset\n");
-               rtnl_unlock();
-               return PCI_ERS_RESULT_DISCONNECT;
+               result = PCI_ERS_RESULT_DISCONNECT;
+       } else {
+               pci_set_master(pdev);
+               pci_restore_state(pdev);
+               pci_save_state(pdev);
+
+               if (netif_running(dev)) {
+                       bnx2_set_power_state(bp, PCI_D0);
+                       bnx2_init_nic(bp, 1);
+               }
+               result = PCI_ERS_RESULT_RECOVERED;
        }
-       pci_set_master(pdev);
-       pci_restore_state(pdev);
-       pci_save_state(pdev);
+       rtnl_unlock();
 
-       if (netif_running(dev)) {
-               bnx2_set_power_state(bp, PCI_D0);
-               bnx2_init_nic(bp, 1);
+       err = pci_cleanup_aer_uncorrect_error_status(pdev);
+       if (err) {
+               dev_err(&pdev->dev,
+                       "pci_cleanup_aer_uncorrect_error_status failed 0x%0x\n",
+                        err); /* non-fatal, continue */
        }
 
-       rtnl_unlock();
-       return PCI_ERS_RESULT_RECOVERED;
+       return result;
 }
 
 /**