From patchwork Tue May 15 12:13:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kalderon, Michal" X-Patchwork-Id: 10400867 X-Patchwork-Delegate: jgg@ziepe.ca Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 17B05601F9 for ; Tue, 15 May 2018 12:14:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 012C42836F for ; Tue, 15 May 2018 12:14:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E8C23287AA; Tue, 15 May 2018 12:14:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B07FF28649 for ; Tue, 15 May 2018 12:14:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753175AbeEOMOD (ORCPT ); Tue, 15 May 2018 08:14:03 -0400 Received: from mail-by2nam01on0070.outbound.protection.outlook.com ([104.47.34.70]:5198 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753174AbeEOMNz (ORCPT ); Tue, 15 May 2018 08:13:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=zDp7sAQBN8TOZJmPTO8sLBgOUR6sLez9q3Qi4smDKwY=; b=WrwOMafQ/p2jMy9u67QrIsLgbEr/x0M2rxhsNzn+n1Ujjhmgm/5QLsxVeOdIyq6gvG5xEci06M7wtcrGcv1mQsqAdbp5DLeO3kPw3Itep8keM7Yi24f2pHydURrUrgv/vy9BuUT53o87cGao4CAEhr+o+HRCb9gDRUDPNwVvAX4= Received: from SN1PR0701CA0012.namprd07.prod.outlook.com (2a01:111:e400:5173::22) by BN3PR0701MB1218.namprd07.prod.outlook.com (2a01:111:e400:4012::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.755.16; Tue, 15 May 2018 12:13:53 +0000 Received: from BN1AFFO11FD028.protection.gbl (2a01:111:f400:7c10::164) by SN1PR0701CA0012.outlook.office365.com (2a01:111:e400:5173::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.755.16 via Frontend Transport; Tue, 15 May 2018 12:13:53 +0000 Authentication-Results: spf=pass (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=bestguesspass action=none header.from=cavium.com; Received-SPF: Pass (protection.outlook.com: domain of cavium.com designates 50.232.66.26 as permitted sender) receiver=protection.outlook.com; client-ip=50.232.66.26; helo=CAEXCH02.caveonetworks.com; Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BN1AFFO11FD028.mail.protection.outlook.com (10.58.52.88) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.735.16 via Frontend Transport; Tue, 15 May 2018 12:13:52 +0000 Received: from lb-tlvb-michal.il.qlogic.com.com (10.185.6.89) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Tue, 15 May 2018 05:13:51 -0700 From: Michal Kalderon To: , , , CC: , , Michal Kalderon , Ariel Elior Subject: [PATCH for-rc v2] RDMA/qedr: Fix doorbell bar mapping for dpi > 1 Date: Tue, 15 May 2018 15:13:33 +0300 Message-ID: <20180515121333.8949-1-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 2.14.3 MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(346002)(39850400004)(396003)(376002)(39380400002)(2980300002)(438002)(199004)(189003)(336012)(2201001)(50226002)(81166006)(81156014)(50466002)(8676002)(36756003)(54906003)(16586007)(8936002)(51416003)(69596002)(316002)(48376002)(110136005)(305945005)(86362001)(106002)(59450400001)(486006)(2906002)(126002)(106466001)(2616005)(476003)(5660300001)(72206003)(4326008)(478600001)(107886003)(26005)(104016004)(1076002)(77096007)(186003)(6666003)(356003)(47776003); DIR:OUT; SFP:1101; SCL:1; SRVR:BN3PR0701MB1218; H:CAEXCH02.caveonetworks.com; FPR:; SPF:Pass; LANG:en; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD028; 1:z0FUaScdu05wMiUkFXqyqw/GEx8gizTa1eFtXhr2yMcbGuRXOFDF2GFlEsL/ubdQLrbOIY0yUwHFXhiecJ2Ln1pQBDtzeQ3Xitdr/QmhgnjFybFhi90UoRU70heX+qMO X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(4608076)(2017052603328)(7153060); SRVR:BN3PR0701MB1218; X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1218; 3:PC+tJODlESNTq5Q6KjyTSRjfqY6XWsotXuEAUf0o3186lssTUdqmaiwR1oQ8LPMO4AKM4nwI6DxCjC/uaBq6zAHUlM03zonXRPda+2xHxuT3t4xgsbxJ7h9ctrJhs823indCFGpXTaU/o9alF7kK0ZwYu9OobQpPjnBw/X3If8ais/hT9I2N4/BQr09DsE5q/clALPSfb2P3T8bPhy+ytqn9k/LIXeqjXeG0UTRsXT2EqaValFE2T7Yy1MixMTkO693H8/uGUEwNxPi8RtiJ33CYrFJTcRSvcQ+Xt9vIVUVd2V7g6yDZfMFM1+S00JjBia8Fn4kiiXcWz8ILdnz8EW/59hSUXykoQQgk6s6G5kI=; 25:xdTl8Dq9b5V/tx8POXVn4N58Ug4+eIZ3I41vj9aycVHnGzhsWZ5vBCjIfA27d3wt6lekjtxFB/zbcQekckDg28ZSSKPaFxV9r+DiQtZ2E+I46rW+4ZF7qTHwVwXYeSPjKPorkYKAvr5CafsTRAVktBaofP9qGR9Pj3cZw4qg28ipDR4YjbDhR5aMx9WCciXYOUphBLmTeztUMefEuDNM3RE7ihh55jTq/HrBAR/d753ZX+Nx9/xtcaBETX982G+mmjnXo+4iUtsaoNzPSDi7tKqkSyZ1VKdBlteG5IiERaMYFshmTuJpazv+MDpBde577SvuoV8+e9yzMch6CB8bJSxn0rgsDcXuMjKNmUqKm/o= X-MS-TrafficTypeDiagnostic: BN3PR0701MB1218: X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1218; 31:70HQdRFinehkDs6BGb8yiR6YqWm/2C46nasblGp7WPAICq2AKQz/aaHb/wlTjuGAUHFFurQu2IwlbM/iyZSL3QbKKBmXMaAKQpPyNeOlOdZXjoM967I92HbqAXfdU/QlSOriHbXH2G/W+AYLvzCEzxn5sHoDRfCa2itrSHyXGNo07vL+imEC9ZqHzcahI7i0Psn5XpVmo50GeQAC1GSRadbRvJdTy5ZYEjnau4FiLBY=; 20:CfnEPWvKRrnu5KnvUC3gExz5TLrmOxArnw1R94mSKUYaeBCniNKOXpn8bJvNgn7Oc7ksTx7ruAFtlK9/GvEa+OUDRTlnb5gQb1D4vXukRP3Ps39/F0nwi0rbzbGKuq6ra35ndVQ8zLsWkpRH5CE/lhHvfn1iSMuQv4DWTSX1mHkh12Eg7yISlXsRd1ICrWsqHzqqXyx6bowh1KE+9g3pUKG9d0OsKpFyKfqRiMuEjamOltI26WlOm1uGQ2B54c/Yc/Va2XbQ6qDvU1mhYZUGESJ/oxp1IUm8r3gG8zGEW6h11D1yc09lDfhpUDblcRzPxfpQ/3mw+wFi/VVNd+ve+7v0RuoYBGDeKI9Rpiyg60CDyDxstBbobDjF0zf5m8ocZX+djKsn2fPM/P+doodp/qEdDhQno2AEHsTIbfTdScHaa5MKHFUtYERW07RfdXJCUd3j4+i5Az8e1ErBHtvFVMV9GDBd5Pa1YyG6BEs47HY1DOlIimjfPXuB9vUbGoWl X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(278428928389397); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231254)(944501410)(52105095)(93006095)(93004095)(3002001)(10201501046)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(6072148)(201708071742011); SRVR:BN3PR0701MB1218; BCL:0; PCL:0; RULEID:; SRVR:BN3PR0701MB1218; X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1218; 4:Sdd9uA1obPmhDs4jktt7r9ZOduaRS0srM/1qtaUxkZZITs96Pvj88ZZEbjWcMyf3GhvBEPZmnrr93ZCLDtlGnM6jUuQmvxwqAvroonbhbs5KEQfVewQRFiR22c/pzst9CvTKxwON++TXFDeZxBjs+zNbeTccWR+uYpiL3QTQaAiEGPhCauUtsShvvyRw0Ejac/cyhJWMmo4blivv027QM1XjAF0AdsolXTtSZD0nh+e4DmAdXUJkM4LFuxHklZseI4rYBriscOivbM2+SZD84ZF/ilTGUVt3i+MLaEmTc9wt27Eq79VMtYF4q77vAufQ X-Forefront-PRVS: 0673F5BE31 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0701MB1218; 23:bExUHdt2b5KWx5ADunoG09eilj6UJwtuicddUx/?= =?us-ascii?Q?VPpCipNVYq2cTSTUrO1Z2N3Wi9BlYTY/+tjKx9p66f2JzEf8an6TTDYqu44b?= =?us-ascii?Q?idvZAKnj8XgzXTOInfLmbPL9xdHrHhuOWFu05TEJG+T0EA+ypZrvMHFtyA0o?= =?us-ascii?Q?qpvxj8rSIgvL0OdSxV3DMz1T89AaFqQeTz+rsPdYr1skE0qIUi7Nj8fafRzz?= =?us-ascii?Q?Pqf4ySO7G9O1Htq1d74Bu8Px2VYin8qrpvEdfrXgAIJPrH5u4fsKzDkiFgwn?= =?us-ascii?Q?YD1r7Oak53LFoWgPc66XD3NCYjU21CUkrJeh+zLjYNHvB9OkQ6yQuFMZOH7f?= =?us-ascii?Q?SQTyYeHMZr5h+HnKtRrvCyTIQ4Jo4jAxYGBIjWnBag98Ez96as+MGm4guL09?= =?us-ascii?Q?ZDQDUZOsH1ymEIR7RJofF49FRTYj+P5CZa4waavQ9zQTNXRQe1+AnCwHd43c?= =?us-ascii?Q?dYXcG3SF82AWoAxxj4j8dPvICswn8jyklAqxDlpQBW8in+7qPcdQ0RA9dXTP?= =?us-ascii?Q?4f3xe33eV8mxYGJXXPDRIiA+ywGWVLl4yGFt3FXFSlT9pV5m9v8aSihGvADK?= =?us-ascii?Q?kVB+ZV4l3/RltquXuqxs2fH1qW4puFxz3KAKGi/2hFTsBty5NWSCxhufjL/H?= =?us-ascii?Q?aUhvnZIqUsDLBvWdfh1fHQmZGTqXUZZL5OUE4z5QAjfbVYirFz74h7MKnPXD?= =?us-ascii?Q?ebt5wzyG+8ya7aHAPAnP4F/9OYvwVE7v9F/VXrY733QhJjf33bPfV60lf077?= =?us-ascii?Q?QHBwNZRtog555nwfM/Vglk1id+1ramm1+IodRRc8qdtk6sUcw1MvxNppynu9?= =?us-ascii?Q?GISmy3KSjK/cVUNWO8JD68T2dLUdsvT+FJaaXgrh2FYWZEXhdx5jOoH4V1uT?= =?us-ascii?Q?chaGx/yevbK+P1aotM8u3E8z9jT7GzkimCRqDydwu3Ex2gBOAf0C6fDrJI1m?= =?us-ascii?Q?S8w6UMCbcwWcxHY/lbI7Imao0pwSP9RYOTndp8DoaDhu1bLwL/2PFbJY7SYa?= =?us-ascii?Q?PwWpBo0eXcSjxs/PUTStS2cOioZzbdHyMBHZ/68FxRaAtYA5BadjWfKMR1EJ?= =?us-ascii?Q?z+toF7mnrAau7/Y0vLmdiHG2I5JPaEdPpFaTYU5OM1R6IYZTYxw=3D=3D?= X-Microsoft-Antispam-Message-Info: MQXi93I8mO7wiXBDXdF9g0tRPmfBIv4VbKkKY/51w76tOhgCdcy1pkUzvwpAhcn0biYQbvqfqW8kJm0+yYyfaCh4dTbn3DhuYubJO1aGIdGw50sJqpnEVNZiUVJ75fvnlwNywOuNL79x3QTrltFPZAUM/kHp3tTJMv137TCEn3uK1hvzo9pgwUKOdEr+mtsA X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1218; 6:kD9FLd0vIEw4umI18C3/7eYj0NGrWDz/9jhBzIA4t8V21K+3d8p8CYGS/s2cNC/AAdP4sEwZTyghiuJ/LeXYiWdrM9eKtG6PuJnZv4sn2CSrepy5Akm0MKcmbBQQvZGfawnQ5qCT9YpDT0I7UYRVJNupxHbsKWAaAF9FOwA2QZ6GbYzwADp9oPTsEqGqBRLjN1hMS+Cq/mVDEfSP6Kznj1iiBzg2W695m87l6aHGrDCbgA0FTQWTv1TsW7E9K54lovEyHSt+H3kX31RPC1RoNdwu/N3rSKTrgtcJc79RnAsIQ5B0wRUYEtgbijS/93jMXSvJwOsZwnu4uXO80Q8WGikc3+8DJQWSkKraYdy7BUr6jF0Y5LB7fPzZ7uFZVoz/Hyuj5sXmrOGIl/d79YYIiZAjnDn8RgPXI9bqkDg8Aqlh3/Dx5/RRQyJy6JrXEwcLFQh/lQbGQgl/vsqADQrS+Q==; 5:VUNwX7/wfIdrJiwyt7i06VxONZmxuKaac9bjRKlPZxyrVdK/pTksBcX0YLuGP0hbEIQko6ENCrt/ALf1BwRtO8ZrJTNOWwpNuzRDlHP6MdCVIdn8g52k1jRO3xdGlZglEihuABGzQ8Pgy6w1DB+trG2/ts1JLpXAlStjtdWjKw8=; 24:raBVg80gJuveRiSY57Qwzckzwh8lXgICeaMCBFq0ZaRRPaUMeRxezEnG37/nSQretaBYKxJz2k2nq8hoMeVQRUp5ZhCJrQ9j+3B2OiWLKtM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1218; 7:MkJlUBeOn0nmqt7HAd9mRXB3sePmCNAUJzbVxpI/H96bL4I+TkEKlpZzhzoFnVy4tVaE4Ns6HusX2dMaG9g9xJj2lSaoL8fBVQRagZkWW6alA2T2Qo7B9os23roqX3nhyCyrT62RG3b+V1tnth75Ki7MYehwwJianlnhFh94+bAWOn3qMSkXwshJtmyTRUYt03yMLXa0VQKC/DF/6yf4Gd3Ym47aeKZKpD04Ltmbs/5ibd7rlaKBsu+yQbynzeZT X-MS-Office365-Filtering-Correlation-Id: 9b3fbbbb-d2e2-4bb0-1f63-08d5ba5d5331 X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 May 2018 12:13:52.9970 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9b3fbbbb-d2e2-4bb0-1f63-08d5ba5d5331 X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR0701MB1218 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Each user_context receives a separate dpi value and thus a different address on the doorbell bar. The qedr_mmap function needs to validate the address and map the doorbell bar accordingly. The current implementation always checked against dpi=0 doorbell range leading to a wrong mapping for doorbell bar. (It entered an else case that mapped the address differently). qedr_mmap should only be used for doorbells, so the else was actually wrong in the first place. This only has an affect on arm architecture and not an issue on a x86 based architecture. This lead to doorbells not occurring on arm based systems and left applications that use more than one dpi (or several applications run simultaneously ) to hang. Fixes: ac1b36e55a51 ("qedr: Add support for user context verbs") Signed-off-by: Ariel Elior Signed-off-by: Michal Kalderon Reviewed-by: Leon Romanovsky --- V2 Use %pK to avoid leaking kernel pointers. --- drivers/infiniband/hw/qedr/verbs.c | 60 ++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c index 7d3763b..3f9afc0 100644 --- a/drivers/infiniband/hw/qedr/verbs.c +++ b/drivers/infiniband/hw/qedr/verbs.c @@ -401,49 +401,47 @@ int qedr_mmap(struct ib_ucontext *context, struct vm_area_struct *vma) { struct qedr_ucontext *ucontext = get_qedr_ucontext(context); struct qedr_dev *dev = get_qedr_dev(context->device); - unsigned long vm_page = vma->vm_pgoff << PAGE_SHIFT; - u64 unmapped_db = dev->db_phys_addr; + unsigned long phys_addr = vma->vm_pgoff << PAGE_SHIFT; unsigned long len = (vma->vm_end - vma->vm_start); - int rc = 0; - bool found; + unsigned long dpi_start; + + dpi_start = dev->db_phys_addr + (ucontext->dpi * ucontext->dpi_size); DP_DEBUG(dev, QEDR_MSG_INIT, - "qedr_mmap called vm_page=0x%lx vm_pgoff=0x%lx unmapped_db=0x%llx db_size=%x, len=%lx\n", - vm_page, vma->vm_pgoff, unmapped_db, dev->db_size, len); - if (vma->vm_start & (PAGE_SIZE - 1)) { - DP_ERR(dev, "Vma_start not page aligned = %ld\n", - vma->vm_start); + "mmap invoked with vm_start=0x%pK, vm_end=0x%pK,vm_pgoff=0x%pK; dpi_start=0x%pK dpi_size=0x%x\n", + (void *)vma->vm_start, (void *)vma->vm_end, + (void *)vma->vm_pgoff, (void *)dpi_start, ucontext->dpi_size); + + if ((vma->vm_start & (PAGE_SIZE - 1)) || (len & (PAGE_SIZE - 1))) { + DP_ERR(dev, + "failed mmap, adrresses must be page aligned: start=0x%pK, end=0x%pK\n", + (void *)vma->vm_start, (void *)vma->vm_end); return -EINVAL; } - found = qedr_search_mmap(ucontext, vm_page, len); - if (!found) { - DP_ERR(dev, "Vma_pgoff not found in mapped array = %ld\n", + if (!qedr_search_mmap(ucontext, phys_addr, len)) { + DP_ERR(dev, "failed mmap, vm_pgoff=0x%lx is not authorized\n", vma->vm_pgoff); return -EINVAL; } - DP_DEBUG(dev, QEDR_MSG_INIT, "Mapping doorbell bar\n"); - - if ((vm_page >= unmapped_db) && (vm_page <= (unmapped_db + - dev->db_size))) { - DP_DEBUG(dev, QEDR_MSG_INIT, "Mapping doorbell bar\n"); - if (vma->vm_flags & VM_READ) { - DP_ERR(dev, "Trying to map doorbell bar for read\n"); - return -EPERM; - } - - vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); + if (phys_addr < dpi_start || + ((phys_addr + len) > (dpi_start + ucontext->dpi_size))) { + DP_ERR(dev, + "failed mmap, pages are outside of dpi; page address=0x%pK, dpi_start=0x%pK, dpi_size=0x%x\n", + (void *)phys_addr, (void *)dpi_start, + ucontext->dpi_size); + return -EINVAL; + } - rc = io_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, - PAGE_SIZE, vma->vm_page_prot); - } else { - DP_DEBUG(dev, QEDR_MSG_INIT, "Mapping chains\n"); - rc = remap_pfn_range(vma, vma->vm_start, - vma->vm_pgoff, len, vma->vm_page_prot); + if (vma->vm_flags & VM_READ) { + DP_ERR(dev, "failed mmap, cannot map doorbell bar for read\n"); + return -EINVAL; } - DP_DEBUG(dev, QEDR_MSG_INIT, "qedr_mmap return code: %d\n", rc); - return rc; + + vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); + return io_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, len, + vma->vm_page_prot); } struct ib_pd *qedr_alloc_pd(struct ib_device *ibdev,