Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp3083456yba; Sun, 28 Apr 2019 16:50:36 -0700 (PDT) X-Google-Smtp-Source: APXvYqyNYbPw2o0BY2GhvwNQgRq9hu0sjIJy1/zRPQsv2qkD8TdibHNstzI1KOCDiFWcD2Lvi45u X-Received: by 2002:a17:902:20cb:: with SMTP id v11mr58955826plg.324.1556495436210; Sun, 28 Apr 2019 16:50:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556495436; cv=none; d=google.com; s=arc-20160816; b=IwIC5KGkKVkn9MCLXeLtiUcIjmk2ZEWkzScFxG1nsIIIRmhvskrFQS8BQp1CuCFReQ /9AjzquYkRoA2sKHxxeTVDEmXWe1oNb6zMtdVpp4EqMs9yMOpSaQS6EX146/j7CqtfXC c36aI0TEUjAYxmplJzH0iG1aAjRux2k4Ds5/dCoBx+iTr6iVGCPw1iRFCUVBGs2VhC7i OQYzbaN6Qn1OcUNy1DD7R5R0VtPEaPW9JhcfgWoKQ1xlMhuGXHhy2mMCZ26ypNbzoKAi TSJTSM7pAV7s9SZ7VpI70OTH3w/FQ9W7SOTKBYmlAixdYBRf5fXmh8FOQvu5fVctMGjI OSdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=bXeviVN/ZLMlwpdgsgv+FliQqyuSE4iSxUS5o6dbCfo=; b=Xv/fcX1jOdx2rGAs1rSlflx7Y/Xdm4F7L+O6dhZy8wB8T/jfowK+SGQCUqxubTM910 Qg6HxCQYVjfQMbe6nmpLgUI164UBeXt3Qty4vFIJ8bkvdfHpWNFqBmATesn/BLo2PEVr RjOdDrSodv62vK9Um1SVC4F89BAO+a0OiTKF9Za5QuJ8FPZN1YI+LpOsOD3BqZ4CB4QX wOjJeBTnq9BN7MKdt24OiUbj32IVVLnLdQUohpYqARWcZKdpONeBLTr0pho4E5mHxJGn vAg/kSdepuO15WXpk7mRFc4Y2ikOCCAa5eh0N25FJKyhxcjmwd3CRyw2oxveOQY0qWw7 w0YQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@arista.com header.s=googlenew header.b=D9YnoNnd; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=REJECT dis=NONE) header.from=arista.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g70si17656935pgc.87.2019.04.28.16.49.55; Sun, 28 Apr 2019 16:50:36 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@arista.com header.s=googlenew header.b=D9YnoNnd; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=REJECT dis=NONE) header.from=arista.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726597AbfD1Xrr (ORCPT + 99 others); Sun, 28 Apr 2019 19:47:47 -0400 Received: from mail-ed1-f66.google.com ([209.85.208.66]:43285 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726529AbfD1Xrq (ORCPT ); Sun, 28 Apr 2019 19:47:46 -0400 Received: by mail-ed1-f66.google.com with SMTP id j20so7595285edq.10 for ; Sun, 28 Apr 2019 16:47:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arista.com; s=googlenew; h=from:to:cc:subject:date:message-id; bh=bXeviVN/ZLMlwpdgsgv+FliQqyuSE4iSxUS5o6dbCfo=; b=D9YnoNndfaQcnsCQdsyY3nJ6b8HcYhha7zzeQlvqDnrDQo+0v61hKiHYppvNtj38D9 Se/83ut/iOtHQXlukQZdR/26XukjBlApoF8Akjh5aJP6Qj6NJXqD9WrYqvoyxIJVGk0/ HwgHzJ4KEtGIdUvYgNGQRgeOcyTqf9dTSc/Aqd8es1dv8BZ7Ayknegb135B7Uun+bcVJ IB6Q2XLNYUJsODpHOU7l+uPiMMo1L5P7MMgDdxm98UO8r65/aXNW3NLP8dQyPPQQAbCF EAn2pqqkTpewU4/07j5fRPAJfJjt7PifUGQlRqKIl9gEQ0iGEfr51iW0guu1e7znLoDP lx7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=bXeviVN/ZLMlwpdgsgv+FliQqyuSE4iSxUS5o6dbCfo=; b=k5ZTBwE4dm2AG+wsHc9z3/2syac3GgDmccKcd+TX3RTtHwkMmy3I7IUOj1dOEVrW0S zkiBPGfKny24LwgYWca3uw0YKvxTnPNrBLDqVV2iZtJoT1DYFexQUyH6h8F4OA812yLL IUtJJ/kV7qkhTEPaRMOcuj4RrZHLxFep4rAfrFbMs+2boMlspZWuUKZOQoQxl89+48Y2 4xq5/NNerXVLzM0u5ygK9rZAgexkEggHw+Z5Ts8MGcoR5jphosYUytwoy6wFkIuw+g0h A76F75XWj9AqP62b7zm09hLtXh3/5ixcKrJ3Vrt5f5HOn+549t+xAnxvNaoNTLLIMCWe kLBQ== X-Gm-Message-State: APjAAAV3N1Z4+cntg2VTczn5ESiRQT86ElmLLUqd9Uwy08+I+Xc0EyS+ LQFDBc2EgK9BI6QQbFaqGzSWAg== X-Received: by 2002:a50:8a8b:: with SMTP id j11mr21628737edj.212.1556495264804; Sun, 28 Apr 2019 16:47:44 -0700 (PDT) Received: from localhost.localdomain ([37.228.251.87]) by smtp.gmail.com with ESMTPSA id p18sm5513219ejm.4.2019.04.28.16.47.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 28 Apr 2019 16:47:44 -0700 (PDT) From: Tom Murphy To: iommu@lists.linux-foundation.org Cc: murphyt7@tcd.ie, Tom Murphy , Joerg Roedel , linux-kernel@vger.kernel.org Subject: [PATCH v2] iommu/amd: flush not present cache in iommu_map_page Date: Mon, 29 Apr 2019 00:47:02 +0100 Message-Id: <20190428234703.13697-1-tmurphy@arista.com> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org check if there is a not-present cache present and flush it if there is. Signed-off-by: Tom Murphy --- drivers/iommu/amd_iommu.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index f7cdd2ab7f11..ebd062522cf5 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -1307,6 +1307,16 @@ static void domain_flush_complete(struct protection_domain *domain) } } +/* Flush the not present cache if it exists */ +static void domain_flush_np_cache(struct protection_domain *domain, + dma_addr_t iova, size_t size) +{ + if (unlikely(amd_iommu_np_cache)) { + domain_flush_pages(domain, iova, size); + domain_flush_complete(domain); + } +} + /* * This function flushes the DTEs for all devices in domain @@ -2435,10 +2445,7 @@ static dma_addr_t __map_single(struct device *dev, } address += offset; - if (unlikely(amd_iommu_np_cache)) { - domain_flush_pages(&dma_dom->domain, address, size); - domain_flush_complete(&dma_dom->domain); - } + domain_flush_np_cache(&dma_dom->domain, address, size); out: return address; @@ -2617,6 +2624,8 @@ static int map_sg(struct device *dev, struct scatterlist *sglist, s->dma_length = s->length; } + domain_flush_np_cache(domain, s->dma_address, s->dma_length); + return nelems; out_unmap: @@ -3101,6 +3110,8 @@ static int amd_iommu_map(struct iommu_domain *dom, unsigned long iova, ret = iommu_map_page(domain, iova, paddr, page_size, prot, GFP_KERNEL); mutex_unlock(&domain->api_lock); + domain_flush_np_cache(domain, iova, page_size); + return ret; } -- 2.17.1