Commit 4c96f5b1 authored by David S. Miller's avatar David S. Miller

Merge branch '40GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-queue

Jeff Kirsher says:

====================
Intel Wired LAN Driver Updates 2016-10-27

This series contains fixes to ixgbe and i40e.

Emil fixes a NULL pointer dereference when a macvlan interface is brought
up while the PF is still down.

David root caused the original panic that was fixed by commit id
(a036244c "i40e: Fix kernel panic on enable/disable LLDP") and the
fix was not quite correct, so removed the get_default_tc() and replaced
it with a #define since there is only one TC supported as a default.

Guilherme Piccoli fixes an issue where if we modprobe the driver module
without enough MSI-X interrupts, then unload the module and reload it
again, the kernel would crash.  So if we fail to allocate enough MSI-X
interrupts, we should disable them since they were previously enabled.

Huaibin Wang found that the order of the arguments for
ndo_dflt_bridge_getlink() were in the correct order, so fix the order.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents f9d4286b 599b076d
...@@ -92,6 +92,7 @@ ...@@ -92,6 +92,7 @@
#define I40E_AQ_LEN 256 #define I40E_AQ_LEN 256
#define I40E_AQ_WORK_LIMIT 66 /* max number of VFs + a little */ #define I40E_AQ_WORK_LIMIT 66 /* max number of VFs + a little */
#define I40E_MAX_USER_PRIORITY 8 #define I40E_MAX_USER_PRIORITY 8
#define I40E_DEFAULT_TRAFFIC_CLASS BIT(0)
#define I40E_DEFAULT_MSG_ENABLE 4 #define I40E_DEFAULT_MSG_ENABLE 4
#define I40E_QUEUE_WAIT_RETRY_LIMIT 10 #define I40E_QUEUE_WAIT_RETRY_LIMIT 10
#define I40E_INT_NAME_STR_LEN (IFNAMSIZ + 16) #define I40E_INT_NAME_STR_LEN (IFNAMSIZ + 16)
......
...@@ -4640,29 +4640,6 @@ static u8 i40e_pf_get_num_tc(struct i40e_pf *pf) ...@@ -4640,29 +4640,6 @@ static u8 i40e_pf_get_num_tc(struct i40e_pf *pf)
return num_tc; return num_tc;
} }
/**
* i40e_pf_get_default_tc - Get bitmap for first enabled TC
* @pf: PF being queried
*
* Return a bitmap for first enabled traffic class for this PF.
**/
static u8 i40e_pf_get_default_tc(struct i40e_pf *pf)
{
u8 enabled_tc = pf->hw.func_caps.enabled_tcmap;
u8 i = 0;
if (!enabled_tc)
return 0x1; /* TC0 */
/* Find the first enabled TC */
for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
if (enabled_tc & BIT(i))
break;
}
return BIT(i);
}
/** /**
* i40e_pf_get_pf_tc_map - Get bitmap for enabled traffic classes * i40e_pf_get_pf_tc_map - Get bitmap for enabled traffic classes
* @pf: PF being queried * @pf: PF being queried
...@@ -4673,7 +4650,7 @@ static u8 i40e_pf_get_tc_map(struct i40e_pf *pf) ...@@ -4673,7 +4650,7 @@ static u8 i40e_pf_get_tc_map(struct i40e_pf *pf)
{ {
/* If DCB is not enabled for this PF then just return default TC */ /* If DCB is not enabled for this PF then just return default TC */
if (!(pf->flags & I40E_FLAG_DCB_ENABLED)) if (!(pf->flags & I40E_FLAG_DCB_ENABLED))
return i40e_pf_get_default_tc(pf); return I40E_DEFAULT_TRAFFIC_CLASS;
/* SFP mode we want PF to be enabled for all TCs */ /* SFP mode we want PF to be enabled for all TCs */
if (!(pf->flags & I40E_FLAG_MFP_ENABLED)) if (!(pf->flags & I40E_FLAG_MFP_ENABLED))
...@@ -4683,7 +4660,7 @@ static u8 i40e_pf_get_tc_map(struct i40e_pf *pf) ...@@ -4683,7 +4660,7 @@ static u8 i40e_pf_get_tc_map(struct i40e_pf *pf)
if (pf->hw.func_caps.iscsi) if (pf->hw.func_caps.iscsi)
return i40e_get_iscsi_tc_map(pf); return i40e_get_iscsi_tc_map(pf);
else else
return i40e_pf_get_default_tc(pf); return I40E_DEFAULT_TRAFFIC_CLASS;
} }
/** /**
...@@ -5029,7 +5006,7 @@ static void i40e_dcb_reconfigure(struct i40e_pf *pf) ...@@ -5029,7 +5006,7 @@ static void i40e_dcb_reconfigure(struct i40e_pf *pf)
if (v == pf->lan_vsi) if (v == pf->lan_vsi)
tc_map = i40e_pf_get_tc_map(pf); tc_map = i40e_pf_get_tc_map(pf);
else else
tc_map = i40e_pf_get_default_tc(pf); tc_map = I40E_DEFAULT_TRAFFIC_CLASS;
#ifdef I40E_FCOE #ifdef I40E_FCOE
if (pf->vsi[v]->type == I40E_VSI_FCOE) if (pf->vsi[v]->type == I40E_VSI_FCOE)
tc_map = i40e_get_fcoe_tc_map(pf); tc_map = i40e_get_fcoe_tc_map(pf);
...@@ -5717,7 +5694,7 @@ static int i40e_handle_lldp_event(struct i40e_pf *pf, ...@@ -5717,7 +5694,7 @@ static int i40e_handle_lldp_event(struct i40e_pf *pf,
u8 type; u8 type;
/* Not DCB capable or capability disabled */ /* Not DCB capable or capability disabled */
if (!(pf->flags & I40E_FLAG_DCB_ENABLED)) if (!(pf->flags & I40E_FLAG_DCB_CAPABLE))
return ret; return ret;
/* Ignore if event is not for Nearest Bridge */ /* Ignore if event is not for Nearest Bridge */
...@@ -7707,6 +7684,7 @@ static int i40e_init_msix(struct i40e_pf *pf) ...@@ -7707,6 +7684,7 @@ static int i40e_init_msix(struct i40e_pf *pf)
pf->flags &= ~I40E_FLAG_MSIX_ENABLED; pf->flags &= ~I40E_FLAG_MSIX_ENABLED;
kfree(pf->msix_entries); kfree(pf->msix_entries);
pf->msix_entries = NULL; pf->msix_entries = NULL;
pci_disable_msix(pf->pdev);
return -ENODEV; return -ENODEV;
} else if (v_actual == I40E_MIN_MSIX) { } else if (v_actual == I40E_MIN_MSIX) {
...@@ -9056,7 +9034,7 @@ static int i40e_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq, ...@@ -9056,7 +9034,7 @@ static int i40e_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
return 0; return 0;
return ndo_dflt_bridge_getlink(skb, pid, seq, dev, veb->bridge_mode, return ndo_dflt_bridge_getlink(skb, pid, seq, dev, veb->bridge_mode,
nlflags, 0, 0, filter_mask, NULL); 0, 0, nlflags, filter_mask, NULL);
} }
/* Hardware supports L4 tunnel length of 128B (=2^7) which includes /* Hardware supports L4 tunnel length of 128B (=2^7) which includes
......
...@@ -9135,10 +9135,14 @@ static void *ixgbe_fwd_add(struct net_device *pdev, struct net_device *vdev) ...@@ -9135,10 +9135,14 @@ static void *ixgbe_fwd_add(struct net_device *pdev, struct net_device *vdev)
goto fwd_add_err; goto fwd_add_err;
fwd_adapter->pool = pool; fwd_adapter->pool = pool;
fwd_adapter->real_adapter = adapter; fwd_adapter->real_adapter = adapter;
err = ixgbe_fwd_ring_up(vdev, fwd_adapter);
if (err) if (netif_running(pdev)) {
goto fwd_add_err; err = ixgbe_fwd_ring_up(vdev, fwd_adapter);
netif_tx_start_all_queues(vdev); if (err)
goto fwd_add_err;
netif_tx_start_all_queues(vdev);
}
return fwd_adapter; return fwd_adapter;
fwd_add_err: fwd_add_err:
/* unwind counter and free adapter struct */ /* unwind counter and free adapter struct */
......
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