Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1169284yba; Thu, 9 May 2019 11:54:29 -0700 (PDT) X-Google-Smtp-Source: APXvYqxDKcgQ0/Rni6cgFXSQDWNS2gajicgXEfg9OBHeh97iXN3lnKgAw6UNuS6Da4XCGBkmK6Yj X-Received: by 2002:a62:528b:: with SMTP id g133mr7647567pfb.246.1557428069123; Thu, 09 May 2019 11:54:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557428069; cv=none; d=google.com; s=arc-20160816; b=flZ5QvzLAufQxOKn+sKNN+J474Rl8ME8VuENhvM+b/DczPQxEMpKq9YBPvmAybjtoc AtQSL/ohop8Ix1INAxLsRlf+7kPq8S+yPXRmbGGU09rAvwhNr+x40g4T/f6HKaQR7Ws1 rfAnEdo2wL/Nyg11Imv8J39G8p3Zp/x4Z+vVv7LAgWLW8g5KPgOuCJlE9fOaXIN3QRpe 0xywStsFGfEqlrJHGiVBMalCw2J7GXFH0MbxqXCe/gfImLU8sJcL5LH/zD935zxvTeLh l92xrj4+haBe5pmZwdTJ0B5gcwlYmH5lRzlkXdJ7/0xyxc2gGZLjOvzmljjjh4n/O0F7 pjxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=8hJ0icl1riEHIs/4ISkCxtOVinVgoKWmMIPnrswmf0c=; b=qB+0+LjV6HakhhDzzpPQ5N2pY22mjl3jgCvnS3fVhS2OOt+hB/tUKS7z4s2viWN6T/ 5TBfV2KVwZzYSQo/jpcdPVtOL9kiVYWfmHtAbxqo6OWuHpwx+1p520S3HS/kKVk9uLir efGWRNYIxjjLzLE5XgE1WNs+V/UTGvO8x393yFatM2DPFKF3j5+hMCq6tw0GWauqmpAU VKcHXww15G3QK1uS7HizlKxCCWCQFmDZQjn5nCV3kvWiV0TEqyi0d+Dkufw8X3xakyMK Dv8e+G3PfUs4dIXsHlnXWU4ZfVekYibiGSe4kXvlKKTRh4lNtPPIYX8Oz3HoQDY9VAMN RB0A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=OUp4VAxU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i18si4147457pfd.64.2019.05.09.11.54.13; Thu, 09 May 2019 11:54:29 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=OUp4VAxU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728640AbfEISwB (ORCPT + 99 others); Thu, 9 May 2019 14:52:01 -0400 Received: from mail.kernel.org ([198.145.29.99]:45862 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728407AbfEISv6 (ORCPT ); Thu, 9 May 2019 14:51:58 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 69E3F217F5; Thu, 9 May 2019 18:51:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1557427917; bh=EIj2AvKW7YazLOBX54kvYtEyz4pLnRNVIg9bEqWJRXY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OUp4VAxUiDJKT6IpFi0dVaQXYrJcDTg0TaE8HIZsJ4MiT5joNBRsuqgpvajAi8CY0 m8lGmt9ixxwNeXa9MlA/+1aWYh7z8W6J4ygIPM1IQPClLKZ2E01iZX0jd4uPQc1Lac E1YrelWrtcexAgOBZus0xyRdpHVlfYfVl0NPM22c= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, chenglang , Lijun Ou , Jason Gunthorpe , Sasha Levin Subject: [PATCH 5.0 52/95] RDMA/hns: Fix bug that caused srq creation to fail Date: Thu, 9 May 2019 20:42:09 +0200 Message-Id: <20190509181313.138801659@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190509181309.180685671@linuxfoundation.org> References: <20190509181309.180685671@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [ Upstream commit 4772e03d239484f3461e33c79d721c8ea03f7416 ] Due to the incorrect use of the seg and obj information, the position of the mtt is calculated incorrectly, and the free space of the page is not enough to store the entire mtt, resulting in access to the next page. This patch fixes this problem. Unable to handle kernel paging request at virtual address ffff00006e3cd000 ... Call trace: hns_roce_write_mtt+0x154/0x2f0 [hns_roce] hns_roce_buf_write_mtt+0xa8/0xd8 [hns_roce] hns_roce_create_srq+0x74c/0x808 [hns_roce] ib_create_srq+0x28/0xc8 Fixes: 0203b14c4f32 ("RDMA/hns: Unify the calculation for hem index in hip08") Signed-off-by: chenglang Signed-off-by: Lijun Ou Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/hw/hns/hns_roce_hem.c | 6 ++++-- drivers/infiniband/hw/hns/hns_roce_mr.c | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/infiniband/hw/hns/hns_roce_hem.c b/drivers/infiniband/hw/hns/hns_roce_hem.c index 4cdbcafa59155..cae23364cfea9 100644 --- a/drivers/infiniband/hw/hns/hns_roce_hem.c +++ b/drivers/infiniband/hw/hns/hns_roce_hem.c @@ -763,6 +763,8 @@ void *hns_roce_table_find(struct hns_roce_dev *hr_dev, idx_offset = (obj & (table->num_obj - 1)) % obj_per_chunk; dma_offset = offset = idx_offset * table->obj_size; } else { + u32 seg_size = 64; /* 8 bytes per BA and 8 BA per segment */ + hns_roce_calc_hem_mhop(hr_dev, table, &mhop_obj, &mhop); /* mtt mhop */ i = mhop.l0_idx; @@ -774,8 +776,8 @@ void *hns_roce_table_find(struct hns_roce_dev *hr_dev, hem_idx = i; hem = table->hem[hem_idx]; - dma_offset = offset = (obj & (table->num_obj - 1)) * - table->obj_size % mhop.bt_chunk_size; + dma_offset = offset = (obj & (table->num_obj - 1)) * seg_size % + mhop.bt_chunk_size; if (mhop.hop_num == 2) dma_offset = offset = 0; } diff --git a/drivers/infiniband/hw/hns/hns_roce_mr.c b/drivers/infiniband/hw/hns/hns_roce_mr.c index ee5991bd4171c..dd4bb0ec6113b 100644 --- a/drivers/infiniband/hw/hns/hns_roce_mr.c +++ b/drivers/infiniband/hw/hns/hns_roce_mr.c @@ -746,7 +746,6 @@ static int hns_roce_write_mtt_chunk(struct hns_roce_dev *hr_dev, struct hns_roce_hem_table *table; dma_addr_t dma_handle; __le64 *mtts; - u32 s = start_index * sizeof(u64); u32 bt_page_size; u32 i; @@ -780,7 +779,8 @@ static int hns_roce_write_mtt_chunk(struct hns_roce_dev *hr_dev, return -EINVAL; mtts = hns_roce_table_find(hr_dev, table, - mtt->first_seg + s / hr_dev->caps.mtt_entry_sz, + mtt->first_seg + + start_index / HNS_ROCE_MTT_ENTRY_PER_SEG, &dma_handle); if (!mtts) return -ENOMEM; -- 2.20.1