Messages in this thread Patch in this message | | | From | Yang Yingliang <> | Subject | [PATCH -next] habanalabs/gaudi2: fix free irq in error path in gaudi2_enable_msix() | Date | Thu, 25 Aug 2022 21:31:23 +0800 |
| |
Add two variables to store completion irq and event queue irq. And add a new lable to free event queue irq in error path in gaudi2_enable_msix().
Fixes: d7bb1ac89b2f ("habanalabs: add gaudi2 asic-specific code") Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> --- drivers/misc/habanalabs/gaudi2/gaudi2.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/drivers/misc/habanalabs/gaudi2/gaudi2.c b/drivers/misc/habanalabs/gaudi2/gaudi2.c index 98336a1a84b0..54eca19b270b 100644 --- a/drivers/misc/habanalabs/gaudi2/gaudi2.c +++ b/drivers/misc/habanalabs/gaudi2/gaudi2.c @@ -3518,6 +3518,7 @@ static int gaudi2_enable_msix(struct hl_device *hdev) struct asic_fixed_properties *prop = &hdev->asic_prop; struct gaudi2_device *gaudi2 = hdev->asic_specific; int rc, irq, i, j, user_irq_init_cnt; + int completion_irq, event_queue_irq; irq_handler_t irq_handler; struct hl_cq *cq; @@ -3532,17 +3533,19 @@ static int gaudi2_enable_msix(struct hl_device *hdev) return rc; } - irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION); + completion_irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION); cq = &hdev->completion_queue[GAUDI2_RESERVED_CQ_CS_COMPLETION]; - rc = request_irq(irq, hl_irq_handler_cq, 0, gaudi2_irq_name(GAUDI2_IRQ_NUM_COMPLETION), cq); + rc = request_irq(completion_irq, hl_irq_handler_cq, 0, + gaudi2_irq_name(GAUDI2_IRQ_NUM_COMPLETION), cq); if (rc) { dev_err(hdev->dev, "Failed to request IRQ %d", irq); goto free_irq_vectors; } - irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_EVENT_QUEUE); - rc = request_irq(irq, hl_irq_handler_eq, 0, gaudi2_irq_name(GAUDI2_IRQ_NUM_EVENT_QUEUE), - &hdev->event_queue); + event_queue_irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_EVENT_QUEUE); + rc = request_irq(event_queue_irq, hl_irq_handler_eq, 0, + gaudi2_irq_name(GAUDI2_IRQ_NUM_EVENT_QUEUE), + &hdev->event_queue); if (rc) { dev_err(hdev->dev, "Failed to request IRQ %d", irq); goto free_completion_irq; @@ -3551,7 +3554,7 @@ static int gaudi2_enable_msix(struct hl_device *hdev) rc = gaudi2_dec_enable_msix(hdev); if (rc) { dev_err(hdev->dev, "Failed to enable decoder IRQ"); - goto free_completion_irq; + goto free_event_queue_irq; } for (i = GAUDI2_IRQ_NUM_USER_FIRST, j = prop->user_dec_intr_count, user_irq_init_cnt = 0; @@ -3582,9 +3585,11 @@ static int gaudi2_enable_msix(struct hl_device *hdev) gaudi2_dec_disable_msix(hdev, GAUDI2_IRQ_NUM_SHARED_DEC1_ABNRM + 1); +free_event_queue_irq: + free_irq(event_queue_irq, &hdev->event_queue); + free_completion_irq: - irq = pci_irq_vector(hdev->pdev, GAUDI2_IRQ_NUM_COMPLETION); - free_irq(irq, cq); + free_irq(completion_irq, cq); free_irq_vectors: pci_free_irq_vectors(hdev->pdev); -- 2.25.1
| |