From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010028.outbound.protection.outlook.com [52.101.201.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 545723939D2 for ; Tue, 7 Jul 2026 09:56:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.28 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783418202; cv=fail; b=etxRal91OFasBRXkBZFkYJ2umVqPL8Gkgao2+y6/yMM3yq23fTSKz8sy17KNRhYsFDaMVWlEylMgXBu2M9Be8UXXhOGDikShyIH4P6bPLgoMBCqkjkQ3uJfPtHRIE+tINe4wLbW4VA3/KQCdot2jtArMF7/TuQ8k9DdmfisDu3o= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783418202; c=relaxed/simple; bh=IULogL2kNCG2MhdGyZFCsJ24piKTwzxAEAonUNB7Y58=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=mGt5oXprgVOEXv9wNwg9m6/b86q4PlCPDsDcGWYuRpfxuwb1UlJRrUZ/NdGdqgcE6uIcj9d0P2CJ9umrgUz8G+Io8Xi/UeHeE245iKVHzhdot8LwvsX2gk2HeSgcZHJBV5pbhTIN2MXniF8NRFfzFMaGG8UrgUAksrZA22kjdvI= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=VX7SXX7h; arc=fail smtp.client-ip=52.101.201.28 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="VX7SXX7h" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yk3hRyIknCkDGsM7Mz+Zi/VLkfBp5E+iANSlBjLmBVgRbwsy4Ptp3oVtaA/d9cAoP2pmIlpeQ6hnD/UpSobW1UmCfMQPAE77HjEVVCIrW1JYUGuLdwmZO+h2LNbIP4D+Mo5AboQAo/qqcOx9B1pBAgBe/njzIfq8GDaHfrp6uhD9svEnBiEKDHCSxTCMUqq2Ua5lAGLJkD1hroIE81Kqiub/v1q07LhHXVGxUkZXF36W3zGFmawDFptk/8JI8jkyLF/WPMFQRDpyKUyCZA+MsKSf8qQaKl55wyR3NEGENnfrqS+aW4PMRJBG2fg+hPCnFZpzAjAb5XBEYwtOmSSnzQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=yar3szi5u3HbfYCueJO2rXNpZn8fY3x70KB9S+QEF4E=; b=uF75O/V1j4P470b1Ye5o7ehprmdxKgE6PwkUs4tDIQL5ktNzFI58JP/LbsyptwjhaD+/9c8sMbIsTn7LLPjE9XJZYmMKLuQIIsQIIGzBTjx3IULBFGStIoXhgCzlB2QhkcjBvaMTGnNXThpbErL4xb+9H7z0dPO5Axjhu5nVerE7QgqD43/TYeV2luvDdYvSSGNdENxlpJXXt++1/+2TPqxnuFUq/9rVru99ojhgfnFoB543iQao9RONUZjhfiwYdkcZUTT4mOQcaUgsM0FwpeDDb3OYwVBISeg9xYly0FS1jn6KClhKPY5drnrZTH7gWU5OmODzEFRSVrHUfDDDaw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linuxfoundation.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yar3szi5u3HbfYCueJO2rXNpZn8fY3x70KB9S+QEF4E=; b=VX7SXX7hti2+MRvAzbl9BEi4gvNpcIgR4FR14Rm5eOzJN5bA1mQ+eO7o9zwsKZQA0OuCEpNEQZDo8MHno6rCu8Wbortc+3SOd+3TdCJRgVviOb7IIRPv3J+KwM8vlBZW5xctPXWM2ggoE7G7h/bQka+J92pUFUldHq7BSbCaqXY= Received: from MN0P220CA0002.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:52e::31) by IA0PR12MB7649.namprd12.prod.outlook.com (2603:10b6:208:437::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.10; Tue, 7 Jul 2026 09:56:35 +0000 Received: from BL6PEPF0001AB4E.namprd04.prod.outlook.com (2603:10b6:208:52e:cafe::e) by MN0P220CA0002.outlook.office365.com (2603:10b6:208:52e::31) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.202.9 via Frontend Transport; Tue, 7 Jul 2026 09:56:35 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL6PEPF0001AB4E.mail.protection.outlook.com (10.167.242.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Tue, 7 Jul 2026 09:56:35 +0000 Received: from satlexmb10.amd.com (10.181.42.219) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Tue, 7 Jul 2026 04:56:34 -0500 Received: from satlexmb07.amd.com (10.181.42.216) by satlexmb10.amd.com (10.181.42.219) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Tue, 7 Jul 2026 04:56:33 -0500 Received: from xhdipdslab46.xilinx.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server id 15.2.2562.41 via Frontend Transport; Tue, 7 Jul 2026 04:56:31 -0500 From: Abhijit Gangurde To: , CC: , , , , Abhijit Gangurde Subject: [PATCH 4/4] RDMA/ionic: implement SRQ event handling support Date: Tue, 7 Jul 2026 15:25:48 +0530 Message-ID: <20260707095555.3939295-10-abhijit.gangurde@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260707095555.3939295-1-abhijit.gangurde@amd.com> References: <20260707095555.3939295-1-abhijit.gangurde@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB4E:EE_|IA0PR12MB7649:EE_ X-MS-Office365-Filtering-Correlation-Id: e0de60a0-d82f-45e5-cd05-08dedc0e082c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|376014|36860700016|23010399003|18002099003|22082099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: rd9Q6jYuwXKn5wBHdtd5RI8p+3UI8a86Gw0Dr+1+PzAc+X1sNO9170P5BO2MXGysXWgqjE4ONuEfKHhLu4ccVKk5StLyeJnpvEa3rf4A2KqrNnD8b2pUcBwacM5mUCF+ITiqkfC6N58ePlkcRbCDgUgFupO+WszNDgJbc6hKqJGPRMzZADzJyktk/Gk7b7K/8+YGXXcuKKRwALhry/2YG/zpSMsGKlHd62SyfEYGvSHBS6I4/Wk/y2GWudj6a5hIDCu/UphWKQbj3leLua9PCe8ygi6ebHkruldqxWMQJBhUvRGe7DM7oBXwC+fP8Fo/6odqqqMUyvgM+SiQSAxOqFQ+2vSm5XyMmeVMm0EdbhlfNwviTNIpwq36/5QhErH0bwnq9vLQ3Vc2ieGdLZhSBwRkU0oa2zNk4yqXAHZlEgFeMbbDuhKjO8C1lLiluRaHBnJ8PWTq4KGAQzLx2POfUlPJ4pZr0td/RM27HT1ISlpL/uY02mz+mK9SLNKHSSF+Mgu6bJ8fWhzSCFNZgmRTDNdpyRTfckf7pZQYDLH8LWl5K++ZdmGhZx8iqYRatCUiQPTE7V/5VASvoEsaL0v+cQfaSphVDqQ++APJAFGINMdMyqw+BsEaGqrOccSr0xmO+KBcyzqATorHbIhHgh9liU5c1iTXemQ7EwelcnwpeYy69AkyWFu2r2kfzocjJU8ISxHI9YRuAlUlsjt6CUs1TQ== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(376014)(36860700016)(23010399003)(18002099003)(22082099003)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: F2aFR8hLdRIh9mqgHr+1tYMoTWJIk4LocKXoIDvjS5QUx3B/ow/da/ojLeA/zPO71iA14IJ+HI8E31+pOzv294w532djgI6t1vrdDb21eEwbfWUVt1gxEFZ34i+K1++rP9+eZ0wP24AEaTby0nPj0uY8GsW0LeN7epQFujOJPFGgvVzHZujXoiJ8HG3g6+QctUGUHSIpvW+IY79VtOVw9ZHNT/hYhLNlM9Z8WZImyOwk/U1jif/lv1vu0rM56ZCFI/BMnokWpD6AIP9nMlihAv27xcRTDhC4M3fN4+2B/IfmhP5GoTQEIGXqx0fQTPmQUI0Vx5T23rJG0dVyCxuAOKkx8Z1WcBpTaoRAi397nRUaGKJpUd8bOL07EWdshP+88ow+SmiZX4SAt7WhuVI9ahzH1kOrFdS8KlEECpZ+fnXSpfOCspRN0k4UOZ3V17RH X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2026 09:56:35.7570 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e0de60a0-d82f-45e5-cd05-08dedc0e082c X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB4E.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB7649 Introduce SRQ event types and associated events. Report these events through the SRQ event handler during event processing. Signed-off-by: Abhijit Gangurde --- drivers/infiniband/hw/ionic/ionic_admin.c | 47 +++++++++++++++++++ .../infiniband/hw/ionic/ionic_controlpath.c | 19 ++++++++ drivers/infiniband/hw/ionic/ionic_fw.h | 6 ++- drivers/infiniband/hw/ionic/ionic_ibdev.c | 4 ++ drivers/infiniband/hw/ionic/ionic_ibdev.h | 10 ++++ 5 files changed, 85 insertions(+), 1 deletion(-) diff --git a/drivers/infiniband/hw/ionic/ionic_admin.c b/drivers/infiniband/hw/ionic/ionic_admin.c index 2537aa55d12d..ad8a45d09252 100644 --- a/drivers/infiniband/hw/ionic/ionic_admin.c +++ b/drivers/infiniband/hw/ionic/ionic_admin.c @@ -890,6 +890,49 @@ static void ionic_qp_event(struct ionic_ibdev *dev, u32 qpid, u8 code) kref_put(&qp->qp_kref, ionic_qp_complete); } +static void ionic_srq_event(struct ionic_ibdev *dev, u32 srqid, u8 code) +{ + struct ionic_srq *srq; + struct ib_event ibev; + unsigned long irqflags; + + xa_lock_irqsave(&dev->srq_tbl, irqflags); + srq = xa_load(&dev->srq_tbl, srqid); + if (srq) + kref_get(&srq->kref); + xa_unlock_irqrestore(&dev->srq_tbl, irqflags); + + if (!srq) { + ibdev_dbg(&dev->ibdev, + "missing srqid %#x code %u\n", srqid, code); + return; + } + + ibev.device = &dev->ibdev; + ibev.element.srq = &srq->ibsrq; + + switch (code) { + case IONIC_V1_EQE_SRQ_LIMIT_REACHED: + ibev.event = IB_EVENT_SRQ_LIMIT_REACHED; + break; + + case IONIC_V1_EQE_SRQ_ERR: + ibev.event = IB_EVENT_SRQ_ERR; + break; + + default: + ibdev_dbg(&dev->ibdev, + "unrecognized srqid %#x code %u\n", srqid, code); + goto out; + } + + if (srq->ibsrq.event_handler) + srq->ibsrq.event_handler(&ibev, srq->ibsrq.srq_context); + +out: + kref_put(&srq->kref, ionic_srq_complete); +} + static u16 ionic_poll_eq(struct ionic_eq *eq, u16 budget) { struct ionic_ibdev *dev = eq->dev; @@ -923,6 +966,10 @@ static u16 ionic_poll_eq(struct ionic_eq *eq, u16 budget) ionic_qp_event(dev, qid, code); break; + case IONIC_V1_EQE_TYPE_SRQ: + ionic_srq_event(dev, qid, code); + break; + default: ibdev_dbg(&dev->ibdev, "unknown event %#x type %u\n", evt, type); diff --git a/drivers/infiniband/hw/ionic/ionic_controlpath.c b/drivers/infiniband/hw/ionic/ionic_controlpath.c index 35eb08dd0761..2525deb7a229 100644 --- a/drivers/infiniband/hw/ionic/ionic_controlpath.c +++ b/drivers/infiniband/hw/ionic/ionic_controlpath.c @@ -2811,6 +2811,7 @@ int ionic_create_srq(struct ib_srq *ibsrq, struct ib_srq_init_attr *attr, struct ionic_srq_req req = {}; struct ionic_tbl_buf buf = {}; u8 udma_mask; + void *entry; int rc; if (attr->srq_type != IB_SRQT_BASIC) @@ -2869,6 +2870,19 @@ int ionic_create_srq(struct ib_srq *ibsrq, struct ib_srq_init_attr *attr, goto err_resp; } + kref_init(&srq->kref); + init_completion(&srq->rel_comp); + + entry = xa_store_irq(&dev->srq_tbl, srq->rq.qid, srq, GFP_KERNEL); + if (entry) { + if (!xa_is_err(entry)) + rc = -EINVAL; + else + rc = xa_err(entry); + + goto err_resp; + } + ionic_pgtbl_unbuf(dev, &buf); attr->attr.max_wr = srq->rq.q.mask; return 0; @@ -2897,6 +2911,11 @@ int ionic_destroy_srq(struct ib_srq *ibsrq, struct ib_udata *udata) if (rc) return rc; + xa_erase_irq(&dev->srq_tbl, srq->rq.qid); + + kref_put(&srq->kref, ionic_srq_complete); + wait_for_completion(&srq->rel_comp); + ionic_rq_destroy(dev, ctx, &srq->rq); ionic_put_srqid(dev, srq->rq.qid); return 0; diff --git a/drivers/infiniband/hw/ionic/ionic_fw.h b/drivers/infiniband/hw/ionic/ionic_fw.h index 632b16932844..eafadb0a16c7 100644 --- a/drivers/infiniband/hw/ionic/ionic_fw.h +++ b/drivers/infiniband/hw/ionic/ionic_fw.h @@ -983,7 +983,7 @@ enum ionic_v1_eqe_evt_bits { /* cq error events */ IONIC_V1_EQE_CQ_ERR = 8, - /* qp and srq events */ + /* qp events */ IONIC_V1_EQE_TYPE_QP = 1, /* qp normal events */ IONIC_V1_EQE_SRQ_LEVEL = 0, @@ -994,6 +994,10 @@ enum ionic_v1_eqe_evt_bits { IONIC_V1_EQE_QP_ERR = 8, IONIC_V1_EQE_QP_ERR_REQUEST = 9, IONIC_V1_EQE_QP_ERR_ACCESS = 10, + /* srq events */ + IONIC_V1_EQE_TYPE_SRQ = 2, + IONIC_V1_EQE_SRQ_LIMIT_REACHED = 0, + IONIC_V1_EQE_SRQ_ERR = 1, }; enum ionic_tfp_csum_profiles { diff --git a/drivers/infiniband/hw/ionic/ionic_ibdev.c b/drivers/infiniband/hw/ionic/ionic_ibdev.c index d8a8e74f56ac..3b4abfc41ca4 100644 --- a/drivers/infiniband/hw/ionic/ionic_ibdev.c +++ b/drivers/infiniband/hw/ionic/ionic_ibdev.c @@ -310,6 +310,8 @@ static void ionic_destroy_ibdev(struct ionic_ibdev *dev) xa_destroy(&dev->qp_tbl); WARN_ON(!xa_empty(&dev->cq_tbl)); xa_destroy(&dev->cq_tbl); + WARN_ON(!xa_empty(&dev->srq_tbl)); + xa_destroy(&dev->srq_tbl); ib_dealloc_device(&dev->ibdev); } @@ -328,6 +330,7 @@ static struct ionic_ibdev *ionic_create_ibdev(struct ionic_aux_dev *ionic_adev) xa_init_flags(&dev->qp_tbl, GFP_ATOMIC); xa_init_flags(&dev->cq_tbl, GFP_ATOMIC); + xa_init_flags(&dev->srq_tbl, GFP_ATOMIC); ionic_init_resids(dev); @@ -380,6 +383,7 @@ static struct ionic_ibdev *ionic_create_ibdev(struct ionic_aux_dev *ionic_adev) ionic_destroy_resids(dev); xa_destroy(&dev->qp_tbl); xa_destroy(&dev->cq_tbl); + xa_destroy(&dev->srq_tbl); ib_dealloc_device(&dev->ibdev); return ERR_PTR(rc); diff --git a/drivers/infiniband/hw/ionic/ionic_ibdev.h b/drivers/infiniband/hw/ionic/ionic_ibdev.h index 895672283264..e29f11b38036 100644 --- a/drivers/infiniband/hw/ionic/ionic_ibdev.h +++ b/drivers/infiniband/hw/ionic/ionic_ibdev.h @@ -91,6 +91,7 @@ struct ionic_ibdev { struct xarray qp_tbl; struct xarray cq_tbl; + struct xarray srq_tbl; struct ionic_resid_bits inuse_dbid; struct ionic_resid_bits inuse_pdid; @@ -272,6 +273,8 @@ struct ionic_rq { struct ionic_srq { struct ib_srq ibsrq; struct ionic_rq rq; + struct kref kref; + struct completion rel_comp; u16 srq_limit; u8 udma_idx; }; @@ -456,6 +459,13 @@ static inline void ionic_cq_complete(struct kref *kref) complete(&cq->cq_rel_comp); } +static inline void ionic_srq_complete(struct kref *kref) +{ + struct ionic_srq *srq = container_of(kref, struct ionic_srq, kref); + + complete(&srq->rel_comp); +} + /* ionic_admin.c */ extern struct workqueue_struct *ionic_evt_workq; void ionic_admin_post(struct ionic_ibdev *dev, struct ionic_admin_wr *wr); -- 2.43.0