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: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
ce088848c2
|
@ -104,6 +104,7 @@ static inline char *nic_name(struct pci_dev *pdev)
|
|||
#define BE3_MAX_RSS_QS 16
|
||||
#define BE3_MAX_TX_QS 16
|
||||
#define BE3_MAX_EVT_QS 16
|
||||
#define BE3_SRIOV_MAX_EVT_QS 8
|
||||
|
||||
#define MAX_RX_QS 32
|
||||
#define MAX_EVT_QS 32
|
||||
|
@ -480,7 +481,7 @@ struct be_adapter {
|
|||
struct list_head entry;
|
||||
|
||||
u32 flash_status;
|
||||
struct completion flash_compl;
|
||||
struct completion et_cmd_compl;
|
||||
|
||||
struct be_resources res; /* resources available for the func */
|
||||
u16 num_vfs; /* Number of VFs provisioned by PF */
|
||||
|
|
|
@ -141,11 +141,17 @@ static int be_mcc_compl_process(struct be_adapter *adapter,
|
|||
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) ||
|
||||
(opcode == OPCODE_COMMON_WRITE_OBJECT)) &&
|
||||
(subsystem == CMD_SUBSYSTEM_COMMON)) {
|
||||
adapter->flash_status = compl_status;
|
||||
complete(&adapter->flash_compl);
|
||||
complete(&adapter->et_cmd_compl);
|
||||
}
|
||||
|
||||
if (compl_status == MCC_STATUS_SUCCESS) {
|
||||
|
@ -2017,6 +2023,9 @@ int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable,
|
|||
0x3ea83c02, 0x4a110304};
|
||||
int status;
|
||||
|
||||
if (!(be_if_cap_flags(adapter) & BE_IF_FLAGS_RSS))
|
||||
return 0;
|
||||
|
||||
if (mutex_lock_interruptible(&adapter->mbox_lock))
|
||||
return -1;
|
||||
|
||||
|
@ -2160,7 +2169,7 @@ int lancer_cmd_write_object(struct be_adapter *adapter, struct be_dma_mem *cmd,
|
|||
be_mcc_notify(adapter);
|
||||
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)))
|
||||
status = -1;
|
||||
else
|
||||
|
@ -2255,8 +2264,8 @@ int be_cmd_write_flashrom(struct be_adapter *adapter, struct be_dma_mem *cmd,
|
|||
be_mcc_notify(adapter);
|
||||
spin_unlock_bh(&adapter->mcc_lock);
|
||||
|
||||
if (!wait_for_completion_timeout(&adapter->flash_compl,
|
||||
msecs_to_jiffies(40000)))
|
||||
if (!wait_for_completion_timeout(&adapter->et_cmd_compl,
|
||||
msecs_to_jiffies(40000)))
|
||||
status = -1;
|
||||
else
|
||||
status = adapter->flash_status;
|
||||
|
@ -2367,6 +2376,7 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
|
|||
{
|
||||
struct be_mcc_wrb *wrb;
|
||||
struct be_cmd_req_loopback_test *req;
|
||||
struct be_cmd_resp_loopback_test *resp;
|
||||
int status;
|
||||
|
||||
spin_lock_bh(&adapter->mcc_lock);
|
||||
|
@ -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,
|
||||
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->src_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,
|
|||
req->num_pkts = cpu_to_le32(num_pkts);
|
||||
req->loopback_type = cpu_to_le32(loopback_type);
|
||||
|
||||
status = be_mcc_notify_wait(adapter);
|
||||
if (!status) {
|
||||
struct be_cmd_resp_loopback_test *resp = embedded_payload(wrb);
|
||||
status = le32_to_cpu(resp->status);
|
||||
}
|
||||
be_mcc_notify(adapter);
|
||||
|
||||
spin_unlock_bh(&adapter->mcc_lock);
|
||||
|
||||
wait_for_completion(&adapter->et_cmd_compl);
|
||||
resp = embedded_payload(wrb);
|
||||
status = le32_to_cpu(resp->status);
|
||||
|
||||
return status;
|
||||
err:
|
||||
spin_unlock_bh(&adapter->mcc_lock);
|
||||
return status;
|
||||
|
|
|
@ -2744,13 +2744,16 @@ static int be_rx_qs_create(struct be_adapter *adapter)
|
|||
if (!BEx_chip(adapter))
|
||||
adapter->rss_flags |= RSS_ENABLE_UDP_IPV4 |
|
||||
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,
|
||||
128);
|
||||
if (rc) {
|
||||
adapter->rss_flags = 0;
|
||||
return rc;
|
||||
}
|
||||
rc = be_cmd_rss_config(adapter, rsstable, adapter->rss_flags,
|
||||
128);
|
||||
if (rc) {
|
||||
adapter->rss_flags = RSS_ENABLE_NONE;
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* First time posting */
|
||||
|
@ -3124,11 +3127,11 @@ static void BEx_get_resources(struct be_adapter *adapter,
|
|||
{
|
||||
struct pci_dev *pdev = adapter->pdev;
|
||||
bool use_sriov = false;
|
||||
int max_vfs;
|
||||
|
||||
max_vfs = pci_sriov_get_totalvfs(pdev);
|
||||
|
||||
if (BE3_chip(adapter) && sriov_want(adapter)) {
|
||||
int max_vfs;
|
||||
|
||||
max_vfs = pci_sriov_get_totalvfs(pdev);
|
||||
res->max_vfs = max_vfs > 0 ? min(MAX_VFS, max_vfs) : 0;
|
||||
use_sriov = res->max_vfs;
|
||||
}
|
||||
|
@ -3159,7 +3162,11 @@ static void BEx_get_resources(struct be_adapter *adapter,
|
|||
BE3_MAX_RSS_QS : BE2_MAX_RSS_QS;
|
||||
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;
|
||||
if (!(adapter->function_caps & BE_FUNCTION_CAPS_RSS))
|
||||
|
@ -4205,7 +4212,7 @@ static int be_ctrl_init(struct be_adapter *adapter)
|
|||
spin_lock_init(&adapter->mcc_lock);
|
||||
spin_lock_init(&adapter->mcc_cq_lock);
|
||||
|
||||
init_completion(&adapter->flash_compl);
|
||||
init_completion(&adapter->et_cmd_compl);
|
||||
pci_save_state(adapter->pdev);
|
||||
return 0;
|
||||
|
||||
|
|
Loading…
Reference in New Issue