Commit 9cc233fb authored by David S. Miller's avatar David S. Miller

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net

Jeff Kirsher says:

====================
Intel Wired LAN Driver Updates 2014-10-30

This series contains updates to e1000, igb and ixgbe.

Francesco Ruggeri fixes an issue with e1000 where in a VM the driver did
not support unicast filtering.

Roman Gushchin fixes an issue with igb where the driver was re-using
mapped pages so that packets were still getting dropped even if all
the memory issues are gone and there is free memory.

Junwei Zhang found where in the ixgbe_clean_rx_ring() we were repeating
the assignment of NULL to the receive buffer skb and fixes it.

Emil fixes a race condition between setup_link and SFP detection routine
in the watchdog when setting the advertised speed.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents fa19c2b0 e3215f0a
...@@ -1075,7 +1075,10 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1075,7 +1075,10 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
NETIF_F_HW_CSUM | NETIF_F_HW_CSUM |
NETIF_F_SG); NETIF_F_SG);
netdev->priv_flags |= IFF_UNICAST_FLT; /* Do not set IFF_UNICAST_FLT for VMWare's 82545EM */
if (hw->device_id != E1000_DEV_ID_82545EM_COPPER ||
hw->subsystem_vendor_id != PCI_VENDOR_ID_VMWARE)
netdev->priv_flags |= IFF_UNICAST_FLT;
adapter->en_mng_pt = e1000_enable_mng_pass_thru(hw); adapter->en_mng_pt = e1000_enable_mng_pass_thru(hw);
......
...@@ -6537,6 +6537,9 @@ static bool igb_can_reuse_rx_page(struct igb_rx_buffer *rx_buffer, ...@@ -6537,6 +6537,9 @@ static bool igb_can_reuse_rx_page(struct igb_rx_buffer *rx_buffer,
if (unlikely(page_to_nid(page) != numa_node_id())) if (unlikely(page_to_nid(page) != numa_node_id()))
return false; return false;
if (unlikely(page->pfmemalloc))
return false;
#if (PAGE_SIZE < 8192) #if (PAGE_SIZE < 8192)
/* if we are only owner of page we can reuse it */ /* if we are only owner of page we can reuse it */
if (unlikely(page_count(page) != 1)) if (unlikely(page_count(page) != 1))
...@@ -6603,7 +6606,8 @@ static bool igb_add_rx_frag(struct igb_ring *rx_ring, ...@@ -6603,7 +6606,8 @@ static bool igb_add_rx_frag(struct igb_ring *rx_ring,
memcpy(__skb_put(skb, size), va, ALIGN(size, sizeof(long))); memcpy(__skb_put(skb, size), va, ALIGN(size, sizeof(long)));
/* we can reuse buffer as-is, just make sure it is local */ /* we can reuse buffer as-is, just make sure it is local */
if (likely(page_to_nid(page) == numa_node_id())) if (likely((page_to_nid(page) == numa_node_id()) &&
!page->pfmemalloc))
return true; return true;
/* this page cannot be reused so discard it */ /* this page cannot be reused so discard it */
......
...@@ -342,12 +342,16 @@ static int ixgbe_set_settings(struct net_device *netdev, ...@@ -342,12 +342,16 @@ static int ixgbe_set_settings(struct net_device *netdev,
if (old == advertised) if (old == advertised)
return err; return err;
/* this sets the link speed and restarts auto-neg */ /* this sets the link speed and restarts auto-neg */
while (test_and_set_bit(__IXGBE_IN_SFP_INIT, &adapter->state))
usleep_range(1000, 2000);
hw->mac.autotry_restart = true; hw->mac.autotry_restart = true;
err = hw->mac.ops.setup_link(hw, advertised, true); err = hw->mac.ops.setup_link(hw, advertised, true);
if (err) { if (err) {
e_info(probe, "setup link failed with code %d\n", err); e_info(probe, "setup link failed with code %d\n", err);
hw->mac.ops.setup_link(hw, old, true); hw->mac.ops.setup_link(hw, old, true);
} }
clear_bit(__IXGBE_IN_SFP_INIT, &adapter->state);
} else { } else {
/* in this case we currently only support 10Gb/FULL */ /* in this case we currently only support 10Gb/FULL */
u32 speed = ethtool_cmd_speed(ecmd); u32 speed = ethtool_cmd_speed(ecmd);
......
...@@ -4321,8 +4321,8 @@ static void ixgbe_clean_rx_ring(struct ixgbe_ring *rx_ring) ...@@ -4321,8 +4321,8 @@ static void ixgbe_clean_rx_ring(struct ixgbe_ring *rx_ring)
IXGBE_CB(skb)->page_released = false; IXGBE_CB(skb)->page_released = false;
} }
dev_kfree_skb(skb); dev_kfree_skb(skb);
rx_buffer->skb = NULL;
} }
rx_buffer->skb = NULL;
if (rx_buffer->dma) if (rx_buffer->dma)
dma_unmap_page(dev, rx_buffer->dma, dma_unmap_page(dev, rx_buffer->dma,
ixgbe_rx_pg_size(rx_ring), ixgbe_rx_pg_size(rx_ring),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment