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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C0BD6ECAAD8 for ; Thu, 22 Sep 2022 02:24:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:To:Subject:MIME-Version: Date:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=+Dm0KI/uo1aspdin50Dp+YzD/g3yiC4bZbrRakAgfns=; b=CLFOHQwofMlRxXtw5hJNrR180G iq8aT+k87Z6vX5HfEpRrwkwW4StAWXqfvXuyg2OnpvF5Opft/qlwK6KWd+8xtgiEyBhclfkmxBTqP KBWgAlKFUNMHeM+hIjxZEic3QZULjKz8t4a9YUTJk3zygfChu8JGQM9jdESbsSpiG9m1Li77H8uiy xsT8PstMyYxPEUil2pGCiJu7uahlinOLkrZaIYHLpoY2ITbhhrk0BQ/5oAHk1Ijz0bEUip/GOJOOo +9FqoYgYA+pve5IVib1yBKMm0/B2e+tKNUjIu9dvWJLygY8+IynUNa9fm2hnQmIYYqZkHiE8nYThY ksJxOw8w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1obBrb-00D8eR-Pg; Thu, 22 Sep 2022 02:22:55 +0000 Received: from mga05.intel.com ([192.55.52.43]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1obBrX-00D8dC-Hs; Thu, 22 Sep 2022 02:22:53 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663813371; x=1695349371; h=message-id:date:mime-version:cc:subject:to:references: from:in-reply-to:content-transfer-encoding; bh=WCVx5BaOJGdGW1cZNmlkP0ri8jdLdsjoqTq/enwzcKk=; b=X98DERy/bnxiXBB4NoI7/hq48Q8T4RBoFd1IvCc7FwsDEM3jGwF/BVZH yneFFCJ2M9MVRi4gjMDwt0lYqW0s0uvgB+pKBSCG7CirCM5bylfZk8tm6 v2UAGCv3gft3KDskABQlmlNCSwGEUyPDHCd3aG4Gq2Z4/W3hyncnnIvHA DKV77aoou9Iqu1OcZVOgcqMjxfPaZiB6EOQFuMcSBb7w7X5Erdtwfhg2d NL5GQ4iC4UweUK6ZBTHblEkft8KRoSA2jin97hP526QKCZtq6CTKGRwZu 1BiOhukryPLcH47hmsEnCvypckVoqtxqp5ddf0DCnHrJ704zngcgr09pz w==; X-IronPort-AV: E=McAfee;i="6500,9779,10477"; a="386464418" X-IronPort-AV: E=Sophos;i="5.93,335,1654585200"; d="scan'208";a="386464418" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Sep 2022 19:22:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,335,1654585200"; d="scan'208";a="794910676" Received: from allen-box.sh.intel.com (HELO [10.239.159.48]) ([10.239.159.48]) by orsmga005.jf.intel.com with ESMTP; 21 Sep 2022 19:22:42 -0700 Message-ID: <055d057e-0074-9164-8958-c892c53361b8@linux.intel.com> Date: Thu, 22 Sep 2022 10:16:46 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH v4 5/6] iommu: Use EINVAL for incompatible device/domain in ->attach_dev Content-Language: en-US To: Nicolin Chen , joro@8bytes.org, suravee.suthikulpanit@amd.com, will@kernel.org, robin.murphy@arm.com, robdclark@gmail.com, dwmw2@infradead.org, agross@kernel.org, bjorn.andersson@linaro.org, matthias.bgg@gmail.com, orsonzhai@gmail.com, baolin.wang@linux.alibaba.com, zhang.lyra@gmail.com, jean-philippe@linaro.org, sricharan@codeaurora.org References: <4469b88b4460fc230b8c394f806c134e627aa5bd.1663744983.git.nicolinc@nvidia.com> From: Baolu Lu In-Reply-To: <4469b88b4460fc230b8c394f806c134e627aa5bd.1663744983.git.nicolinc@nvidia.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220921_192251_646070_BE5C4AA6 X-CRM114-Status: GOOD ( 24.53 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: quic_saipraka@quicinc.com, konrad.dybcio@somainline.org, virtualization@lists.linux-foundation.org, thierry.reding@gmail.com, jon@solid-run.com, jonathanh@nvidia.com, iommu@lists.linux.dev, yong.wu@mediatek.com, jgg@nvidia.com, yangyingliang@huawei.com, kevin.tian@intel.com, linux-arm-msm@vger.kernel.org, christophe.jaillet@wanadoo.fr, thunder.leizhen@huawei.com, linux-tegra@vger.kernel.org, tglx@linutronix.de, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, shameerali.kolothum.thodi@huawei.com, linux-mediatek@lists.infradead.org, baolu.lu@linux.intel.com Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On 9/21/22 4:23 PM, Nicolin Chen wrote: > Following the new rules in include/linux/iommu.h kdocs, update all drivers > ->attach_dev callback functions to return EINVAL in the failure paths that > are related to domain incompatibility. > > Also, drop adjacent error prints to prevent a kernel log spam. > > Signed-off-by: Nicolin Chen > --- > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 11 +---------- > drivers/iommu/arm/arm-smmu/arm-smmu.c | 3 --- > drivers/iommu/arm/arm-smmu/qcom_iommu.c | 7 +------ > drivers/iommu/intel/iommu.c | 10 +++------- > drivers/iommu/ipmmu-vmsa.c | 2 -- > drivers/iommu/omap-iommu.c | 2 +- > drivers/iommu/sprd-iommu.c | 4 +--- > drivers/iommu/tegra-gart.c | 2 +- > drivers/iommu/virtio-iommu.c | 3 +-- > 9 files changed, 9 insertions(+), 35 deletions(-) > > diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > index d32b02336411..f96f8aad8280 100644 > --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > @@ -2429,23 +2429,14 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) > goto out_unlock; > } > } else if (smmu_domain->smmu != smmu) { > - dev_err(dev, > - "cannot attach to SMMU %s (upstream of %s)\n", > - dev_name(smmu_domain->smmu->dev), > - dev_name(smmu->dev)); > - ret = -ENXIO; > + ret = -EINVAL; > goto out_unlock; > } else if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1 && > master->ssid_bits != smmu_domain->s1_cfg.s1cdmax) { > - dev_err(dev, > - "cannot attach to incompatible domain (%u SSID bits != %u)\n", > - smmu_domain->s1_cfg.s1cdmax, master->ssid_bits); > ret = -EINVAL; > goto out_unlock; > } else if (smmu_domain->stage == ARM_SMMU_DOMAIN_S1 && > smmu_domain->stall_enabled != master->stall_enabled) { > - dev_err(dev, "cannot attach to stall-%s domain\n", > - smmu_domain->stall_enabled ? "enabled" : "disabled"); > ret = -EINVAL; > goto out_unlock; > } > diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu.c b/drivers/iommu/arm/arm-smmu/arm-smmu.c > index dfa82df00342..dbd12da31707 100644 > --- a/drivers/iommu/arm/arm-smmu/arm-smmu.c > +++ b/drivers/iommu/arm/arm-smmu/arm-smmu.c > @@ -1167,9 +1167,6 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) > * different SMMUs. > */ > if (smmu_domain->smmu != smmu) { > - dev_err(dev, > - "cannot attach to SMMU %s whilst already attached to domain on SMMU %s\n", > - dev_name(smmu_domain->smmu->dev), dev_name(smmu->dev)); > ret = -EINVAL; > goto rpm_put; > } > diff --git a/drivers/iommu/arm/arm-smmu/qcom_iommu.c b/drivers/iommu/arm/arm-smmu/qcom_iommu.c > index 17235116d3bb..37c5ddc212c1 100644 > --- a/drivers/iommu/arm/arm-smmu/qcom_iommu.c > +++ b/drivers/iommu/arm/arm-smmu/qcom_iommu.c > @@ -381,13 +381,8 @@ static int qcom_iommu_attach_dev(struct iommu_domain *domain, struct device *dev > * Sanity check the domain. We don't support domains across > * different IOMMUs. > */ > - if (qcom_domain->iommu != qcom_iommu) { > - dev_err(dev, "cannot attach to IOMMU %s while already " > - "attached to domain on IOMMU %s\n", > - dev_name(qcom_domain->iommu->dev), > - dev_name(qcom_iommu->dev)); > + if (qcom_domain->iommu != qcom_iommu) > return -EINVAL; > - } > > return 0; > } > diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c > index 1f2cd43cf9bc..51ef42b1bd4e 100644 > --- a/drivers/iommu/intel/iommu.c > +++ b/drivers/iommu/intel/iommu.c > @@ -4158,19 +4158,15 @@ static int prepare_domain_attach_device(struct iommu_domain *domain, > return -ENODEV; > > if (dmar_domain->force_snooping && !ecap_sc_support(iommu->ecap)) > - return -EOPNOTSUPP; > + return -EINVAL; > > /* check if this iommu agaw is sufficient for max mapped address */ > addr_width = agaw_to_width(iommu->agaw); > if (addr_width > cap_mgaw(iommu->cap)) > addr_width = cap_mgaw(iommu->cap); > > - if (dmar_domain->max_addr > (1LL << addr_width)) { > - dev_err(dev, "%s: iommu width (%d) is not " > - "sufficient for the mapped address (%llx)\n", > - __func__, addr_width, dmar_domain->max_addr); > - return -EFAULT; > - } > + if (dmar_domain->max_addr > (1LL << addr_width)) > + return -EINVAL; > dmar_domain->gaw = addr_width; > > /* > diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c > index 1d42084d0276..f5217a4cb9b3 100644 > --- a/drivers/iommu/ipmmu-vmsa.c > +++ b/drivers/iommu/ipmmu-vmsa.c > @@ -628,8 +628,6 @@ static int ipmmu_attach_device(struct iommu_domain *io_domain, > * Something is wrong, we can't attach two devices using > * different IOMMUs to the same domain. > */ > - dev_err(dev, "Can't attach IPMMU %s to domain on IPMMU %s\n", > - dev_name(mmu->dev), dev_name(domain->mmu->dev)); > ret = -EINVAL; > } else > dev_info(dev, "Reusing IPMMU context %u\n", domain->context_id); > diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c > index 447e40d55918..be12f49140c7 100644 > --- a/drivers/iommu/omap-iommu.c > +++ b/drivers/iommu/omap-iommu.c > @@ -1472,7 +1472,7 @@ omap_iommu_attach_dev(struct iommu_domain *domain, struct device *dev) > /* only a single client device can be attached to a domain */ > if (omap_domain->dev) { > dev_err(dev, "iommu domain is already attached\n"); > - ret = -EBUSY; > + ret = -EINVAL; > goto out; > } > > diff --git a/drivers/iommu/sprd-iommu.c b/drivers/iommu/sprd-iommu.c > index 511959c8a14d..945576039c9e 100644 > --- a/drivers/iommu/sprd-iommu.c > +++ b/drivers/iommu/sprd-iommu.c > @@ -237,10 +237,8 @@ static int sprd_iommu_attach_device(struct iommu_domain *domain, > struct sprd_iommu_domain *dom = to_sprd_domain(domain); > size_t pgt_size = sprd_iommu_pgt_size(domain); > > - if (dom->sdev) { > - pr_err("There's already a device attached to this domain.\n"); > + if (dom->sdev) > return -EINVAL; > - } > > dom->pgt_va = dma_alloc_coherent(sdev->dev, pgt_size, &dom->pgt_pa, GFP_KERNEL); > if (!dom->pgt_va) > diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c > index e5ca3cf1a949..ed53279d1106 100644 > --- a/drivers/iommu/tegra-gart.c > +++ b/drivers/iommu/tegra-gart.c > @@ -112,7 +112,7 @@ static int gart_iommu_attach_dev(struct iommu_domain *domain, > spin_lock(&gart->dom_lock); > > if (gart->active_domain && gart->active_domain != domain) { > - ret = -EBUSY; > + ret = -EINVAL; > } else if (dev_iommu_priv_get(dev) != domain) { > dev_iommu_priv_set(dev, domain); > gart->active_domain = domain; > diff --git a/drivers/iommu/virtio-iommu.c b/drivers/iommu/virtio-iommu.c > index 4c652773fd6c..87128266b6e3 100644 > --- a/drivers/iommu/virtio-iommu.c > +++ b/drivers/iommu/virtio-iommu.c > @@ -733,8 +733,7 @@ static int viommu_attach_dev(struct iommu_domain *domain, struct device *dev) > */ > ret = viommu_domain_finalise(vdev, domain); > } else if (vdomain->viommu != vdev->viommu) { > - dev_err(dev, "cannot attach to foreign vIOMMU\n"); > - ret = -EXDEV; > + ret = -EINVAL; > } > mutex_unlock(&vdomain->mutex); > For iommu/vt-d changes: Reviewed-by: Lu Baolu Best regards, baolu _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel