Commit ce088848 authored by David S. Miller's avatar David S. Miller

Merge branch 'be2net'

Sathya Perla says:

====================
be2net: patch set

Pls apply the following bug fixes to the 'net' tree. Thanks.

Suresh Reddy (2):
  be2net: increase the timeout value for loopback-test FW cmd
  be2net: fix max_evt_qs calculation for BE3 in SR-IOV config

Vasundhara Volam (1):
  be2net: disable RSS when number of RXQs is reduced to 1 via
    set-channels
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents f35f76ee e3dc867c
...@@ -104,6 +104,7 @@ static inline char *nic_name(struct pci_dev *pdev) ...@@ -104,6 +104,7 @@ static inline char *nic_name(struct pci_dev *pdev)
#define BE3_MAX_RSS_QS 16 #define BE3_MAX_RSS_QS 16
#define BE3_MAX_TX_QS 16 #define BE3_MAX_TX_QS 16
#define BE3_MAX_EVT_QS 16 #define BE3_MAX_EVT_QS 16
#define BE3_SRIOV_MAX_EVT_QS 8
#define MAX_RX_QS 32 #define MAX_RX_QS 32
#define MAX_EVT_QS 32 #define MAX_EVT_QS 32
...@@ -480,7 +481,7 @@ struct be_adapter { ...@@ -480,7 +481,7 @@ struct be_adapter {
struct list_head entry; struct list_head entry;
u32 flash_status; u32 flash_status;
struct completion flash_compl; struct completion et_cmd_compl;
struct be_resources res; /* resources available for the func */ struct be_resources res; /* resources available for the func */
u16 num_vfs; /* Number of VFs provisioned by PF */ u16 num_vfs; /* Number of VFs provisioned by PF */
......
...@@ -141,11 +141,17 @@ static int be_mcc_compl_process(struct be_adapter *adapter, ...@@ -141,11 +141,17 @@ static int be_mcc_compl_process(struct be_adapter *adapter,
subsystem = resp_hdr->subsystem; subsystem = resp_hdr->subsystem;
} }
if (opcode == OPCODE_LOWLEVEL_LOOPBACK_TEST &&
subsystem == CMD_SUBSYSTEM_LOWLEVEL) {
complete(&adapter->et_cmd_compl);
return 0;
}
if (((opcode == OPCODE_COMMON_WRITE_FLASHROM) || if (((opcode == OPCODE_COMMON_WRITE_FLASHROM) ||
(opcode == OPCODE_COMMON_WRITE_OBJECT)) && (opcode == OPCODE_COMMON_WRITE_OBJECT)) &&
(subsystem == CMD_SUBSYSTEM_COMMON)) { (subsystem == CMD_SUBSYSTEM_COMMON)) {
adapter->flash_status = compl_status; adapter->flash_status = compl_status;
complete(&adapter->flash_compl); complete(&adapter->et_cmd_compl);
} }
if (compl_status == MCC_STATUS_SUCCESS) { if (compl_status == MCC_STATUS_SUCCESS) {
...@@ -2017,6 +2023,9 @@ int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable, ...@@ -2017,6 +2023,9 @@ int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable,
0x3ea83c02, 0x4a110304}; 0x3ea83c02, 0x4a110304};
int status; int status;
if (!(be_if_cap_flags(adapter) & BE_IF_FLAGS_RSS))
return 0;
if (mutex_lock_interruptible(&adapter->mbox_lock)) if (mutex_lock_interruptible(&adapter->mbox_lock))
return -1; return -1;
...@@ -2160,7 +2169,7 @@ int lancer_cmd_write_object(struct be_adapter *adapter, struct be_dma_mem *cmd, ...@@ -2160,7 +2169,7 @@ int lancer_cmd_write_object(struct be_adapter *adapter, struct be_dma_mem *cmd,
be_mcc_notify(adapter); be_mcc_notify(adapter);
spin_unlock_bh(&adapter->mcc_lock); spin_unlock_bh(&adapter->mcc_lock);
if (!wait_for_completion_timeout(&adapter->flash_compl, if (!wait_for_completion_timeout(&adapter->et_cmd_compl,
msecs_to_jiffies(60000))) msecs_to_jiffies(60000)))
status = -1; status = -1;
else else
...@@ -2255,7 +2264,7 @@ int be_cmd_write_flashrom(struct be_adapter *adapter, struct be_dma_mem *cmd, ...@@ -2255,7 +2264,7 @@ int be_cmd_write_flashrom(struct be_adapter *adapter, struct be_dma_mem *cmd,
be_mcc_notify(adapter); be_mcc_notify(adapter);
spin_unlock_bh(&adapter->mcc_lock); spin_unlock_bh(&adapter->mcc_lock);
if (!wait_for_completion_timeout(&adapter->flash_compl, if (!wait_for_completion_timeout(&adapter->et_cmd_compl,
msecs_to_jiffies(40000))) msecs_to_jiffies(40000)))
status = -1; status = -1;
else else
...@@ -2367,6 +2376,7 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num, ...@@ -2367,6 +2376,7 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
{ {
struct be_mcc_wrb *wrb; struct be_mcc_wrb *wrb;
struct be_cmd_req_loopback_test *req; struct be_cmd_req_loopback_test *req;
struct be_cmd_resp_loopback_test *resp;
int status; int status;
spin_lock_bh(&adapter->mcc_lock); spin_lock_bh(&adapter->mcc_lock);
...@@ -2381,8 +2391,8 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num, ...@@ -2381,8 +2391,8 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_LOWLEVEL, be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_LOWLEVEL,
OPCODE_LOWLEVEL_LOOPBACK_TEST, sizeof(*req), wrb, NULL); OPCODE_LOWLEVEL_LOOPBACK_TEST, sizeof(*req), wrb, NULL);
req->hdr.timeout = cpu_to_le32(4);
req->hdr.timeout = cpu_to_le32(15);
req->pattern = cpu_to_le64(pattern); req->pattern = cpu_to_le64(pattern);
req->src_port = cpu_to_le32(port_num); req->src_port = cpu_to_le32(port_num);
req->dest_port = cpu_to_le32(port_num); req->dest_port = cpu_to_le32(port_num);
...@@ -2390,12 +2400,15 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num, ...@@ -2390,12 +2400,15 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
req->num_pkts = cpu_to_le32(num_pkts); req->num_pkts = cpu_to_le32(num_pkts);
req->loopback_type = cpu_to_le32(loopback_type); req->loopback_type = cpu_to_le32(loopback_type);
status = be_mcc_notify_wait(adapter); be_mcc_notify(adapter);
if (!status) {
struct be_cmd_resp_loopback_test *resp = embedded_payload(wrb); spin_unlock_bh(&adapter->mcc_lock);
wait_for_completion(&adapter->et_cmd_compl);
resp = embedded_payload(wrb);
status = le32_to_cpu(resp->status); status = le32_to_cpu(resp->status);
}
return status;
err: err:
spin_unlock_bh(&adapter->mcc_lock); spin_unlock_bh(&adapter->mcc_lock);
return status; return status;
......
...@@ -2744,14 +2744,17 @@ static int be_rx_qs_create(struct be_adapter *adapter) ...@@ -2744,14 +2744,17 @@ static int be_rx_qs_create(struct be_adapter *adapter)
if (!BEx_chip(adapter)) if (!BEx_chip(adapter))
adapter->rss_flags |= RSS_ENABLE_UDP_IPV4 | adapter->rss_flags |= RSS_ENABLE_UDP_IPV4 |
RSS_ENABLE_UDP_IPV6; RSS_ENABLE_UDP_IPV6;
} else {
/* Disable RSS, if only default RX Q is created */
adapter->rss_flags = RSS_ENABLE_NONE;
}
rc = be_cmd_rss_config(adapter, rsstable, adapter->rss_flags, rc = be_cmd_rss_config(adapter, rsstable, adapter->rss_flags,
128); 128);
if (rc) { if (rc) {
adapter->rss_flags = 0; adapter->rss_flags = RSS_ENABLE_NONE;
return rc; return rc;
} }
}
/* First time posting */ /* First time posting */
for_all_rx_queues(adapter, rxo, i) for_all_rx_queues(adapter, rxo, i)
...@@ -3124,11 +3127,11 @@ static void BEx_get_resources(struct be_adapter *adapter, ...@@ -3124,11 +3127,11 @@ static void BEx_get_resources(struct be_adapter *adapter,
{ {
struct pci_dev *pdev = adapter->pdev; struct pci_dev *pdev = adapter->pdev;
bool use_sriov = false; bool use_sriov = false;
if (BE3_chip(adapter) && sriov_want(adapter)) {
int max_vfs; int max_vfs;
max_vfs = pci_sriov_get_totalvfs(pdev); max_vfs = pci_sriov_get_totalvfs(pdev);
if (BE3_chip(adapter) && sriov_want(adapter)) {
res->max_vfs = max_vfs > 0 ? min(MAX_VFS, max_vfs) : 0; res->max_vfs = max_vfs > 0 ? min(MAX_VFS, max_vfs) : 0;
use_sriov = res->max_vfs; use_sriov = res->max_vfs;
} }
...@@ -3159,7 +3162,11 @@ static void BEx_get_resources(struct be_adapter *adapter, ...@@ -3159,7 +3162,11 @@ static void BEx_get_resources(struct be_adapter *adapter,
BE3_MAX_RSS_QS : BE2_MAX_RSS_QS; BE3_MAX_RSS_QS : BE2_MAX_RSS_QS;
res->max_rx_qs = res->max_rss_qs + 1; res->max_rx_qs = res->max_rss_qs + 1;
res->max_evt_qs = be_physfn(adapter) ? BE3_MAX_EVT_QS : 1; if (be_physfn(adapter))
res->max_evt_qs = (max_vfs > 0) ?
BE3_SRIOV_MAX_EVT_QS : BE3_MAX_EVT_QS;
else
res->max_evt_qs = 1;
res->if_cap_flags = BE_IF_CAP_FLAGS_WANT; res->if_cap_flags = BE_IF_CAP_FLAGS_WANT;
if (!(adapter->function_caps & BE_FUNCTION_CAPS_RSS)) if (!(adapter->function_caps & BE_FUNCTION_CAPS_RSS))
...@@ -4205,7 +4212,7 @@ static int be_ctrl_init(struct be_adapter *adapter) ...@@ -4205,7 +4212,7 @@ static int be_ctrl_init(struct be_adapter *adapter)
spin_lock_init(&adapter->mcc_lock); spin_lock_init(&adapter->mcc_lock);
spin_lock_init(&adapter->mcc_cq_lock); spin_lock_init(&adapter->mcc_cq_lock);
init_completion(&adapter->flash_compl); init_completion(&adapter->et_cmd_compl);
pci_save_state(adapter->pdev); pci_save_state(adapter->pdev);
return 0; return 0;
......
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