From patchwork Fri Oct 24 16:28:06 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lorenzo Pieralisi X-Patchwork-Id: 39486 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-ee0-f71.google.com (mail-ee0-f71.google.com [74.125.83.71]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 39C1D20341 for ; Fri, 24 Oct 2014 16:28:48 +0000 (UTC) Received: by mail-ee0-f71.google.com with SMTP id e51sf373115eek.10 for ; Fri, 24 Oct 2014 09:28:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:delivered-to:from:to:cc:subject :date:message-id:in-reply-to:references:sender:precedence:list-id :x-original-sender:x-original-authentication-results:mailing-list :list-post:list-help:list-archive:list-unsubscribe; bh=p9RKM9Wee424pl++jeyKxaEl7VL3wun15awWRUI+XOk=; b=PDCc2AIMxZoCkbKKie1eUkoUPQI4F8itJNERdyM4Z965PeG7GVAJ8WPHVnlFloyML1 rDmM1xRGDZ20lTcJeqWMFv6z+2juQsjNrYJio8R4MJKa5wN1EO92q0rWkUmFamue4oro 1Mz9p/44jT166OT/s5YwgiTQ11u1LGd8ahZXYeLyV32T4adwrXKCEwN/aT0QKcC9+7Up cM5xn6RLTNbtAH+quCC/jtFFsJQs4oMZZwRcooORaNt8Vr5vXfRGvfgX6b5InJQVxVIy hvvDVnaCTW2Wh8z0YaVggiuT3j9szJ9tkKifbcWZNb50dsN3ks2ytU6s0Eq+CqlC/pN9 y8Ug== X-Gm-Message-State: ALoCoQmedZCT+5s+UrlqsduT15/XMIxD3Q/NyPXQEjKC9fqXo3Gr4G/B/64f/I804l/veRgsMgwh X-Received: by 10.112.166.2 with SMTP id zc2mr24497lbb.24.1414168127243; Fri, 24 Oct 2014 09:28:47 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.23.227 with SMTP id p3ls488278laf.39.gmail; Fri, 24 Oct 2014 09:28:46 -0700 (PDT) X-Received: by 10.152.7.7 with SMTP id f7mr5528803laa.57.1414168126924; Fri, 24 Oct 2014 09:28:46 -0700 (PDT) Received: from mail-la0-f50.google.com (mail-la0-f50.google.com. [209.85.215.50]) by mx.google.com with ESMTPS id u14si7773125laz.45.2014.10.24.09.28.46 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 24 Oct 2014 09:28:46 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.50 as permitted sender) client-ip=209.85.215.50; Received: by mail-la0-f50.google.com with SMTP id s18so3003325lam.9 for ; Fri, 24 Oct 2014 09:28:46 -0700 (PDT) X-Received: by 10.112.97.135 with SMTP id ea7mr5738277lbb.46.1414168126696; Fri, 24 Oct 2014 09:28:46 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.84.229 with SMTP id c5csp463256lbz; Fri, 24 Oct 2014 09:28:45 -0700 (PDT) X-Received: by 10.70.22.69 with SMTP id b5mr4576889pdf.68.1414168124907; Fri, 24 Oct 2014 09:28:44 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id fy9si1415761pdb.167.2014.10.24.09.28.44 for ; Fri, 24 Oct 2014 09:28:44 -0700 (PDT) Received-SPF: none (google.com: linux-kernel-owner@vger.kernel.org does not designate permitted sender hosts) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756849AbaJXQ2d (ORCPT + 26 others); Fri, 24 Oct 2014 12:28:33 -0400 Received: from foss-mx-na.foss.arm.com ([217.140.108.86]:48385 "EHLO foss-mx-na.foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752680AbaJXQ2b (ORCPT ); Fri, 24 Oct 2014 12:28:31 -0400 Received: from foss-smtp-na-1.foss.arm.com (unknown [10.80.61.8]) by foss-mx-na.foss.arm.com (Postfix) with ESMTP id D0A09231; Fri, 24 Oct 2014 11:28:26 -0500 (CDT) Received: from collaborate-mta1.arm.com (highbank-bc01-b06.austin.arm.com [10.112.81.134]) by foss-smtp-na-1.foss.arm.com (Postfix) with ESMTP id 6A3215FAD8; Fri, 24 Oct 2014 11:28:24 -0500 (CDT) Received: from red-moon.cambridge.arm.com (red-moon.cambridge.arm.com [10.1.203.32]) by collaborate-mta1.arm.com (Postfix) with ESMTP id 67AC313F61D; Fri, 24 Oct 2014 11:28:23 -0500 (CDT) From: Lorenzo Pieralisi To: linux-kernel@vger.kernel.org Cc: Lorenzo Pieralisi , Arnd Bergmann , Russell King , LAKML , Linux PCI Subject: [PATCH RFC v2 2/2] arm: kernel: fix pci_mmap_page_range() offset calculation Date: Fri, 24 Oct 2014 17:28:06 +0100 Message-Id: <1414168089-8130-3-git-send-email-lorenzo.pieralisi@arm.com> X-Mailer: git-send-email 2.1.2 In-Reply-To: <1414168089-8130-1-git-send-email-lorenzo.pieralisi@arm.com> References: <1414168089-8130-1-git-send-email-lorenzo.pieralisi@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: lorenzo.pieralisi@arm.com X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.50 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , The pci_mmap_page_range() API should be written to expect offset values representing PCI memory resource addresses as seen by user space, through the pci_resource_to_user() API. ARM relies on the standard implementation of pci_resource_to_user() which actually is an identity map and exports to user space PCI memory resources as they are stored in PCI devices resources structures, which represent CPU physical addresses (fixed-up using BUS to CPU address conversions) not PCI bus addresses. Therefore, on ARM platforms where the mapping between CPU and BUS address is not a 1:1 the current pci_mmap_page_range() implementation is erroneous, in that an additional shift is applied to an already fixed-up offset passed from userspace. Hence, this patch removes the mem_offset from the pgoff calculation since the offset as passed from user space already represents the CPU physical address corresponding to the resource to be mapped, ie no additional offset should be applied. Cc: Arnd Bergmann Cc: Russell King Signed-off-by: Lorenzo Pieralisi --- arch/arm/kernel/bios32.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c index 17a26c1..b56fa2d 100644 --- a/arch/arm/kernel/bios32.c +++ b/arch/arm/kernel/bios32.c @@ -626,21 +626,15 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, enum pci_mmap_state mmap_state, int write_combine) { - struct pci_sys_data *root = dev->sysdata; - unsigned long phys; - - if (mmap_state == pci_mmap_io) { + if (mmap_state == pci_mmap_io) return -EINVAL; - } else { - phys = vma->vm_pgoff + (root->mem_offset >> PAGE_SHIFT); - } /* * Mark this as IO */ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); - if (remap_pfn_range(vma, vma->vm_start, phys, + if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, vma->vm_end - vma->vm_start, vma->vm_page_prot)) return -EAGAIN;