On 8/29/19 3:52 PM, Jakub Kicinski wrote:
On Thu, 29 Aug 2019 11:27:08 -0700, Shannon Nelson wrote:
+static void ionic_lif_qcq_deinit(struct ionic_lif *lif, struct ionic_qcq *qcq)
+{
+       struct ionic_dev *idev = &lif->ionic->idev;
+       struct device *dev = lif->ionic->dev;
+
+       if (!qcq)
+               return;
+
+       ionic_debugfs_del_qcq(qcq);
+
+       if (!(qcq->flags & IONIC_QCQ_F_INITED))
+               return;
+
+       if (qcq->flags & IONIC_QCQ_F_INTR) {
+               ionic_intr_mask(idev->intr_ctrl, qcq->intr.index,
+                               IONIC_INTR_MASK_SET);
+               synchronize_irq(qcq->intr.vector);
+               devm_free_irq(dev, qcq->intr.vector, &qcq->napi);
Doesn't free_irq() basically imply synchronize_irq()?

The synchronize_irq() waits for any threaded handlers to finish, while free_irq() only waits for HW handling.  This helps makes sure we don't have anything still running before we remove resources.

sln


+               netif_napi_del(&qcq->napi);
+       }
+
+       qcq->flags &= ~IONIC_QCQ_F_INITED;

Reply via email to