Commit 761fab37 authored by Rasesh Mody's avatar Rasesh Mody Committed by David S. Miller

bna: Async Mode Tx Rx Init Fix

Change details:
 - Async mode of Tx/Rx queue initialization in BNAD from a task queue context
   runs into non-unique taskq allocation issues. Get rid of Tx/Rx
   initialization from task q context
 - In the attach function, wait for IOC enable, then do Tx/Rx queue
   initialization. Default BNA attributes are used when IOC enable from attach
   fails and values are set to:
   1 TxQ, 1 RxQ, 1 Unicast MAC, 1 RIT entry
Signed-off-by: default avatarGurunatha Karaje <gkaraje@brocade.com>
Signed-off-by: default avatarRasesh Mody <rmody@brocade.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a2122d95
...@@ -167,13 +167,14 @@ bna_bfi_attr_get_rsp(struct bna_ioceth *ioceth, ...@@ -167,13 +167,14 @@ bna_bfi_attr_get_rsp(struct bna_ioceth *ioceth,
* Store only if not set earlier, since BNAD can override the HW * Store only if not set earlier, since BNAD can override the HW
* attributes * attributes
*/ */
if (!ioceth->attr.num_txq) if (!ioceth->attr.fw_query_complete) {
ioceth->attr.num_txq = ntohl(rsp->max_cfg); ioceth->attr.num_txq = ntohl(rsp->max_cfg);
if (!ioceth->attr.num_rxp)
ioceth->attr.num_rxp = ntohl(rsp->max_cfg); ioceth->attr.num_rxp = ntohl(rsp->max_cfg);
ioceth->attr.num_ucmac = ntohl(rsp->max_ucmac); ioceth->attr.num_ucmac = ntohl(rsp->max_ucmac);
ioceth->attr.num_mcmac = BFI_ENET_MAX_MCAM; ioceth->attr.num_mcmac = BFI_ENET_MAX_MCAM;
ioceth->attr.max_rit_size = ntohl(rsp->rit_size); ioceth->attr.max_rit_size = ntohl(rsp->rit_size);
ioceth->attr.fw_query_complete = true;
}
bfa_fsm_send_event(ioceth, IOCETH_E_ENET_ATTR_RESP); bfa_fsm_send_event(ioceth, IOCETH_E_ENET_ATTR_RESP);
} }
...@@ -1693,6 +1694,16 @@ static struct bfa_ioc_cbfn bna_ioceth_cbfn = { ...@@ -1693,6 +1694,16 @@ static struct bfa_ioc_cbfn bna_ioceth_cbfn = {
bna_cb_ioceth_reset bna_cb_ioceth_reset
}; };
static void bna_attr_init(struct bna_ioceth *ioceth)
{
ioceth->attr.num_txq = BFI_ENET_DEF_TXQ;
ioceth->attr.num_rxp = BFI_ENET_DEF_RXP;
ioceth->attr.num_ucmac = BFI_ENET_DEF_UCAM;
ioceth->attr.num_mcmac = BFI_ENET_MAX_MCAM;
ioceth->attr.max_rit_size = BFI_ENET_DEF_RITSZ;
ioceth->attr.fw_query_complete = false;
}
static void static void
bna_ioceth_init(struct bna_ioceth *ioceth, struct bna *bna, bna_ioceth_init(struct bna_ioceth *ioceth, struct bna *bna,
struct bna_res_info *res_info) struct bna_res_info *res_info)
...@@ -1738,6 +1749,8 @@ bna_ioceth_init(struct bna_ioceth *ioceth, struct bna *bna, ...@@ -1738,6 +1749,8 @@ bna_ioceth_init(struct bna_ioceth *ioceth, struct bna *bna,
ioceth->stop_cbfn = NULL; ioceth->stop_cbfn = NULL;
ioceth->stop_cbarg = NULL; ioceth->stop_cbarg = NULL;
bna_attr_init(ioceth);
bfa_fsm_set_state(ioceth, bna_ioceth_sm_stopped); bfa_fsm_set_state(ioceth, bna_ioceth_sm_stopped);
} }
...@@ -2036,7 +2049,8 @@ bna_uninit(struct bna *bna) ...@@ -2036,7 +2049,8 @@ bna_uninit(struct bna *bna)
int int
bna_num_txq_set(struct bna *bna, int num_txq) bna_num_txq_set(struct bna *bna, int num_txq)
{ {
if (num_txq > 0 && (num_txq <= bna->ioceth.attr.num_txq)) { if (bna->ioceth.attr.fw_query_complete &&
(num_txq <= bna->ioceth.attr.num_txq)) {
bna->ioceth.attr.num_txq = num_txq; bna->ioceth.attr.num_txq = num_txq;
return BNA_CB_SUCCESS; return BNA_CB_SUCCESS;
} }
...@@ -2047,7 +2061,8 @@ bna_num_txq_set(struct bna *bna, int num_txq) ...@@ -2047,7 +2061,8 @@ bna_num_txq_set(struct bna *bna, int num_txq)
int int
bna_num_rxp_set(struct bna *bna, int num_rxp) bna_num_rxp_set(struct bna *bna, int num_rxp)
{ {
if (num_rxp > 0 && (num_rxp <= bna->ioceth.attr.num_rxp)) { if (bna->ioceth.attr.fw_query_complete &&
(num_rxp <= bna->ioceth.attr.num_rxp)) {
bna->ioceth.attr.num_rxp = num_rxp; bna->ioceth.attr.num_rxp = num_rxp;
return BNA_CB_SUCCESS; return BNA_CB_SUCCESS;
} }
......
...@@ -30,6 +30,10 @@ ...@@ -30,6 +30,10 @@
* SW imposed limits * SW imposed limits
* *
*/ */
#define BFI_ENET_DEF_TXQ 1
#define BFI_ENET_DEF_RXP 1
#define BFI_ENET_DEF_UCAM 1
#define BFI_ENET_DEF_RITSZ 1
#define BFI_ENET_MAX_MCAM 256 #define BFI_ENET_MAX_MCAM 256
......
...@@ -323,6 +323,7 @@ struct bna_qpt { ...@@ -323,6 +323,7 @@ struct bna_qpt {
}; };
struct bna_attr { struct bna_attr {
bool fw_query_complete;
int num_txq; int num_txq;
int num_rxp; int num_rxp;
int num_ucmac; int num_ucmac;
......
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