.. | .. |
---|
257 | 257 | .oper = IONIC_Q_ENABLE, |
---|
258 | 258 | }, |
---|
259 | 259 | }; |
---|
| 260 | + int ret; |
---|
260 | 261 | |
---|
261 | 262 | idev = &lif->ionic->idev; |
---|
262 | 263 | dev = lif->ionic->dev; |
---|
.. | .. |
---|
264 | 265 | dev_dbg(dev, "q_enable.index %d q_enable.qtype %d\n", |
---|
265 | 266 | ctx.cmd.q_control.index, ctx.cmd.q_control.type); |
---|
266 | 267 | |
---|
| 268 | + if (qcq->flags & IONIC_QCQ_F_INTR) |
---|
| 269 | + ionic_intr_clean(idev->intr_ctrl, qcq->intr.index); |
---|
| 270 | + |
---|
| 271 | + ret = ionic_adminq_post_wait(lif, &ctx); |
---|
| 272 | + if (ret) |
---|
| 273 | + return ret; |
---|
| 274 | + |
---|
| 275 | + if (qcq->napi.poll) |
---|
| 276 | + napi_enable(&qcq->napi); |
---|
| 277 | + |
---|
267 | 278 | if (qcq->flags & IONIC_QCQ_F_INTR) { |
---|
268 | 279 | irq_set_affinity_hint(qcq->intr.vector, |
---|
269 | 280 | &qcq->intr.affinity_mask); |
---|
270 | | - napi_enable(&qcq->napi); |
---|
271 | | - ionic_intr_clean(idev->intr_ctrl, qcq->intr.index); |
---|
272 | 281 | ionic_intr_mask(idev->intr_ctrl, qcq->intr.index, |
---|
273 | 282 | IONIC_INTR_MASK_CLEAR); |
---|
274 | 283 | } |
---|
275 | 284 | |
---|
276 | | - return ionic_adminq_post_wait(lif, &ctx); |
---|
| 285 | + return 0; |
---|
277 | 286 | } |
---|
278 | 287 | |
---|
279 | 288 | static int ionic_qcq_disable(struct ionic_qcq *qcq, bool send_to_hw) |
---|
.. | .. |
---|
424 | 433 | static void ionic_link_qcq_interrupts(struct ionic_qcq *src_qcq, |
---|
425 | 434 | struct ionic_qcq *n_qcq) |
---|
426 | 435 | { |
---|
427 | | - if (WARN_ON(n_qcq->flags & IONIC_QCQ_F_INTR)) { |
---|
428 | | - ionic_intr_free(n_qcq->cq.lif->ionic, n_qcq->intr.index); |
---|
429 | | - n_qcq->flags &= ~IONIC_QCQ_F_INTR; |
---|
430 | | - } |
---|
431 | | - |
---|
432 | 436 | n_qcq->intr.vector = src_qcq->intr.vector; |
---|
433 | 437 | n_qcq->intr.index = src_qcq->intr.index; |
---|
434 | 438 | } |
---|