From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1BC79C2D0D4 for ; Mon, 23 Dec 2019 03:01:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F1AF420708 for ; Mon, 23 Dec 2019 03:01:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726616AbfLWDBx (ORCPT ); Sun, 22 Dec 2019 22:01:53 -0500 Received: from mga14.intel.com ([192.55.52.115]:30684 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726393AbfLWDBx (ORCPT ); Sun, 22 Dec 2019 22:01:53 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Dec 2019 19:01:49 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,346,1571727600"; d="scan'208";a="417121170" Received: from allen-box.sh.intel.com (HELO [10.239.159.136]) ([10.239.159.136]) by fmsmga005.fm.intel.com with ESMTP; 22 Dec 2019 19:01:43 -0800 Cc: baolu.lu@linux.intel.com, Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , David Airlie , Daniel Vetter , Joerg Roedel , Will Deacon , Robin Murphy , Marek Szyprowski , Kukjin Kim , Krzysztof Kozlowski , David Woodhouse , Andy Gross , Bjorn Andersson , Matthias Brugger , Rob Clark , Heiko Stuebner , Gerald Schaefer , Thierry Reding , Jonathan Hunter , Jean-Philippe Brucker , Alex Williamson , Cornelia Huck , Eric Auger , Julien Grall , Marc Zyngier , 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: Re: [PATCH 1/8] iommu/vt-d: clean up 32bit si_domain assignment To: Tom Murphy , iommu@lists.linux-foundation.org References: <20191221150402.13868-1-murphyt7@tcd.ie> <20191221150402.13868-2-murphyt7@tcd.ie> From: Lu Baolu Message-ID: Date: Mon, 23 Dec 2019 11:00:47 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 MIME-Version: 1.0 In-Reply-To: <20191221150402.13868-2-murphyt7@tcd.ie> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org Hi, On 12/21/19 11:03 PM, Tom Murphy wrote: > @@ -5618,9 +5583,13 @@ static int intel_iommu_add_device(struct device *dev) > struct iommu_domain *domain; > struct intel_iommu *iommu; > struct iommu_group *group; > + u64 dma_mask = *dev->dma_mask; > u8 bus, devfn; > int ret; > > + if (dev->coherent_dma_mask && dev->coherent_dma_mask < dma_mask) > + dma_mask = dev->coherent_dma_mask; > + > iommu = device_to_iommu(dev, &bus, &devfn); > if (!iommu) > return -ENODEV; > @@ -5640,7 +5609,12 @@ static int intel_iommu_add_device(struct device *dev) > domain = iommu_get_domain_for_dev(dev); > dmar_domain = to_dmar_domain(domain); > if (domain->type == IOMMU_DOMAIN_DMA) { > - if (device_def_domain_type(dev) == IOMMU_DOMAIN_IDENTITY) { > + /* > + * We check dma_mask >= dma_get_required_mask(dev) because > + * 32 bit DMA falls back to non-identity mapping. > + */ > + if (device_def_domain_type(dev) == IOMMU_DOMAIN_IDENTITY && > + dma_mask >= dma_get_required_mask(dev)) { > ret = iommu_request_dm_for_dev(dev); > if (ret) { > dmar_remove_one_dev_info(dev); dev->dma_mask is set to 32bit by default. During loading driver, it sets the real dma_mask with dma_set_mask() according to the real capability. Here you will always see 32bit dma_mask for each device. Best regards, baolu