From nobody Mon Apr 6 10:32:32 2026 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B21343D811B; Fri, 20 Mar 2026 23:54:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=13.77.154.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774050878; cv=none; b=l6uX6BpVi1WZ0tA5J+FW726ECcukx/SCoGGnTTVXmS1+2SwpdHk/rFI8CIoruOykxcHHwyUHGATJZ7o55V8iZKHOi6A7w/1MXeM1MWJ2oWTy8Ic7zW76wCqCOQ+YdXfbCiVubrcTVlUeCVpioXtoG4eVE23AWIi+YFD3KpvGeaE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774050878; c=relaxed/simple; bh=nt8OeVcboKxU0k35SmRxY1lNGHtGRZilRjjiqkf8xIE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=odfsb90QiSqa0Zof30O0lonS2Y1z56jsvXjV9bQRQBhOuMr5FFc4y055XNYXb7wHIJO88X7s/jwLbiB5poWxJ/3s1SkR61WIGiUzcZ5yUgaLqXEt4blyugTU/OF3S0j30sJlTVLd0hyYgk/WetWeB383U1ZDulVXE4scCCuwkrQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microsoft.com; spf=pass smtp.mailfrom=linux.microsoft.com; arc=none smtp.client-ip=13.77.154.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=microsoft.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.microsoft.com Received: by linux.microsoft.com (Postfix, from userid 1202) id A989020B6F1B; Fri, 20 Mar 2026 16:54:36 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com A989020B6F1B From: Long Li To: Long Li , Konstantin Taranov , Jakub Kicinski , "David S . Miller" , Paolo Abeni , Eric Dumazet , Andrew Lunn , Jason Gunthorpe , Leon Romanovsky , Haiyang Zhang , "K . Y . Srinivasan" , Wei Liu , Dexuan Cui Cc: Simon Horman , netdev@vger.kernel.org, linux-rdma@vger.kernel.org, linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v4 4/6] net: mana: Use GIC functions to allocate global EQs Date: Fri, 20 Mar 2026 16:54:17 -0700 Message-ID: <5844571ee73dd04570b8764cdbef86fdac3a7f95.1774049761.git.longli@microsoft.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the GDMA global interrupt setup code with the new GIC allocation and release functions for managing interrupt contexts. Signed-off-by: Long Li --- .../net/ethernet/microsoft/mana/gdma_main.c | 80 +++---------------- 1 file changed, 10 insertions(+), 70 deletions(-) diff --git a/drivers/net/ethernet/microsoft/mana/gdma_main.c b/drivers/net/= ethernet/microsoft/mana/gdma_main.c index 69a4427919f5..e7d5e589a217 100644 --- a/drivers/net/ethernet/microsoft/mana/gdma_main.c +++ b/drivers/net/ethernet/microsoft/mana/gdma_main.c @@ -1860,30 +1860,13 @@ static int mana_gd_setup_dyn_irqs(struct pci_dev *p= dev, int nvec) * further used in irq_setup() */ for (i =3D 1; i <=3D nvec; i++) { - gic =3D kzalloc_obj(*gic); + gic =3D mana_gd_get_gic(gc, false, &i); if (!gic) { err =3D -ENOMEM; goto free_irq; } - gic->handler =3D mana_gd_process_eq_events; - INIT_LIST_HEAD(&gic->eq_list); - spin_lock_init(&gic->lock); - - snprintf(gic->name, MANA_IRQ_NAME_SZ, "mana_q%d@pci:%s", - i - 1, pci_name(pdev)); - - /* one pci vector is already allocated for HWC */ - irqs[i - 1] =3D pci_irq_vector(pdev, i); - if (irqs[i - 1] < 0) { - err =3D irqs[i - 1]; - goto free_current_gic; - } - - err =3D request_irq(irqs[i - 1], mana_gd_intr, 0, gic->name, gic); - if (err) - goto free_current_gic; =20 - xa_store(&gc->irq_contexts, i, gic, GFP_KERNEL); + irqs[i - 1] =3D gic->irq; } =20 /* @@ -1905,19 +1888,11 @@ static int mana_gd_setup_dyn_irqs(struct pci_dev *p= dev, int nvec) kfree(irqs); return 0; =20 -free_current_gic: - kfree(gic); free_irq: for (i -=3D 1; i > 0; i--) { irq =3D pci_irq_vector(pdev, i); - gic =3D xa_load(&gc->irq_contexts, i); - if (WARN_ON(!gic)) - continue; - irq_update_affinity_hint(irq, NULL); - free_irq(irq, gic); - xa_erase(&gc->irq_contexts, i); - kfree(gic); + mana_gd_put_gic(gc, false, i); } kfree(irqs); return err; @@ -1938,34 +1913,13 @@ static int mana_gd_setup_irqs(struct pci_dev *pdev,= int nvec) start_irqs =3D irqs; =20 for (i =3D 0; i < nvec; i++) { - gic =3D kzalloc_obj(*gic); + gic =3D mana_gd_get_gic(gc, false, &i); if (!gic) { err =3D -ENOMEM; goto free_irq; } =20 - gic->handler =3D mana_gd_process_eq_events; - INIT_LIST_HEAD(&gic->eq_list); - spin_lock_init(&gic->lock); - - if (!i) - snprintf(gic->name, MANA_IRQ_NAME_SZ, "mana_hwc@pci:%s", - pci_name(pdev)); - else - snprintf(gic->name, MANA_IRQ_NAME_SZ, "mana_q%d@pci:%s", - i - 1, pci_name(pdev)); - - irqs[i] =3D pci_irq_vector(pdev, i); - if (irqs[i] < 0) { - err =3D irqs[i]; - goto free_current_gic; - } - - err =3D request_irq(irqs[i], mana_gd_intr, 0, gic->name, gic); - if (err) - goto free_current_gic; - - xa_store(&gc->irq_contexts, i, gic, GFP_KERNEL); + irqs[i] =3D gic->irq; } =20 /* If number of IRQ is one extra than number of online CPUs, @@ -1994,19 +1948,11 @@ static int mana_gd_setup_irqs(struct pci_dev *pdev,= int nvec) kfree(start_irqs); return 0; =20 -free_current_gic: - kfree(gic); free_irq: for (i -=3D 1; i >=3D 0; i--) { irq =3D pci_irq_vector(pdev, i); - gic =3D xa_load(&gc->irq_contexts, i); - if (WARN_ON(!gic)) - continue; - irq_update_affinity_hint(irq, NULL); - free_irq(irq, gic); - xa_erase(&gc->irq_contexts, i); - kfree(gic); + mana_gd_put_gic(gc, false, i); } =20 kfree(start_irqs); @@ -2081,26 +2027,20 @@ static int mana_gd_setup_remaining_irqs(struct pci_= dev *pdev) static void mana_gd_remove_irqs(struct pci_dev *pdev) { struct gdma_context *gc =3D pci_get_drvdata(pdev); - struct gdma_irq_context *gic; int irq, i; =20 if (gc->max_num_msix < 1) return; =20 for (i =3D 0; i < gc->max_num_msix; i++) { - irq =3D pci_irq_vector(pdev, i); - if (irq < 0) - continue; - - gic =3D xa_load(&gc->irq_contexts, i); - if (WARN_ON(!gic)) + if (!xa_load(&gc->irq_contexts, i)) continue; =20 /* Need to clear the hint before free_irq */ + irq =3D pci_irq_vector(pdev, i); irq_update_affinity_hint(irq, NULL); - free_irq(irq, gic); - xa_erase(&gc->irq_contexts, i); - kfree(gic); + + mana_gd_put_gic(gc, false, i); } =20 pci_free_irq_vectors(pdev); --=20 2.43.0