Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp4462447ybl; Sat, 21 Dec 2019 07:06:39 -0800 (PST) X-Google-Smtp-Source: APXvYqyp7MEU5MBwC5n+ge/PMw++m/4TsXuG/JLEP2xLX0Q2h0dqyGzJ1/7Vtg7DFwVffehBc2sn X-Received: by 2002:aca:d6d2:: with SMTP id n201mr5282951oig.112.1576940799514; Sat, 21 Dec 2019 07:06:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576940799; cv=none; d=google.com; s=arc-20160816; b=FosfG/PbO+MVT55Tzq6TR5pB+YSsaCH5ozp5u7PWG0AHqD53qRKLylX3c3U8rHZIau /mSmAc2wgaTAs1tGgt7MkGnNtuoqeSlXZUYUXjtKRpxnqPswGS5N3i0cRiU8EibkQGdI iniMdEarG60v+W/fHtHG+bWenTXHY1AjSJyuYNKWWawmqO4dQu24CDX6DTt4GAUaEENo sopjyhAcIz+fPz6ZqQiZSH5sMYmgZjWrH34cBSP64KuOLKK4ALiyCOYQklEv4KiQ/SP8 12uWsjIFU/mCXxyhZzJi532v3nqBqJgVNWhCCzgFx17IWouMfK/pMps+rZVGkOcoxcTl i/1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=0N+893Qfq6YLP1OvUkum1ZO1qWJ01GUT6Ih8V2c80Vk=; b=OwW4PnlYG+skdCbPHSrSZUTI+BRmNey0cQSF8tul4BBVlMe7nrpl2uaygbuSjfYAeI +9R9nG7f+tLr9d91WQbKU0nKRhW5xVHHvcHR2bq7fG+S1UDT1fCuPYOQ/v09Tq8vn64o FCwTo4LSf+pcuElkDP0uo7v0A/O875CaXwTCuI3wiin0mQtwobhucNI7rk7M5/UTqGwF TjWWlgX/ci57okzslMtF50ARX1Xtk5TUncP+3CNE8ac6MdZ6kN0dnV7CangcTa6vOeoU 1pXqGCr+mdKvpj6iFxGwDIr+/kGWjwRso7zkLMytHZLX/X8zMTn66MQPS9aROIo7tdDz zmMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@tcd-ie.20150623.gappssmtp.com header.s=20150623 header.b=Ukw6PoNA; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t15si5442643oij.189.2019.12.21.07.06.28; Sat, 21 Dec 2019 07:06:39 -0800 (PST) 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=@tcd-ie.20150623.gappssmtp.com header.s=20150623 header.b=Ukw6PoNA; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727523AbfLUPFO (ORCPT + 99 others); Sat, 21 Dec 2019 10:05:14 -0500 Received: from mail-ed1-f68.google.com ([209.85.208.68]:35291 "EHLO mail-ed1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727370AbfLUPFN (ORCPT ); Sat, 21 Dec 2019 10:05:13 -0500 Received: by mail-ed1-f68.google.com with SMTP id f8so11405988edv.2 for ; Sat, 21 Dec 2019 07:05:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0N+893Qfq6YLP1OvUkum1ZO1qWJ01GUT6Ih8V2c80Vk=; b=Ukw6PoNAZjf5krJJRS06xPvTLavrof9Akn4Pak+RjVdM62j1/NqPdGsYUU6ngGpNzI ZHRA+faVKygYXpBoHQBzzSrMhFuDjDM3rPT8thlw7ti3Ya7E/2Ia2hgJGmjOkpCbhcKi fWFJ41yTlMvsKGf/oqAM1MkQf60LS0RKrqZ8loUGznkUimWWsqYUsRHeSebLKMi4vBlg XuhtpVGYw4uTiieNAiV6TEl+/HFnxAfvR6qkWvowyMkkJ9p39r4oe6DrrFdOAOaTjRHK ZuOahTLph0HLpnOdVRH8cOKfXQ7P8kaiwem0m0P3CTEBJSk0wQflsk31c0yoR6ujnQx5 TqqQ== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=0N+893Qfq6YLP1OvUkum1ZO1qWJ01GUT6Ih8V2c80Vk=; b=sGIpapK8ruG5iLYbhKYUPfMSn6z+o0Emtrk5jyWe+v/5aN/Z9cBoujzhYnSpZSRy8O 8GMf52kfFooMGTvg2fd6lNCLf9TZsAM9Ya0rPWjtIEZXd1+cDN8RzKXXv3dv8zYVbeQT koz2uRyXzs6YJtrdC4WpizSdGfJyp13z9VHiPpqq9ryJckGtVS/TA7WctOSWnOdtbb4o 88ydxGO3Dk8WipmQZqoXJKahO99oBMWyxgwokVWDltse5P/VzdCriNLVPAx81QE5Ep/G T+AmNKA63oTIYsWr0lI75xHDux7Cs2RgmTS11+RwOZQRJ5y4EGII581s7tYtqbgEDtNP Y1Kw== X-Gm-Message-State: APjAAAXoQze25ngfboAXIGg9xNWd+vCoV9QQYWDaDbQCnIJuRe47onx/ ZZneiRxsmpF6ViP0pKFCf6Sx4A== X-Received: by 2002:a17:906:2649:: with SMTP id i9mr22633139ejc.120.1576940711107; Sat, 21 Dec 2019 07:05:11 -0800 (PST) Received: from localhost.localdomain ([80.233.37.20]) by smtp.googlemail.com with ESMTPSA id u13sm1517639ejz.69.2019.12.21.07.05.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Dec 2019 07:05:10 -0800 (PST) From: Tom Murphy To: iommu@lists.linux-foundation.org Cc: Tom Murphy , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , David Airlie , Daniel Vetter , Joerg Roedel , Will Deacon , Robin Murphy , Marek Szyprowski , Kukjin Kim , Krzysztof Kozlowski , David Woodhouse , Lu Baolu , Andy Gross , Bjorn Andersson , Matthias Brugger , Rob Clark , Heiko Stuebner , Gerald Schaefer , Thierry Reding , Jonathan Hunter , Jean-Philippe Brucker , Alex Williamson , Cornelia Huck , Marc Zyngier , Eric Auger , Julien Grall , Thomas Gleixner , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-s390@vger.kernel.org, linux-tegra@vger.kernel.org, virtualization@lists.linux-foundation.org, kvm@vger.kernel.org Subject: [PATCH 8/8] DO NOT MERGE: iommu: disable list appending in dma-iommu Date: Sat, 21 Dec 2019 15:04:00 +0000 Message-Id: <20191221150402.13868-9-murphyt7@tcd.ie> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191221150402.13868-1-murphyt7@tcd.ie> References: <20191221150402.13868-1-murphyt7@tcd.ie> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ops __finalise_sg Disable combining sg segments in the dma-iommu api. Combining the sg segments exposes a bug in the intel i915 driver which causes visual artifacts and the screen to freeze. This is most likely because of how the i915 handles the returned list. It probably doesn't respect the returned value specifying the number of elements in the list and instead depends on the previous behaviour of the intel iommu driver which would return the same number of elements in the output list as in the input list. Signed-off-by: Tom Murphy --- drivers/iommu/dma-iommu.c | 38 +++++++------------------------------- 1 file changed, 7 insertions(+), 31 deletions(-) diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index cf778db7d84d..d7547b912c87 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -853,8 +853,7 @@ static int __finalise_sg(struct device *dev, struct scatterlist *sg, int nents, { struct scatterlist *s, *cur = sg; unsigned long seg_mask = dma_get_seg_boundary(dev); - unsigned int cur_len = 0, max_len = dma_get_max_seg_size(dev); - int i, count = 0; + int i; for_each_sg(sg, s, nents, i) { /* Restore this segment's original unaligned fields first */ @@ -862,39 +861,16 @@ static int __finalise_sg(struct device *dev, struct scatterlist *sg, int nents, unsigned int s_length = sg_dma_len(s); unsigned int s_iova_len = s->length; + if (i > 0) + cur = sg_next(cur); + s->offset += s_iova_off; s->length = s_length; - sg_dma_address(s) = DMA_MAPPING_ERROR; - sg_dma_len(s) = 0; - - /* - * Now fill in the real DMA data. If... - * - there is a valid output segment to append to - * - and this segment starts on an IOVA page boundary - * - but doesn't fall at a segment boundary - * - and wouldn't make the resulting output segment too long - */ - if (cur_len && !s_iova_off && (dma_addr & seg_mask) && - (max_len - cur_len >= s_length)) { - /* ...then concatenate it with the previous one */ - cur_len += s_length; - } else { - /* Otherwise start the next output segment */ - if (i > 0) - cur = sg_next(cur); - cur_len = s_length; - count++; - - sg_dma_address(cur) = dma_addr + s_iova_off; - } - - sg_dma_len(cur) = cur_len; + sg_dma_address(cur) = dma_addr + s_iova_off; + sg_dma_len(cur) = s_length; dma_addr += s_iova_len; - - if (s_length + s_iova_off < s_iova_len) - cur_len = 0; } - return count; + return nents; } /* -- 2.20.1