Received: by 2002:a05:7412:31a9:b0:e2:908c:2ebd with SMTP id et41csp4942749rdb; Fri, 15 Sep 2023 18:25:01 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGS5k4nJlqAXRZ2ZrmChMW/nkUU1Ba2RAdkzAJKuQK8bHUMQGjR2i/KZ4rdwghqU9Nh7enT X-Received: by 2002:a05:6870:5606:b0:1ba:1998:1d23 with SMTP id m6-20020a056870560600b001ba19981d23mr3497095oao.35.1694827500923; Fri, 15 Sep 2023 18:25:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694827500; cv=none; d=google.com; s=arc-20160816; b=cVConnl+wFUFTVTx3vsZK9AU2sjUXWZ74wJuxo6pcPPz/MxBXwm8sKtM2g1YiWdGJk rOIQB0sIGLh0MqmeZ33usMig4QildjRCzVAu1+IsK2Mb5QQO7s07Cl4GM59s52e4/tHX ymXoWnERJ30GZHVHxFy+oHss0srvCshYLOOTDnNwHUdWqWE2CsGb5YyYd+X9ngB/9SFO VmJUfNaqZmG4eMRp+KGQZFFGDdcIkZquzNu7SHICSFh2uek7A4sJ6kdl4GZahX+XBz1F tnhq1vhR63f6nOy7F3X22M5C7CyW66kHrkOaysmse64WlucQh79Plo8w0uVeqtc0+586 G1Wg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:dkim-signature:dkim-filter; bh=TGsvvgWpwhxqiST3JXUN8KZ0za3/WKQ/h15qpNdLHjA=; fh=EwOlXWsBMUW0kp6PQ4notv7d3oMCrnB/CqKZMn6ZxlE=; b=AfNEPIsgQLd3pAtTvnXlFUgoO/xjy68xvrjoT/0Xhx97E70ffLLGnoGMDztBk/HNjI IJz4ROCmh6Q6K9hiOKGLysb0hw1TAxKNmmU0LFRbE/gLBW8ZPXTLDtyWle5+9W4H53wA e/JtT8Y96D6ATs6yF8WOzRoMWX8gVkoUM3Br6LkRatsAmBd3YFjdxURRMLnZE0VGGGI+ D8KwxW4LYPnJ9h/aNbL/v92ytMaAhjnAvpTqQlS1Y9kcqglqYkf+HDRN1jqXAip/4pYT 7xdV6y8M3gsY0h3K+lnZSS3K8Fv1XhlujRqqvbp2klK+EcNg6+u2FG+xlcu1laqTgw6z mHhg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxonhyperv.com header.s=default header.b=mUYOEGki; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxonhyperv.com Return-Path: Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id l127-20020a632585000000b0057763d820d7si4064309pgl.835.2023.09.15.18.25.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Sep 2023 18:25:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxonhyperv.com header.s=default header.b=mUYOEGki; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxonhyperv.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 496E183F5307; Fri, 15 Sep 2023 11:25:48 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236419AbjIOSZF (ORCPT + 99 others); Fri, 15 Sep 2023 14:25:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40808 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235441AbjIOSYp (ORCPT ); Fri, 15 Sep 2023 14:24:45 -0400 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id C11151FD7; Fri, 15 Sep 2023 11:24:39 -0700 (PDT) Received: by linux.microsoft.com (Postfix, from userid 1174) id 60255212BE7C; Fri, 15 Sep 2023 11:24:39 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 60255212BE7C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxonhyperv.com; s=default; t=1694802279; bh=TGsvvgWpwhxqiST3JXUN8KZ0za3/WKQ/h15qpNdLHjA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mUYOEGki4l0DI/ZaWsQJSQfr+HuJwxaixKsemOd0tT3KrY5Z52yLZbtxyrZshZQoZ pHCa6MCfbTbSJYuvCeKekobB8o0/RWBr72YuZI29G+yXYuLWOmL5eC+qkLzLWIhkek 4y/A2+SzHT8MgFApfAjMYGjym1aA4xiMFcqHacDM= From: sharmaajay@linuxonhyperv.com To: Long Li , Jason Gunthorpe , Leon Romanovsky , Dexuan Cui , Wei Liu , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: linux-rdma@vger.kernel.org, linux-hyperv@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Ajay Sharma Subject: [Patch v6 5/5] RDMA/mana_ib : Send event to qp Date: Fri, 15 Sep 2023 11:24:30 -0700 Message-Id: <1694802270-17452-6-git-send-email-sharmaajay@linuxonhyperv.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1694802270-17452-1-git-send-email-sharmaajay@linuxonhyperv.com> References: <1694802270-17452-1-git-send-email-sharmaajay@linuxonhyperv.com> X-Spam-Status: No, score=-9.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_PASS,SPF_PASS,USER_IN_DEF_SPF_WL autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Fri, 15 Sep 2023 11:25:48 -0700 (PDT) From: Ajay Sharma Send the QP fatal error event to only the context that created the qp. Signed-off-by: Ajay Sharma --- drivers/infiniband/hw/mana/device.c | 4 ++++ drivers/infiniband/hw/mana/main.c | 11 ++++++++--- drivers/infiniband/hw/mana/mana_ib.h | 18 +++++++++--------- drivers/infiniband/hw/mana/qp.c | 2 ++ 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/drivers/infiniband/hw/mana/device.c b/drivers/infiniband/hw/mana/device.c index e15da43c73a0..fcc8083e2783 100644 --- a/drivers/infiniband/hw/mana/device.c +++ b/drivers/infiniband/hw/mana/device.c @@ -101,6 +101,8 @@ static int mana_ib_probe(struct auxiliary_device *adev, if (ret) ibdev_dbg(&mib_dev->ib_dev, "Failed to get caps, use defaults"); + xa_init(&mib_dev->rq_to_qp_lookup_table); + ret = ib_register_device(&mib_dev->ib_dev, "mana_%d", mdev->gdma_context->dev); if (ret) @@ -112,6 +114,7 @@ static int mana_ib_probe(struct auxiliary_device *adev, destroy_adapter: mana_ib_destroy_adapter(mib_dev); + xa_destroy(&mib_dev->rq_to_qp_lookup_table); free_error_eq: mana_gd_destroy_queue(mib_dev->gc, mib_dev->fatal_err_eq); deregister_device: @@ -129,6 +132,7 @@ static void mana_ib_remove(struct auxiliary_device *adev) mana_ib_destroy_adapter(mib_dev); mana_gd_deregister_device(&mib_dev->gc->mana_ib); ib_unregister_device(&mib_dev->ib_dev); + xa_destroy(&mib_dev->rq_to_qp_lookup_table); ib_dealloc_device(&mib_dev->ib_dev); } diff --git a/drivers/infiniband/hw/mana/main.c b/drivers/infiniband/hw/mana/main.c index 82923475267d..29be8fd1ec7f 100644 --- a/drivers/infiniband/hw/mana/main.c +++ b/drivers/infiniband/hw/mana/main.c @@ -556,13 +556,18 @@ static void mana_ib_critical_event_handler(void *ctx, struct gdma_queue *queue, { struct mana_ib_dev *mib_dev = (struct mana_ib_dev *)ctx; struct ib_event mib_event; + struct mana_ib_qp *qp; + u64 rq_id; switch (event->type) { case GDMA_EQE_SOC_EVENT_NOTIFICATION: + rq_id = event->details[0] & 0xFFFFFF; + qp = xa_load(&mib_dev->rq_to_qp_lookup_table, rq_id); mib_event.event = IB_EVENT_QP_FATAL; mib_event.device = &mib_dev->ib_dev; - mib_event.element.qp = - (struct ib_qp*)(event->details[0] & 0xFFFFFF); - ib_dispatch_event(&mib_event); + if (qp && qp->ibqp.event_handler) + qp->ibqp.event_handler(&mib_event, qp->ibqp.qp_context); + else + ibdev_dbg(&mib_dev->ib_dev, "found no qp or event handler"); ibdev_dbg(&mib_dev->ib_dev, "Received critical notification"); break; default: diff --git a/drivers/infiniband/hw/mana/mana_ib.h b/drivers/infiniband/hw/mana/mana_ib.h index 6b9406738cb2..243572b52336 100644 --- a/drivers/infiniband/hw/mana/mana_ib.h +++ b/drivers/infiniband/hw/mana/mana_ib.h @@ -48,15 +48,6 @@ struct mana_ib_adapter_caps { u32 max_inline_data_size; }; -struct mana_ib_dev { - struct ib_device ib_dev; - struct gdma_dev *gdma_dev; - struct gdma_context *gc; - struct gdma_queue *fatal_err_eq; - mana_handle_t adapter_handle; - struct mana_ib_adapter_caps adapter_caps; -}; - struct mana_ib_wq { struct ib_wq ibwq; struct ib_umem *umem; @@ -113,6 +104,15 @@ struct mana_ib_ucontext { u32 doorbell; }; +struct mana_ib_dev { + struct ib_device ib_dev; + struct gdma_dev *gdma_dev; + struct gdma_context *gc; + struct gdma_queue *fatal_err_eq; + mana_handle_t adapter_handle; + struct mana_ib_adapter_caps adapter_caps; + struct xarray rq_to_qp_lookup_table; +}; struct mana_ib_rwq_ind_table { struct ib_rwq_ind_table ib_ind_table; }; diff --git a/drivers/infiniband/hw/mana/qp.c b/drivers/infiniband/hw/mana/qp.c index ef3275ac92a0..19fae28985c3 100644 --- a/drivers/infiniband/hw/mana/qp.c +++ b/drivers/infiniband/hw/mana/qp.c @@ -210,6 +210,8 @@ static int mana_ib_create_qp_rss(struct ib_qp *ibqp, struct ib_pd *pd, wq->id = wq_spec.queue_index; cq->id = cq_spec.queue_index; + xa_store(&mib_dev->rq_to_qp_lookup_table, wq->id, qp, GFP_KERNEL); + ibdev_dbg(&mib_dev->ib_dev, "ret %d rx_object 0x%llx wq id %llu cq id %llu\n", ret, wq->rx_object, wq->id, cq->id); -- 2.25.1