提交 9381699e 编写于 作者: S Shiraz Saleem 提交者: Doug Ledford

i40iw: Move ceq_valid to i40iw_sc_dev structure

Completion Event Queues are created and destroyed on
a per device basis as opposed to per User-space Direct
Access resource.

Move ceq_valid to the correct place in i40iw_sc_dev
from i40iw_puda_rsrc.
Signed-off-by: NShiraz Saleem <shiraz.saleem@intel.com>
Signed-off-by: NDoug Ledford <dledford@redhat.com>
上级 343d86bd
...@@ -353,6 +353,8 @@ static void i40iw_dele_ceqs(struct i40iw_device *iwdev) ...@@ -353,6 +353,8 @@ static void i40iw_dele_ceqs(struct i40iw_device *iwdev)
i40iw_disable_irq(dev, msix_vec, (void *)iwceq); i40iw_disable_irq(dev, msix_vec, (void *)iwceq);
i40iw_destroy_ceq(iwdev, iwceq); i40iw_destroy_ceq(iwdev, iwceq);
} }
iwdev->sc_dev.ceq_valid = false;
} }
/** /**
...@@ -810,17 +812,16 @@ static enum i40iw_status_code i40iw_setup_ceqs(struct i40iw_device *iwdev, ...@@ -810,17 +812,16 @@ static enum i40iw_status_code i40iw_setup_ceqs(struct i40iw_device *iwdev,
i40iw_enable_intr(&iwdev->sc_dev, msix_vec->idx); i40iw_enable_intr(&iwdev->sc_dev, msix_vec->idx);
iwdev->ceqs_count++; iwdev->ceqs_count++;
} }
exit: exit:
if (status) { if (status && !iwdev->ceqs_count) {
if (!iwdev->ceqs_count) { kfree(iwdev->ceqlist);
kfree(iwdev->ceqlist); iwdev->ceqlist = NULL;
iwdev->ceqlist = NULL; return status;
} else { } else {
status = 0; iwdev->sc_dev.ceq_valid = true;
} return 0;
} }
return status;
} }
/** /**
......
...@@ -611,7 +611,7 @@ static enum i40iw_status_code i40iw_puda_qp_create(struct i40iw_puda_rsrc *rsrc) ...@@ -611,7 +611,7 @@ static enum i40iw_status_code i40iw_puda_qp_create(struct i40iw_puda_rsrc *rsrc)
qp->user_pri = 0; qp->user_pri = 0;
i40iw_qp_add_qos(qp); i40iw_qp_add_qos(qp);
i40iw_puda_qp_setctx(rsrc); i40iw_puda_qp_setctx(rsrc);
if (rsrc->ceq_valid) if (rsrc->dev->ceq_valid)
ret = i40iw_cqp_qp_create_cmd(rsrc->dev, qp); ret = i40iw_cqp_qp_create_cmd(rsrc->dev, qp);
else else
ret = i40iw_puda_qp_wqe(rsrc->dev, qp); ret = i40iw_puda_qp_wqe(rsrc->dev, qp);
...@@ -704,7 +704,7 @@ static enum i40iw_status_code i40iw_puda_cq_create(struct i40iw_puda_rsrc *rsrc) ...@@ -704,7 +704,7 @@ static enum i40iw_status_code i40iw_puda_cq_create(struct i40iw_puda_rsrc *rsrc)
ret = dev->iw_priv_cq_ops->cq_init(cq, &info); ret = dev->iw_priv_cq_ops->cq_init(cq, &info);
if (ret) if (ret)
goto error; goto error;
if (rsrc->ceq_valid) if (rsrc->dev->ceq_valid)
ret = i40iw_cqp_cq_create_cmd(dev, cq); ret = i40iw_cqp_cq_create_cmd(dev, cq);
else else
ret = i40iw_puda_cq_wqe(dev, cq); ret = i40iw_puda_cq_wqe(dev, cq);
...@@ -724,7 +724,7 @@ static void i40iw_puda_free_qp(struct i40iw_puda_rsrc *rsrc) ...@@ -724,7 +724,7 @@ static void i40iw_puda_free_qp(struct i40iw_puda_rsrc *rsrc)
struct i40iw_ccq_cqe_info compl_info; struct i40iw_ccq_cqe_info compl_info;
struct i40iw_sc_dev *dev = rsrc->dev; struct i40iw_sc_dev *dev = rsrc->dev;
if (rsrc->ceq_valid) { if (rsrc->dev->ceq_valid) {
i40iw_cqp_qp_destroy_cmd(dev, &rsrc->qp); i40iw_cqp_qp_destroy_cmd(dev, &rsrc->qp);
return; return;
} }
...@@ -757,7 +757,7 @@ static void i40iw_puda_free_cq(struct i40iw_puda_rsrc *rsrc) ...@@ -757,7 +757,7 @@ static void i40iw_puda_free_cq(struct i40iw_puda_rsrc *rsrc)
struct i40iw_ccq_cqe_info compl_info; struct i40iw_ccq_cqe_info compl_info;
struct i40iw_sc_dev *dev = rsrc->dev; struct i40iw_sc_dev *dev = rsrc->dev;
if (rsrc->ceq_valid) { if (rsrc->dev->ceq_valid) {
i40iw_cqp_cq_destroy_cmd(dev, &rsrc->cq); i40iw_cqp_cq_destroy_cmd(dev, &rsrc->cq);
return; return;
} }
...@@ -922,7 +922,6 @@ enum i40iw_status_code i40iw_puda_create_rsrc(struct i40iw_sc_vsi *vsi, ...@@ -922,7 +922,6 @@ enum i40iw_status_code i40iw_puda_create_rsrc(struct i40iw_sc_vsi *vsi,
rsrc->xmit_complete = i40iw_ieq_tx_compl; rsrc->xmit_complete = i40iw_ieq_tx_compl;
} }
rsrc->ceq_valid = info->ceq_valid;
rsrc->type = info->type; rsrc->type = info->type;
rsrc->sq_wrtrk_array = (struct i40iw_sq_uk_wr_trk_info *)((u8 *)vmem->va + pudasize); rsrc->sq_wrtrk_array = (struct i40iw_sq_uk_wr_trk_info *)((u8 *)vmem->va + pudasize);
rsrc->rq_wrid_array = (u64 *)((u8 *)vmem->va + pudasize + sqwridsize); rsrc->rq_wrid_array = (u64 *)((u8 *)vmem->va + pudasize + sqwridsize);
......
...@@ -100,7 +100,6 @@ struct i40iw_puda_rsrc_info { ...@@ -100,7 +100,6 @@ struct i40iw_puda_rsrc_info {
enum puda_resource_type type; /* ILQ or IEQ */ enum puda_resource_type type; /* ILQ or IEQ */
u32 count; u32 count;
u16 pd_id; u16 pd_id;
bool ceq_valid;
u32 cq_id; u32 cq_id;
u32 qp_id; u32 qp_id;
u32 sq_size; u32 sq_size;
...@@ -125,7 +124,6 @@ struct i40iw_puda_rsrc { ...@@ -125,7 +124,6 @@ struct i40iw_puda_rsrc {
enum puda_resource_type type; enum puda_resource_type type;
u16 buf_size; /*buffer must be max datalen + tcpip hdr + mac */ u16 buf_size; /*buffer must be max datalen + tcpip hdr + mac */
u16 mss; u16 mss;
bool ceq_valid;
u32 cq_id; u32 cq_id;
u32 qp_id; u32 qp_id;
u32 sq_size; u32 sq_size;
......
...@@ -505,6 +505,7 @@ struct i40iw_sc_dev { ...@@ -505,6 +505,7 @@ struct i40iw_sc_dev {
u8 hmc_fn_id; u8 hmc_fn_id;
bool is_pf; bool is_pf;
bool vchnl_up; bool vchnl_up;
bool ceq_valid;
u8 vf_id; u8 vf_id;
wait_queue_head_t vf_reqs; wait_queue_head_t vf_reqs;
u64 cqp_cmd_stats[OP_SIZE_CQP_STAT_ARRAY]; u64 cqp_cmd_stats[OP_SIZE_CQP_STAT_ARRAY];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册