Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[deliverable/linux.git] / drivers / net / ethernet / emulex / benet / be_main.c
index 43cb4588b6c8054325dfa8c3e2e6c21647357eb6..4dc96394912d849def0f2fed8692ae77d7f654ef 100644 (file)
@@ -1767,6 +1767,7 @@ static void be_post_rx_frags(struct be_rx_obj *rxo, gfp_t gfp)
        struct be_rx_page_info *page_info = NULL, *prev_page_info = NULL;
        struct be_queue_info *rxq = &rxo->q;
        struct page *pagep = NULL;
+       struct device *dev = &adapter->pdev->dev;
        struct be_eth_rx_d *rxd;
        u64 page_dmaaddr = 0, frag_dmaaddr;
        u32 posted, page_offset = 0;
@@ -1779,9 +1780,15 @@ static void be_post_rx_frags(struct be_rx_obj *rxo, gfp_t gfp)
                                rx_stats(rxo)->rx_post_fail++;
                                break;
                        }
-                       page_dmaaddr = dma_map_page(&adapter->pdev->dev, pagep,
-                                                   0, adapter->big_page_size,
+                       page_dmaaddr = dma_map_page(dev, pagep, 0,
+                                                   adapter->big_page_size,
                                                    DMA_FROM_DEVICE);
+                       if (dma_mapping_error(dev, page_dmaaddr)) {
+                               put_page(pagep);
+                               pagep = NULL;
+                               rx_stats(rxo)->rx_post_fail++;
+                               break;
+                       }
                        page_info->page_offset = 0;
                } else {
                        get_page(pagep);
@@ -3408,6 +3415,8 @@ static int be_setup(struct be_adapter *adapter)
 
        be_set_rx_mode(adapter->netdev);
 
+       be_cmd_get_acpi_wol_cap(adapter);
+
        be_cmd_get_flow_control(adapter, &tx_fc, &rx_fc);
 
        if (rx_fc != adapter->rx_fc || tx_fc != adapter->tx_fc)
@@ -4277,12 +4286,6 @@ static void be_remove(struct pci_dev *pdev)
        free_netdev(adapter->netdev);
 }
 
-bool be_is_wol_supported(struct be_adapter *adapter)
-{
-       return ((adapter->wol_cap & BE_WOL_CAP) &&
-               !be_is_wol_excluded(adapter)) ? true : false;
-}
-
 static int be_get_initial_config(struct be_adapter *adapter)
 {
        int status, level;
@@ -4291,17 +4294,6 @@ static int be_get_initial_config(struct be_adapter *adapter)
        if (status)
                return status;
 
-       status = be_cmd_get_acpi_wol_cap(adapter);
-       if (status) {
-               /* in case of a failure to get wol capabillities
-                * check the exclusion list to determine WOL capability */
-               if (!be_is_wol_excluded(adapter))
-                       adapter->wol_cap |= BE_WOL_CAP;
-       }
-
-       if (be_is_wol_supported(adapter))
-               adapter->wol = true;
-
        /* Must be a power of 2 or else MODULO will BUG_ON */
        adapter->be_get_temp_freq = 64;
 
@@ -4572,7 +4564,7 @@ static int be_suspend(struct pci_dev *pdev, pm_message_t state)
        struct be_adapter *adapter = pci_get_drvdata(pdev);
        struct net_device *netdev =  adapter->netdev;
 
-       if (adapter->wol)
+       if (adapter->wol_en)
                be_setup_wol(adapter, true);
 
        be_intr_set(adapter, false);
@@ -4628,7 +4620,7 @@ static int be_resume(struct pci_dev *pdev)
                              msecs_to_jiffies(1000));
        netif_device_attach(netdev);
 
-       if (adapter->wol)
+       if (adapter->wol_en)
                be_setup_wol(adapter, false);
 
        return 0;
This page took 0.048232 seconds and 5 git commands to generate.