Commit a1c6fd43 authored by Harsh Jain's avatar Harsh Jain Committed by Herbert Xu

crypto: chelsio - Update ntx queue received from cxgb4

Update cxgb4 to send No. of Tx Queue created in lldinfo struct
and use the same ntxq in chcr driver.

This patch depends on following commit
commit  add92a81
"Fix memory corruption in DMA Mapped buffers"

v2:
Free txq_info in error case as pointed by Lino Sanfilippo.
Signed-off-by: default avatarHarsh Jain <harsh@chelsio.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 18e732b8
...@@ -1338,8 +1338,7 @@ static int chcr_device_init(struct chcr_context *ctx) ...@@ -1338,8 +1338,7 @@ static int chcr_device_init(struct chcr_context *ctx)
} }
ctx->dev = u_ctx->dev; ctx->dev = u_ctx->dev;
adap = padap(ctx->dev); adap = padap(ctx->dev);
ntxq = min_not_zero((unsigned int)u_ctx->lldi.nrxq, ntxq = u_ctx->lldi.ntxq;
adap->vres.ncrypto_fc);
rxq_perchan = u_ctx->lldi.nrxq / u_ctx->lldi.nchan; rxq_perchan = u_ctx->lldi.nrxq / u_ctx->lldi.nchan;
txq_perchan = ntxq / u_ctx->lldi.nchan; txq_perchan = ntxq / u_ctx->lldi.nchan;
spin_lock(&ctx->dev->lock_chcr_dev); spin_lock(&ctx->dev->lock_chcr_dev);
......
...@@ -43,7 +43,7 @@ static chcr_handler_func work_handlers[NUM_CPL_CMDS] = { ...@@ -43,7 +43,7 @@ static chcr_handler_func work_handlers[NUM_CPL_CMDS] = {
static struct cxgb4_uld_info chcr_uld_info = { static struct cxgb4_uld_info chcr_uld_info = {
.name = DRV_MODULE_NAME, .name = DRV_MODULE_NAME,
.nrxq = MAX_ULD_QSETS, .nrxq = MAX_ULD_QSETS,
.ntxq = MAX_ULD_QSETS, /* Max ntxq will be derived from fw config file*/
.rxq_size = 1024, .rxq_size = 1024,
.add = chcr_uld_add, .add = chcr_uld_add,
.state_change = chcr_uld_state_change, .state_change = chcr_uld_state_change,
......
...@@ -520,10 +520,20 @@ setup_sge_txq_uld(struct adapter *adap, unsigned int uld_type, ...@@ -520,10 +520,20 @@ setup_sge_txq_uld(struct adapter *adap, unsigned int uld_type,
txq_info = kzalloc(sizeof(*txq_info), GFP_KERNEL); txq_info = kzalloc(sizeof(*txq_info), GFP_KERNEL);
if (!txq_info) if (!txq_info)
return -ENOMEM; return -ENOMEM;
if (uld_type == CXGB4_ULD_CRYPTO) {
i = min_t(int, adap->vres.ncrypto_fc,
num_online_cpus());
txq_info->ntxq = rounddown(i, adap->params.nports);
if (txq_info->ntxq <= 0) {
dev_warn(adap->pdev_dev, "Crypto Tx Queues can't be zero\n");
kfree(txq_info);
return -EINVAL;
}
i = min_t(int, uld_info->ntxq, num_online_cpus()); } else {
txq_info->ntxq = roundup(i, adap->params.nports); i = min_t(int, uld_info->ntxq, num_online_cpus());
txq_info->ntxq = roundup(i, adap->params.nports);
}
txq_info->uldtxq = kcalloc(txq_info->ntxq, sizeof(struct sge_uld_txq), txq_info->uldtxq = kcalloc(txq_info->ntxq, sizeof(struct sge_uld_txq),
GFP_KERNEL); GFP_KERNEL);
if (!txq_info->uldtxq) { if (!txq_info->uldtxq) {
...@@ -546,11 +556,14 @@ static void uld_queue_init(struct adapter *adap, unsigned int uld_type, ...@@ -546,11 +556,14 @@ static void uld_queue_init(struct adapter *adap, unsigned int uld_type,
struct cxgb4_lld_info *lli) struct cxgb4_lld_info *lli)
{ {
struct sge_uld_rxq_info *rxq_info = adap->sge.uld_rxq_info[uld_type]; struct sge_uld_rxq_info *rxq_info = adap->sge.uld_rxq_info[uld_type];
int tx_uld_type = TX_ULD(uld_type);
struct sge_uld_txq_info *txq_info = adap->sge.uld_txq_info[tx_uld_type];
lli->rxq_ids = rxq_info->rspq_id; lli->rxq_ids = rxq_info->rspq_id;
lli->nrxq = rxq_info->nrxq; lli->nrxq = rxq_info->nrxq;
lli->ciq_ids = rxq_info->rspq_id + rxq_info->nrxq; lli->ciq_ids = rxq_info->rspq_id + rxq_info->nrxq;
lli->nciq = rxq_info->nciq; lli->nciq = rxq_info->nciq;
lli->ntxq = txq_info->ntxq;
} }
int t4_uld_mem_alloc(struct adapter *adap) int t4_uld_mem_alloc(struct adapter *adap)
...@@ -634,7 +647,6 @@ static void uld_init(struct adapter *adap, struct cxgb4_lld_info *lld) ...@@ -634,7 +647,6 @@ static void uld_init(struct adapter *adap, struct cxgb4_lld_info *lld)
lld->ports = adap->port; lld->ports = adap->port;
lld->vr = &adap->vres; lld->vr = &adap->vres;
lld->mtus = adap->params.mtus; lld->mtus = adap->params.mtus;
lld->ntxq = adap->sge.ofldqsets;
lld->nchan = adap->params.nports; lld->nchan = adap->params.nports;
lld->nports = adap->params.nports; lld->nports = adap->params.nports;
lld->wr_cred = adap->params.ofldq_wr_cred; lld->wr_cred = adap->params.ofldq_wr_cred;
......
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