Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/ethernet/emulex/benet/be.h drivers/net/usb/qmi_wwan.c drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h include/net/netfilter/nf_conntrack_synproxy.h include/net/secure_seq.h The conflicts are of two varieties: 1) Conflicts with Joe Perches's 'extern' removal from header file function declarations. Usually it's an argument signature change or a function being added/removed. The resolutions are trivial. 2) Some overlapping changes in qmi_wwan.c and be.h, one commit adds a new value, another changes an existing value. That sort of thing. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -88,6 +88,7 @@ static inline char *nic_name(struct pci_dev *pdev)
|
||||
#define BE_MIN_MTU 256
|
||||
|
||||
#define BE_NUM_VLANS_SUPPORTED 64
|
||||
#define BE_UMC_NUM_VLANS_SUPPORTED 15
|
||||
#define BE_MAX_EQD 128u
|
||||
#define BE_MAX_TX_FRAG_COUNT 30
|
||||
|
||||
@@ -342,6 +343,7 @@ enum vf_state {
|
||||
|
||||
#define BE_FLAGS_LINK_STATUS_INIT 1
|
||||
#define BE_FLAGS_WORKER_SCHEDULED (1 << 3)
|
||||
#define BE_FLAGS_VLAN_PROMISC (1 << 4)
|
||||
#define BE_FLAGS_NAPI_ENABLED (1 << 9)
|
||||
#define BE_UC_PMAC_COUNT 30
|
||||
#define BE_VF_UC_PMAC_COUNT 2
|
||||
|
@@ -180,6 +180,9 @@ static int be_mcc_compl_process(struct be_adapter *adapter,
|
||||
dev_err(&adapter->pdev->dev,
|
||||
"opcode %d-%d failed:status %d-%d\n",
|
||||
opcode, subsystem, compl_status, extd_status);
|
||||
|
||||
if (extd_status == MCC_ADDL_STS_INSUFFICIENT_RESOURCES)
|
||||
return extd_status;
|
||||
}
|
||||
}
|
||||
done:
|
||||
@@ -1816,6 +1819,12 @@ int be_cmd_rx_filter(struct be_adapter *adapter, u32 flags, u32 value)
|
||||
} else if (flags & IFF_ALLMULTI) {
|
||||
req->if_flags_mask = req->if_flags =
|
||||
cpu_to_le32(BE_IF_FLAGS_MCAST_PROMISCUOUS);
|
||||
} else if (flags & BE_FLAGS_VLAN_PROMISC) {
|
||||
req->if_flags_mask = cpu_to_le32(BE_IF_FLAGS_VLAN_PROMISCUOUS);
|
||||
|
||||
if (value == ON)
|
||||
req->if_flags =
|
||||
cpu_to_le32(BE_IF_FLAGS_VLAN_PROMISCUOUS);
|
||||
} else {
|
||||
struct netdev_hw_addr *ha;
|
||||
int i = 0;
|
||||
|
@@ -60,6 +60,8 @@ enum {
|
||||
MCC_STATUS_NOT_SUPPORTED = 66
|
||||
};
|
||||
|
||||
#define MCC_ADDL_STS_INSUFFICIENT_RESOURCES 0x16
|
||||
|
||||
#define CQE_STATUS_COMPL_MASK 0xFFFF
|
||||
#define CQE_STATUS_COMPL_SHIFT 0 /* bits 0 - 15 */
|
||||
#define CQE_STATUS_EXTD_MASK 0xFFFF
|
||||
@@ -1793,7 +1795,7 @@ struct be_nic_res_desc {
|
||||
u8 acpi_params;
|
||||
u8 wol_param;
|
||||
u16 rsvd7;
|
||||
u32 rsvd8[3];
|
||||
u32 rsvd8[7];
|
||||
} __packed;
|
||||
|
||||
struct be_cmd_req_get_func_config {
|
||||
|
@@ -855,11 +855,11 @@ static struct sk_buff *be_xmit_workarounds(struct be_adapter *adapter,
|
||||
unsigned int eth_hdr_len;
|
||||
struct iphdr *ip;
|
||||
|
||||
/* Lancer ASIC has a bug wherein packets that are 32 bytes or less
|
||||
/* Lancer, SH-R ASICs have a bug wherein Packets that are 32 bytes or less
|
||||
* may cause a transmit stall on that port. So the work-around is to
|
||||
* pad such packets to a 36-byte length.
|
||||
* pad short packets (<= 32 bytes) to a 36-byte length.
|
||||
*/
|
||||
if (unlikely(lancer_chip(adapter) && skb->len <= 32)) {
|
||||
if (unlikely(!BEx_chip(adapter) && skb->len <= 32)) {
|
||||
if (skb_padto(skb, 36))
|
||||
goto tx_drop;
|
||||
skb->len = 36;
|
||||
@@ -1016,18 +1016,40 @@ static int be_vid_config(struct be_adapter *adapter)
|
||||
status = be_cmd_vlan_config(adapter, adapter->if_handle,
|
||||
vids, num, 1, 0);
|
||||
|
||||
/* Set to VLAN promisc mode as setting VLAN filter failed */
|
||||
if (status) {
|
||||
dev_info(&adapter->pdev->dev, "Exhausted VLAN HW filters.\n");
|
||||
dev_info(&adapter->pdev->dev, "Disabling HW VLAN filtering.\n");
|
||||
goto set_vlan_promisc;
|
||||
/* Set to VLAN promisc mode as setting VLAN filter failed */
|
||||
if (status == MCC_ADDL_STS_INSUFFICIENT_RESOURCES)
|
||||
goto set_vlan_promisc;
|
||||
dev_err(&adapter->pdev->dev,
|
||||
"Setting HW VLAN filtering failed.\n");
|
||||
} else {
|
||||
if (adapter->flags & BE_FLAGS_VLAN_PROMISC) {
|
||||
/* hw VLAN filtering re-enabled. */
|
||||
status = be_cmd_rx_filter(adapter,
|
||||
BE_FLAGS_VLAN_PROMISC, OFF);
|
||||
if (!status) {
|
||||
dev_info(&adapter->pdev->dev,
|
||||
"Disabling VLAN Promiscuous mode.\n");
|
||||
adapter->flags &= ~BE_FLAGS_VLAN_PROMISC;
|
||||
dev_info(&adapter->pdev->dev,
|
||||
"Re-Enabling HW VLAN filtering\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
|
||||
set_vlan_promisc:
|
||||
status = be_cmd_vlan_config(adapter, adapter->if_handle,
|
||||
NULL, 0, 1, 1);
|
||||
dev_warn(&adapter->pdev->dev, "Exhausted VLAN HW filters.\n");
|
||||
|
||||
status = be_cmd_rx_filter(adapter, BE_FLAGS_VLAN_PROMISC, ON);
|
||||
if (!status) {
|
||||
dev_info(&adapter->pdev->dev, "Enable VLAN Promiscuous mode\n");
|
||||
dev_info(&adapter->pdev->dev, "Disabling HW VLAN filtering\n");
|
||||
adapter->flags |= BE_FLAGS_VLAN_PROMISC;
|
||||
} else
|
||||
dev_err(&adapter->pdev->dev,
|
||||
"Failed to enable VLAN Promiscuous mode.\n");
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -1036,10 +1058,6 @@ static int be_vlan_add_vid(struct net_device *netdev, __be16 proto, u16 vid)
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
int status = 0;
|
||||
|
||||
if (!lancer_chip(adapter) && !be_physfn(adapter)) {
|
||||
status = -EINVAL;
|
||||
goto ret;
|
||||
}
|
||||
|
||||
/* Packets with VID 0 are always received by Lancer by default */
|
||||
if (lancer_chip(adapter) && vid == 0)
|
||||
@@ -1062,11 +1080,6 @@ static int be_vlan_rem_vid(struct net_device *netdev, __be16 proto, u16 vid)
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
int status = 0;
|
||||
|
||||
if (!lancer_chip(adapter) && !be_physfn(adapter)) {
|
||||
status = -EINVAL;
|
||||
goto ret;
|
||||
}
|
||||
|
||||
/* Packets with VID 0 are always received by Lancer by default */
|
||||
if (lancer_chip(adapter) && vid == 0)
|
||||
goto ret;
|
||||
@@ -1191,8 +1204,8 @@ static int be_get_vf_config(struct net_device *netdev, int vf,
|
||||
|
||||
vi->vf = vf;
|
||||
vi->tx_rate = vf_cfg->tx_rate;
|
||||
vi->vlan = vf_cfg->vlan_tag;
|
||||
vi->qos = 0;
|
||||
vi->vlan = vf_cfg->vlan_tag & VLAN_VID_MASK;
|
||||
vi->qos = vf_cfg->vlan_tag >> VLAN_PRIO_SHIFT;
|
||||
memcpy(&vi->mac, vf_cfg->mac_addr, ETH_ALEN);
|
||||
|
||||
return 0;
|
||||
@@ -1202,28 +1215,29 @@ static int be_set_vf_vlan(struct net_device *netdev,
|
||||
int vf, u16 vlan, u8 qos)
|
||||
{
|
||||
struct be_adapter *adapter = netdev_priv(netdev);
|
||||
struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
|
||||
int status = 0;
|
||||
|
||||
if (!sriov_enabled(adapter))
|
||||
return -EPERM;
|
||||
|
||||
if (vf >= adapter->num_vfs || vlan > 4095)
|
||||
if (vf >= adapter->num_vfs || vlan > 4095 || qos > 7)
|
||||
return -EINVAL;
|
||||
|
||||
if (vlan) {
|
||||
if (adapter->vf_cfg[vf].vlan_tag != vlan) {
|
||||
if (vlan || qos) {
|
||||
vlan |= qos << VLAN_PRIO_SHIFT;
|
||||
if (vf_cfg->vlan_tag != vlan) {
|
||||
/* If this is new value, program it. Else skip. */
|
||||
adapter->vf_cfg[vf].vlan_tag = vlan;
|
||||
|
||||
status = be_cmd_set_hsw_config(adapter, vlan,
|
||||
vf + 1, adapter->vf_cfg[vf].if_handle, 0);
|
||||
vf_cfg->vlan_tag = vlan;
|
||||
status = be_cmd_set_hsw_config(adapter, vlan, vf + 1,
|
||||
vf_cfg->if_handle, 0);
|
||||
}
|
||||
} else {
|
||||
/* Reset Transparent Vlan Tagging. */
|
||||
adapter->vf_cfg[vf].vlan_tag = 0;
|
||||
vlan = adapter->vf_cfg[vf].def_vid;
|
||||
vf_cfg->vlan_tag = 0;
|
||||
vlan = vf_cfg->def_vid;
|
||||
status = be_cmd_set_hsw_config(adapter, vlan, vf + 1,
|
||||
adapter->vf_cfg[vf].if_handle, 0);
|
||||
vf_cfg->if_handle, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -2995,6 +3009,8 @@ static void BEx_get_resources(struct be_adapter *adapter,
|
||||
|
||||
if (adapter->function_mode & FLEX10_MODE)
|
||||
res->max_vlans = BE_NUM_VLANS_SUPPORTED/8;
|
||||
else if (adapter->function_mode & UMC_ENABLED)
|
||||
res->max_vlans = BE_UMC_NUM_VLANS_SUPPORTED;
|
||||
else
|
||||
res->max_vlans = BE_NUM_VLANS_SUPPORTED;
|
||||
res->max_mcast_mac = BE_MAX_MC;
|
||||
|
Reference in New Issue
Block a user