From patchwork Wed Nov 13 07:17:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wangyu (Eric)" X-Patchwork-Id: 62937 X-Patchwork-Delegate: david.marchand@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 33330A0353; Wed, 13 Nov 2019 08:17:46 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9B4531BE0C; Wed, 13 Nov 2019 08:17:45 +0100 (CET) Received: from huawei.com (szxga01-in.huawei.com [45.249.212.187]) by dpdk.org (Postfix) with ESMTP id 982085B3A for ; Wed, 13 Nov 2019 08:17:43 +0100 (CET) Received: from DGGEMM403-HUB.china.huawei.com (unknown [172.30.72.54]) by Forcepoint Email with ESMTP id E0D88106CA5162D3BDDD for ; Wed, 13 Nov 2019 15:17:41 +0800 (CST) Received: from DGGEMM533-MBX.china.huawei.com ([169.254.5.114]) by DGGEMM403-HUB.china.huawei.com ([10.3.20.211]) with mapi id 14.03.0439.000; Wed, 13 Nov 2019 15:17:31 +0800 From: "Wangyu (Eric)" To: "dev@dpdk.org" CC: "ferruh.yigit@intel.com" , Linuxarm , "humin (Q)" , "Liyuan (Larry)" , dengxiaofeng Thread-Topic: [PATCH v4] bus/pci: align next mapping address on page boundary Thread-Index: AQHVmfHPELXTu93ugECv2gIaQPSCXqeIsGLQ Date: Wed, 13 Nov 2019 07:17:30 +0000 Message-ID: <78A93308629D474AA53B84C5879E84D24B10A29B@DGGEMM533-MBX.china.huawei.com> References: <1573628749-5572-1-git-send-email-dengxiaofeng@huawei.com> In-Reply-To: <1573628749-5572-1-git-send-email-dengxiaofeng@huawei.com> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.57.112.122] MIME-Version: 1.0 X-CFilter-Loop: Reflected Subject: [dpdk-dev] [PATCH v4] bus/pci: align next mapping address on page boundary X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Currently, the next address picked by PCI mapping infrastructure may be page-unaligned due to BAR length being smaller than page size. This leads to a situation where the requested map address is invalid, resulting in mmap() call returning an arbitrary address, which will later interfere with device BAR mapping in secondary processes. Fix it by always aligning the next requested address on page boundary. Signed-off-by: Xiaofeng Deng Signed-off-by: Wangyu (Eric) Acked-by: Wei Hu Acked-by: Min Hu Acked-by: Anatoly Burakov Acked-by: Gavin Hu (Arm Technology China) Fixes: c752998b5e2e ("pci: introduce library and driver") Cc: stable@dpdk.org --- drivers/bus/pci/linux/pci_uio.c | 2 ++ drivers/bus/pci/linux/pci_vfio.c | 3 +++ 2 files changed, 5 insertions(+) -- 1.8.3.1 diff --git a/drivers/bus/pci/linux/pci_uio.c b/drivers/bus/pci/linux/pci_uio.c index 6dca05a..097dc19 100644 --- a/drivers/bus/pci/linux/pci_uio.c +++ b/drivers/bus/pci/linux/pci_uio.c @@ -351,6 +351,8 @@ pci_map_addr = RTE_PTR_ADD(mapaddr, (size_t)dev->mem_resource[res_idx].len); + pci_map_addr = RTE_PTR_ALIGN(pci_map_addr, sysconf(_SC_PAGE_SIZE)); + maps[map_idx].phaddr = dev->mem_resource[res_idx].phys_addr; maps[map_idx].size = dev->mem_resource[res_idx].len; maps[map_idx].addr = mapaddr; diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c index b8faa23..64cd84a 100644 --- a/drivers/bus/pci/linux/pci_vfio.c +++ b/drivers/bus/pci/linux/pci_vfio.c @@ -750,6 +750,9 @@ bar_addr = pci_map_addr; pci_map_addr = RTE_PTR_ADD(bar_addr, (size_t) reg->size); + pci_map_addr = RTE_PTR_ALIGN(pci_map_addr, + sysconf(_SC_PAGE_SIZE)); + maps[i].addr = bar_addr; maps[i].offset = reg->offset; maps[i].size = reg->size;