From patchwork Thu Oct 23 17:27:25 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefano Stabellini X-Patchwork-Id: 39392 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-ee0-f69.google.com (mail-ee0-f69.google.com [74.125.83.69]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id C425B20341 for ; Thu, 23 Oct 2014 17:36:08 +0000 (UTC) Received: by mail-ee0-f69.google.com with SMTP id c13sf1077064eek.4 for ; Thu, 23 Oct 2014 10:36:07 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:sender:precedence:list-id :x-original-sender:x-original-authentication-results:mailing-list :list-post:list-help:list-archive:list-unsubscribe:content-type; bh=Aw+FBrQsUZ+QbSF2ynGybfVY/8jiMq2cPVCgsgVcceg=; b=DIvhuyemxTXosGpus97XxcaSmkaL8a0Dzif4EEU8WK7VAhdM6cwLbpj5zCPp9YK2WI 9nMg5wHDK6QT8q66tklR7D8SD0zctODEMBERPeCOQ6sgn6go9le6+X+BtmreE2GxjAC4 YTamGe25PlZmLFZWysHGZU/yu8NBqnkG0B1rm/FSuD+STYHL19DYsMBm2/r5xVp6EnE2 wAQa4ZJYdetGqzonsEOrVtUFuYoqaRuxqphTrV5YrAUC7M9cszDuFTOi53MO0BkRC9WZ P3+q334ssynjnWNDH2dVBhEoLxqkcKrtgCprK3144wKyIPoR2SC7gMMqSrGJMrVQ8qub IE3Q== X-Gm-Message-State: ALoCoQlA96MOZXKbqjXsne6HDSVNmEU6R8yglyvxXXHu0vowTmXCt2k9N1ON5ltrFDZUIMfBxARn X-Received: by 10.180.74.130 with SMTP id t2mr2655215wiv.4.1414085767899; Thu, 23 Oct 2014 10:36:07 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.120.169 with SMTP id ld9ls358267lab.12.gmail; Thu, 23 Oct 2014 10:36:07 -0700 (PDT) X-Received: by 10.112.38.67 with SMTP id e3mr6906329lbk.6.1414085767680; Thu, 23 Oct 2014 10:36:07 -0700 (PDT) Received: from mail-lb0-f180.google.com (mail-lb0-f180.google.com. [209.85.217.180]) by mx.google.com with ESMTPS id bn10si3609907lbc.108.2014.10.23.10.36.07 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 23 Oct 2014 10:36:07 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.180 as permitted sender) client-ip=209.85.217.180; Received: by mail-lb0-f180.google.com with SMTP id n15so1225530lbi.39 for ; Thu, 23 Oct 2014 10:36:07 -0700 (PDT) X-Received: by 10.112.12.35 with SMTP id v3mr6710645lbb.80.1414085766998; Thu, 23 Oct 2014 10:36:06 -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 c5csp296100lbz; Thu, 23 Oct 2014 10:36:06 -0700 (PDT) X-Received: by 10.68.101.98 with SMTP id ff2mr6583828pbb.74.1414085765132; Thu, 23 Oct 2014 10:36:05 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id xd1si2048267pab.234.2014.10.23.10.36.04 for ; Thu, 23 Oct 2014 10:36:05 -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 S1755537AbaJWRfx (ORCPT + 28 others); Thu, 23 Oct 2014 13:35:53 -0400 Received: from smtp.citrix.com ([66.165.176.89]:28822 "EHLO SMTP.CITRIX.COM" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753597AbaJWRfD (ORCPT ); Thu, 23 Oct 2014 13:35:03 -0400 X-IronPort-AV: E=Sophos;i="5.04,776,1406592000"; d="scan'208";a="184362050" Received: from ukmail1.uk.xensource.com (10.80.16.128) by smtprelay.citrix.com (10.13.107.80) with Microsoft SMTP Server id 14.3.181.6; Thu, 23 Oct 2014 13:30:06 -0400 Received: from kaball.uk.xensource.com ([10.80.2.59]) by ukmail1.uk.xensource.com with esmtp (Exim 4.69) (envelope-from ) id 1XhMD2-00085f-MA; Thu, 23 Oct 2014 18:30:00 +0100 From: Stefano Stabellini To: CC: , , , , , , , Stefano Stabellini Subject: [PATCH v5 5/6] xen/arm/arm64: introduce xen_arch_need_swiotlb Date: Thu, 23 Oct 2014 18:27:25 +0100 Message-ID: <1414085246-16160-5-git-send-email-stefano.stabellini@eu.citrix.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: References: MIME-Version: 1.0 X-DLP: MIA1 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: stefano.stabellini@eu.citrix.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.217.180 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: , Introduce an arch specific function to find out whether a particular dma mapping operation needs to bounce on the swiotlb buffer. On ARM and ARM64, if the page involved is a foreign page and the device is not coherent, we need to bounce because at unmap time we cannot execute any required cache maintenance operations (we don't know how to find the pfn from the mfn). No change of behaviour for x86. Signed-off-by: Stefano Stabellini Acked-by: Ian Campbell --- Changes in v5: - fix indentation. --- arch/arm/include/asm/xen/page.h | 4 ++++ arch/arm/xen/mm.c | 7 +++++++ arch/x86/include/asm/xen/page.h | 7 +++++++ drivers/xen/swiotlb-xen.c | 5 ++++- 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/arch/arm/include/asm/xen/page.h b/arch/arm/include/asm/xen/page.h index 135c24a..fb7839d 100644 --- a/arch/arm/include/asm/xen/page.h +++ b/arch/arm/include/asm/xen/page.h @@ -107,4 +107,8 @@ static inline bool set_phys_to_machine(unsigned long pfn, unsigned long mfn) #define xen_remap(cookie, size) ioremap_cache((cookie), (size)) #define xen_unmap(cookie) iounmap((cookie)) +bool xen_arch_need_swiotlb(struct device *dev, + unsigned long pfn, + unsigned long mfn); + #endif /* _ASM_ARM_XEN_PAGE_H */ diff --git a/arch/arm/xen/mm.c b/arch/arm/xen/mm.c index 659e1c3..728c245 100644 --- a/arch/arm/xen/mm.c +++ b/arch/arm/xen/mm.c @@ -140,6 +140,13 @@ void xen_dma_sync_single_for_device(struct device *hwdev, __xen_dma_page_cpu_to_dev(hwdev, handle, size, dir); } +bool xen_arch_need_swiotlb(struct device *dev, + unsigned long pfn, + unsigned long mfn) +{ + return ((pfn != mfn) && !xen_is_dma_coherent(dev)); +} + int xen_create_contiguous_region(phys_addr_t pstart, unsigned int order, unsigned int address_bits, dma_addr_t *dma_handle) diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h index c949923..800b6a9 100644 --- a/arch/x86/include/asm/xen/page.h +++ b/arch/x86/include/asm/xen/page.h @@ -236,4 +236,11 @@ void make_lowmem_page_readwrite(void *vaddr); #define xen_remap(cookie, size) ioremap((cookie), (size)); #define xen_unmap(cookie) iounmap((cookie)) +static inline bool xen_arch_need_swiotlb(struct device *dev, + unsigned long pfn, + unsigned long mfn) +{ + return false; +} + #endif /* _ASM_X86_XEN_PAGE_H */ diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c index ebd8f21..ac0bd60 100644 --- a/drivers/xen/swiotlb-xen.c +++ b/drivers/xen/swiotlb-xen.c @@ -399,7 +399,9 @@ dma_addr_t xen_swiotlb_map_page(struct device *dev, struct page *page, * buffering it. */ if (dma_capable(dev, dev_addr, size) && - !range_straddles_page_boundary(phys, size) && !swiotlb_force) { + !range_straddles_page_boundary(phys, size) && + !xen_arch_need_swiotlb(dev, PFN_DOWN(phys), PFN_DOWN(dev_addr)) && + !swiotlb_force) { /* we are not interested in the dma_addr returned by * xen_dma_map_page, only in the potential cache flushes executed * by the function. */ @@ -557,6 +559,7 @@ xen_swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl, dma_addr_t dev_addr = xen_phys_to_bus(paddr); if (swiotlb_force || + xen_arch_need_swiotlb(hwdev, PFN_DOWN(paddr), PFN_DOWN(dev_addr)) || !dma_capable(hwdev, dev_addr, sg->length) || range_straddles_page_boundary(paddr, sg->length)) { phys_addr_t map = swiotlb_tbl_map_single(hwdev,