Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp1643779pxb; Wed, 9 Feb 2022 01:00:39 -0800 (PST) X-Google-Smtp-Source: ABdhPJwlM7INhcekYGCDL8e+evMCJcp8hkfkExEXp/cufdI2vlA/AkDLMtGec2SIPULQrrXk4t3w X-Received: by 2002:a17:902:8548:: with SMTP id d8mr1213792plo.72.1644397239099; Wed, 09 Feb 2022 01:00:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644397239; cv=none; d=google.com; s=arc-20160816; b=vbLmvmQFwb5aOee+0LaTboTG4VDcNg+93fZpPv0Yk8ycZ/Ta8aXECnpGzrno4ClilD GuwpDjoi9c6e3Tg1l5bgkAxuO4OTjP6myU0pTMuJesBtrXhwTiJX/53JSTCTszr24CdV LPIoiimDhbbv54BMJXFEq6oxgyO6rlhYpHNc7shvGPlfvoYI5XBLSLlUhBVHJRO6mTst 10Sunu1JtxCW8WSWGNKD38nb8jxlZbJ7UIm9z6cNZ9RndkrnqZW2tZUanFQqqvlB8bkx w+c4LODMgxRxstNHA6uHX46pFhr+w6KW+QvFtAj0JyOWMD7Sfm+dZFsYfgeTrKc1ij2i nEMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=n9It9rI9aIo4zACaOaEqlv+uQg0zWL1/ExzrUhBtMJ8=; b=BvG4EspIwVEm3VcgZSr2Ljj1EKjzs/hQ0DVyW8Boy6cCnVB72T8Rk0W1V0eDKM7XQC VneTypCpCiU1g2fDXL0Zqyuc5msAfuI/Z5qAIyvy1Ogm33yMNamcakPwn7p2BQ5Xxdwj DR6kzeqQ/7ELW7OO/Oa8Fn8n6jRdevGc7car4i9fQVJXEBN4pw0knl5it7d8rUR1/cma RlyEJPFO4ZiEwIroaF7XT7a+/z9wArfkflgzc8PHr0x/BpA1kpAKs4oRncyFYBIuDffd gBMBLlXtm8vRDop7IZvFw22F52OsrSq4CWgXr/JwXwDqbeaVcPwiwqme16eQK70qPg7q AaVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="yF+0o6/o"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id v202si1061399pgb.654.2022.02.09.01.00.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Feb 2022 01:00:39 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="yF+0o6/o"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id E882DE010912; Wed, 9 Feb 2022 00:48:59 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1385970AbiBGLdN (ORCPT + 99 others); Mon, 7 Feb 2022 06:33:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34088 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1383182AbiBGLVp (ORCPT ); Mon, 7 Feb 2022 06:21:45 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5C265C0401C1; Mon, 7 Feb 2022 03:21:44 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 151A2B81158; Mon, 7 Feb 2022 11:21:43 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3387AC004E1; Mon, 7 Feb 2022 11:21:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1644232901; bh=lV1mkuh7zyPWVcvLXzJOB2GkO6mowb3cwC8cFqZQMqI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=yF+0o6/oN2IeWSxrCTEJsiia/acMt9tuxvzLjzXcnaFLW96vN0bgEZ6Ty4M/XTWJf x90e6417qBs3xMqucorr67FFLQmC3YerI09KGYlctQVO8x/UabY79Nc4NEa0vHnVA8 IWKsJ3UzMH/lmtA2NdRA3+DUmzegOcX6TkSXSfBU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jared Holzman , Bernard Metzler , Jason Gunthorpe Subject: [PATCH 5.10 28/74] RDMA/siw: Fix broken RDMA Read Fence/Resume logic. Date: Mon, 7 Feb 2022 12:06:26 +0100 Message-Id: <20220207103758.160620613@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220207103757.232676988@linuxfoundation.org> References: <20220207103757.232676988@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE 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 From: Bernard Metzler commit b43a76f423aa304037603fd6165c4a534d2c09a7 upstream. Code unconditionally resumed fenced SQ processing after next RDMA Read completion, even if other RDMA Read responses are still outstanding, or ORQ is full. Also adds comments for better readability of fence processing, and removes orq_get_tail() helper, which is not needed anymore. Fixes: 8b6a361b8c48 ("rdma/siw: receive path") Fixes: a531975279f3 ("rdma/siw: main include file") Link: https://lore.kernel.org/r/20220130170815.1940-1-bmt@zurich.ibm.com Reported-by: Jared Holzman Signed-off-by: Bernard Metzler Signed-off-by: Jason Gunthorpe Signed-off-by: Greg Kroah-Hartman --- drivers/infiniband/sw/siw/siw.h | 7 +------ drivers/infiniband/sw/siw/siw_qp_rx.c | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 15 deletions(-) --- a/drivers/infiniband/sw/siw/siw.h +++ b/drivers/infiniband/sw/siw/siw.h @@ -644,14 +644,9 @@ static inline struct siw_sqe *orq_get_cu return &qp->orq[qp->orq_get % qp->attrs.orq_size]; } -static inline struct siw_sqe *orq_get_tail(struct siw_qp *qp) -{ - return &qp->orq[qp->orq_put % qp->attrs.orq_size]; -} - static inline struct siw_sqe *orq_get_free(struct siw_qp *qp) { - struct siw_sqe *orq_e = orq_get_tail(qp); + struct siw_sqe *orq_e = &qp->orq[qp->orq_put % qp->attrs.orq_size]; if (READ_ONCE(orq_e->flags) == 0) return orq_e; --- a/drivers/infiniband/sw/siw/siw_qp_rx.c +++ b/drivers/infiniband/sw/siw/siw_qp_rx.c @@ -1153,11 +1153,12 @@ static int siw_check_tx_fence(struct siw spin_lock_irqsave(&qp->orq_lock, flags); - rreq = orq_get_current(qp); - /* free current orq entry */ + rreq = orq_get_current(qp); WRITE_ONCE(rreq->flags, 0); + qp->orq_get++; + if (qp->tx_ctx.orq_fence) { if (unlikely(tx_waiting->wr_status != SIW_WR_QUEUED)) { pr_warn("siw: [QP %u]: fence resume: bad status %d\n", @@ -1165,10 +1166,12 @@ static int siw_check_tx_fence(struct siw rv = -EPROTO; goto out; } - /* resume SQ processing */ + /* resume SQ processing, if possible */ if (tx_waiting->sqe.opcode == SIW_OP_READ || tx_waiting->sqe.opcode == SIW_OP_READ_LOCAL_INV) { - rreq = orq_get_tail(qp); + + /* SQ processing was stopped because of a full ORQ */ + rreq = orq_get_free(qp); if (unlikely(!rreq)) { pr_warn("siw: [QP %u]: no ORQE\n", qp_id(qp)); rv = -EPROTO; @@ -1181,15 +1184,14 @@ static int siw_check_tx_fence(struct siw resume_tx = 1; } else if (siw_orq_empty(qp)) { + /* + * SQ processing was stopped by fenced work request. + * Resume since all previous Read's are now completed. + */ qp->tx_ctx.orq_fence = 0; resume_tx = 1; - } else { - pr_warn("siw: [QP %u]: fence resume: orq idx: %d:%d\n", - qp_id(qp), qp->orq_get, qp->orq_put); - rv = -EPROTO; } } - qp->orq_get++; out: spin_unlock_irqrestore(&qp->orq_lock, flags);