Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp449918pxb; Tue, 3 Nov 2020 04:04:59 -0800 (PST) X-Google-Smtp-Source: ABdhPJxBc3PaTTyq3YHTuQAf1EaCzG2HuwXd4jxU0ru/sqHpnbpqgTKmv8myb2Paz1bYbbRp2hOC X-Received: by 2002:aa7:d801:: with SMTP id v1mr6495222edq.250.1604405099300; Tue, 03 Nov 2020 04:04:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604405099; cv=none; d=google.com; s=arc-20160816; b=IkmqkXTgrxWopI5tixkwrhFXTb55JiUIR6YQiwoA4CXFYqntn2OuUMxWYxX+g/nFLY B80zvarCqv4ZuNg5B5+zE7RrwX0CEJxSBuJcj8PtndqXrDkCMP3j5ZatwtADFHTk4Kg9 k0iBgFlAYzg8R0lQf/6SdqbcTVtnsz7moY1RPXLC8p07dVAHylaFEjHYR89y14XXPr/b +40AkUiljX/BohWofyD9fBRi8wYoTvguMCuywaaz1kUuJKxtW0LJ51VHlgi1xyI6lJE5 5hqVBWxLuuQpjwruvoKqmUZMmrF/tY1ljawXiG9hE7phW4SyUpqJEPK6p3Wqt/h5x4z6 x9zg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=qecFABQ1Vuy9WS1l+UHKyv+iuuO9Awfsz06Pi2o9Wg4=; b=Jy8kzSWe3tqSXQd+FVybcWsFrnLoSNTG6a+9Dc3Xul7Dr+/T4K9/de1sA6QNRAgAqo kDrqt6gFa0tnVia/AeiLMZZyUDWVK8348fvaWpF7JNVacYfJq6zpsjRTGg0d2QgwKC5C qk4NH/WFYZKGflQ5ZTbsHd5FzJEyyZV501eB1srlIpEoMFMoITUkJG99KtJBvvNU8iS3 V4dOMM+GQRn2OuJmb0y0PCy77ovjSlzrDV5IGDFwxDEXivdf008T1TScNiTiMNj23rnC UJ+TccT+CMV65CopPoogl894qGsV+RFBv98STS66FN/QGPLWWF9NZjmKtSyNFyz2ftkl U0yg== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c24si7514395ejb.119.2020.11.03.04.04.27; Tue, 03 Nov 2020 04:04:59 -0800 (PST) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728784AbgKCMAm (ORCPT + 99 others); Tue, 3 Nov 2020 07:00:42 -0500 Received: from foss.arm.com ([217.140.110.172]:47630 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727109AbgKCMAl (ORCPT ); Tue, 3 Nov 2020 07:00:41 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B5DA4106F; Tue, 3 Nov 2020 04:00:40 -0800 (PST) Received: from [10.57.54.223] (unknown [10.57.54.223]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id AF3CC3F718; Tue, 3 Nov 2020 04:00:38 -0800 (PST) Subject: Re: [PATCH v4 4/7] iommu: Add quirk for Intel graphic devices in map_sg To: Lu Baolu , Joerg Roedel , Tom Murphy , David Woodhouse , Christoph Hellwig Cc: Tvrtko Ursulin , Ashok Raj , Intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org References: <20200927063437.13988-1-baolu.lu@linux.intel.com> <20200927063437.13988-5-baolu.lu@linux.intel.com> From: Robin Murphy Message-ID: <281f22ed-8b36-fc20-4b08-27ef168f941d@arm.com> Date: Tue, 3 Nov 2020 12:00:33 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Thunderbird/78.4.0 MIME-Version: 1.0 In-Reply-To: <20200927063437.13988-5-baolu.lu@linux.intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2020-09-27 07:34, Lu Baolu wrote: > 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 > Signed-off-by: Lu Baolu > --- > drivers/iommu/dma-iommu.c | 27 +++++++++++++++++++++++++++ > 1 file changed, 27 insertions(+) > > diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c > index 3526db774611..e7e4d758f51a 100644 > --- a/drivers/iommu/dma-iommu.c > +++ b/drivers/iommu/dma-iommu.c > @@ -879,6 +879,33 @@ static int __finalise_sg(struct device *dev, struct scatterlist *sg, int nents, > unsigned int cur_len = 0, max_len = dma_get_max_seg_size(dev); > int i, count = 0; > > + /* > + * The Intel graphic driver is used to assume that the returned > + * sg list is not combound. This blocks the efforts of converting > + * Intel IOMMU driver to dma-iommu api's. Add this quirk to make the > + * device driver work and should be removed once it's fixed in i915 > + * driver. > + */ > + if (IS_ENABLED(CONFIG_DRM_I915) && dev_is_pci(dev) && > + to_pci_dev(dev)->vendor == PCI_VENDOR_ID_INTEL && > + (to_pci_dev(dev)->class >> 16) == PCI_BASE_CLASS_DISPLAY) { > + for_each_sg(sg, s, nents, i) { > + unsigned int s_iova_off = sg_dma_address(s); > + unsigned int s_length = sg_dma_len(s); > + unsigned int s_iova_len = s->length; > + > + s->offset += s_iova_off; > + s->length = s_length; > + sg_dma_address(s) = dma_addr + s_iova_off; > + sg_dma_len(s) = s_length; > + dma_addr += s_iova_len; > + > + pr_info_once("sg combining disabled due to i915 driver\n"); > + } > + > + return nents; > + } BTW, a much less invasive workaround would be to simply override seg_mask to 0. That's enough to make sure that no segment looks eligible for merging. Robin. > + > for_each_sg(sg, s, nents, i) { > /* Restore this segment's original unaligned fields first */ > unsigned int s_iova_off = sg_dma_address(s); >