Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3693055pxv; Mon, 26 Jul 2021 09:31:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxswlGzcOyzlPzoT55AFj69IzyLopMkSYtEwIWEjglnOIX/xcagWU0r1sv/5+Kdilnyq73S X-Received: by 2002:a6b:d619:: with SMTP id w25mr15506507ioa.124.1627317115175; Mon, 26 Jul 2021 09:31:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627317115; cv=none; d=google.com; s=arc-20160816; b=nwp2ctRKtil2lqtcbMgmWscYkLllMw8yZ8O6IQz6X9bYo/jQGviWX/+J1KRvD+xjZ/ DdnItnP+HK+dCM/eBkyKeIqvl7YAfVH4DYSiAvMSdVjgSbZ8JxFDasULczX/la7GRXGv Fe17ME8Q/sRC3LrAviYtcy+5dQkkbCRHYzokpkWOTEzAlgYUC//5rnaHtyxi7s+PiPB1 kuKqlFsOhDwB3IKVEMfphrf7kR7odIahwNBOPk2BoHQxSLXUW9xq9nmFr6QfVO0QEbJL TFSW+TC2vHA1bv2z7yn6rb8O2EJy4hVePsILdZTj6R1UT2y+42V4ZmY5l2F/E8xiSEiF 9kxQ== 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=4eZxBw54M/riZPcC4BqxbeABL2JWWHsFqinhgDxzNjo=; b=wEuPaiujVSBi5mPQfsV9QbRMoX0KPjklyfBoVrBRtrAItIhhgYsUKT0Anjw8HFQT87 jeEZaRUMCHaRFoNVu6y3sl+aUXLy+SzK8WMKHzF+ehhHQB6mHXhvlPHBcxY2kIPeF4mi omj5mmyZND+VIfonfiyFA66KryXuT/H0Fsj2ew4eWesh3omlwdT25Vx31B6Mz85PnOay jRLsVKrt7qMQLHrd0TRmIJwkvjs7r2kprHpdOPPZ4wTY56uAvALAKMTleXRBCjsqVZsv JSvuF0JdC1xKzYwJOC0AK3VKnFMAgLKeT/9U9rD1MDSffRtxVxxkgcv+CUiiDini9RtZ lHAA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=JtlLY892; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f7si400867ioq.12.2021.07.26.09.31.43; Mon, 26 Jul 2021 09:31:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=JtlLY892; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.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: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238787AbhGZPti (ORCPT + 99 others); Mon, 26 Jul 2021 11:49:38 -0400 Received: from mail.kernel.org ([198.145.29.99]:45618 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229533AbhGZPaP (ORCPT ); Mon, 26 Jul 2021 11:30:15 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 0C54960F93; Mon, 26 Jul 2021 16:10:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1627315844; bh=rqdLP8v9JW5gP1K232CCcqSKiXV/Hhn8DC/DNiPw1AY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JtlLY892HiqWk/bDZpNj38LU+ks6x5FVbhN9g+BTqU3XV0CPnkyH56tWpc8aO0V7Z 4niTXN+3dfa93iBsx0l+NDDmqJuaWJ6EtC8oirClViusaEO/YDdWHl6h0p8a1Wct/V CIeR6swoxO5G+wu1dinZLUlkWxUcYTXTAPeKrykM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Roman Skakun , Andrii Anisov , Christoph Hellwig , Sasha Levin Subject: [PATCH 5.13 089/223] dma-mapping: handle vmalloc addresses in dma_common_{mmap,get_sgtable} Date: Mon, 26 Jul 2021 17:38:01 +0200 Message-Id: <20210726153849.164103359@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210726153846.245305071@linuxfoundation.org> References: <20210726153846.245305071@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Roman Skakun [ Upstream commit 40ac971eab89330d6153e7721e88acd2d98833f9 ] xen-swiotlb can use vmalloc backed addresses for dma coherent allocations and uses the common helpers. Properly handle them to unbreak Xen on ARM platforms. Fixes: 1b65c4e5a9af ("swiotlb-xen: use xen_alloc/free_coherent_pages") Signed-off-by: Roman Skakun Reviewed-by: Andrii Anisov [hch: split the patch, renamed the helpers] Signed-off-by: Christoph Hellwig Signed-off-by: Sasha Levin --- kernel/dma/ops_helpers.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/kernel/dma/ops_helpers.c b/kernel/dma/ops_helpers.c index 910ae69cae77..af4a6ef48ce0 100644 --- a/kernel/dma/ops_helpers.c +++ b/kernel/dma/ops_helpers.c @@ -5,6 +5,13 @@ */ #include +static struct page *dma_common_vaddr_to_page(void *cpu_addr) +{ + if (is_vmalloc_addr(cpu_addr)) + return vmalloc_to_page(cpu_addr); + return virt_to_page(cpu_addr); +} + /* * Create scatter-list for the already allocated DMA buffer. */ @@ -12,7 +19,7 @@ int dma_common_get_sgtable(struct device *dev, struct sg_table *sgt, void *cpu_addr, dma_addr_t dma_addr, size_t size, unsigned long attrs) { - struct page *page = virt_to_page(cpu_addr); + struct page *page = dma_common_vaddr_to_page(cpu_addr); int ret; ret = sg_alloc_table(sgt, 1, GFP_KERNEL); @@ -32,6 +39,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, unsigned long user_count = vma_pages(vma); unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT; unsigned long off = vma->vm_pgoff; + struct page *page = dma_common_vaddr_to_page(cpu_addr); int ret = -ENXIO; vma->vm_page_prot = dma_pgprot(dev, vma->vm_page_prot, attrs); @@ -43,7 +51,7 @@ int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, return -ENXIO; return remap_pfn_range(vma, vma->vm_start, - page_to_pfn(virt_to_page(cpu_addr)) + vma->vm_pgoff, + page_to_pfn(page) + vma->vm_pgoff, user_count << PAGE_SHIFT, vma->vm_page_prot); #else return -ENXIO; -- 2.30.2