Received: by 2002:ab2:1689:0:b0:1f7:5705:b850 with SMTP id d9csp1658247lqa; Mon, 29 Apr 2024 15:27:01 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCVBBteLodsFnkXbcLsw2v8jhSXYvVzygzCPIaJuVWi+HC05jBplbrwTb+9CfOre6zKsCRdyZG+OkDzvWRbkLS3N3qlsAS/ifO1UmM/uBQ== X-Google-Smtp-Source: AGHT+IHyptv5EK5+fePw6i2nFLkyJVoQSYF26WuiDBqbWOrCij2Z6WMyKLLHFk+eAKOQSsovTWux X-Received: by 2002:a17:906:eca5:b0:a52:699e:f2b6 with SMTP id qh5-20020a170906eca500b00a52699ef2b6mr9137456ejb.74.1714429621040; Mon, 29 Apr 2024 15:27:01 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1714429621; cv=pass; d=google.com; s=arc-20160816; b=Exd/nqA0Bq1JdJnAMMOUEhlQLfdbqD46iDNMsl0lHiTRqWqtDW3eNDxYbVo9UVZywp nvuSylpRxqT/vZ/61T/r+ZSasaAq38ffofRpd2vjKOmyXKzgSeOL/SAUAEam8lRuVdRz HOFQEPZYB8jzHy+To82ItfWFj8xMV/nXXyNib+YdwcaCEPJCpeiTFmFsHRTMvofiWQ4g 96MTRcpFKaO++hSvloyTVDW05YNMjCmoJFvpdqbEifYTroxS1YVLfSBy2bAuW+urwHvd xlgYKEqU5ZIAAFQYTwvkhUA3X76dMpGBenQT0Wdy4dll4ewmq2sCsUGxGK68NmlHQRAH bx0Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:in-reply-to:content-language:from :references:cc:to:subject:user-agent:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:date:message-id; bh=BpCB3L5dn27A7K0u+NEQWUavgnPF98ngC1KupmvOu/0=; fh=uX/sYi5LXuwDo6ks/zfJscuHTOyB8O651oWeP+mSawU=; b=oxTC4BU5wG4AejavGipU2rM0tXhr9UtTFMSVgYcyk7aPGGCsH82IgRG9FhFiZP/w0Y q2t6QHTkoXO+rhC+c1gXVrXyNepQIEGrTXiJBspTTWBhnUul+/YgnsjgUSwtbJP1sUBT SiAQ95BqrlrT7820LmF52k2djOUTellGa9taHjcWWV7o369sL595lHXCXtaAfNo02OkY Xxrkso1Zy0LYLC2lP45q8THv3P2kH/9c6qX7CI5UwNZKsHEe8jvSBGpuwsNHdOPNGqLJ mPAv8Esn3hUDahJesdMcqxu+8kcsCTl4Av5nN5MgFJhX7hx7cE5TAZVI3G9b1aZbea51 3KkA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=arm.com dmarc=pass fromdomain=arm.com); spf=pass (google.com: domain of linux-kernel+bounces-163100-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-163100-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id ho34-20020a1709070ea200b00a5901c4a98esi1565124ejc.201.2024.04.29.15.27.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Apr 2024 15:27:01 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-163100-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=arm.com dmarc=pass fromdomain=arm.com); spf=pass (google.com: domain of linux-kernel+bounces-163100-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-163100-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 986DB1F22556 for ; Mon, 29 Apr 2024 22:27:00 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5FFB0194C74; Mon, 29 Apr 2024 22:26:51 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id BEF5C82D90; Mon, 29 Apr 2024 22:26:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714429610; cv=none; b=E+fSMgTBb8mloj61MZpxD3E9P/mpBGuGeZIQ4yYFKZa/Rty0/e3ugMeVz8ubo5oPUktDhXQLQsSuf2Aucf1Dve/RzgjcSz5yQyCmnkkzVyYQPq2H7XgIs8ScNFb+3HZE2hYIVBfUSXb86oUoHmXKhdpxEOa/G4QeIMoC0pmeCao= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714429610; c=relaxed/simple; bh=ObXrOa0TOunXJEpPHw7bthYmANYOzksEBgD7Tq7f27U=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=pXJl9YtI1gLN9EfUZzYMhSqaPtr7blIxeE4UBgRmNj+wgZeF5AAs1/192sTZFk/7sGpdgYcFnIDXwMnFtKN+JWhrswiQ406GKg/EfpjFuCKBAusEwunqMGdrtAkdq2iDf1U1bSNW+sn4e1sup0ygI5RafnPG0TqnU+iQlWBPnxU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com 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 23AB72F4; Mon, 29 Apr 2024 15:27:13 -0700 (PDT) Received: from [10.57.2.57] (unknown [10.57.2.57]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 3CACA3F762; Mon, 29 Apr 2024 15:26:40 -0700 (PDT) Message-ID: <2662a5ba-3115-4fe5-9cec-bff71f703a82@arm.com> Date: Mon, 29 Apr 2024 23:26:31 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 6/7] iommu/dma: Centralise iommu_setup_dma_ops() To: Dmitry Baryshkov Cc: Joerg Roedel , Christoph Hellwig , Vineet Gupta , Russell King , Catalin Marinas , Will Deacon , Huacai Chen , WANG Xuerui , Thomas Bogendoerfer , Paul Walmsley , Palmer Dabbelt , Albert Ou , Lorenzo Pieralisi , Hanjun Guo , Sudeep Holla , "K. Y. Srinivasan" , Haiyang Zhang , Wei Liu , Dexuan Cui , Suravee Suthikulpanit , David Woodhouse , Lu Baolu , Niklas Schnelle , Matthew Rosato , Gerald Schaefer , Jean-Philippe Brucker , Rob Herring , Frank Rowand , Marek Szyprowski , Jason Gunthorpe , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-acpi@vger.kernel.org, iommu@lists.linux.dev, devicetree@vger.kernel.org, Jason Gunthorpe References: From: Robin Murphy Content-Language: en-GB In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 2024-04-29 5:31 pm, Dmitry Baryshkov wrote: > On Fri, Apr 19, 2024 at 05:54:45PM +0100, Robin Murphy wrote: >> It's somewhat hard to see, but arm64's arch_setup_dma_ops() should only >> ever call iommu_setup_dma_ops() after a successful iommu_probe_device(), >> which means there should be no harm in achieving the same order of >> operations by running it off the back of iommu_probe_device() itself. >> This then puts it in line with the x86 and s390 .probe_finalize bodges, >> letting us pull it all into the main flow properly. As a bonus this lets >> us fold in and de-scope the PCI workaround setup as well. >> >> At this point we can also then pull the call up inside the group mutex, >> and avoid having to think about whether iommu_group_store_type() could >> theoretically race and free the domain if iommu_setup_dma_ops() ran just >> *before* iommu_device_use_default_domain() claims it... Furthermore we >> replace one .probe_finalize call completely, since the only remaining >> implementations are now one which only needs to run once for the initial >> boot-time probe, and two which themselves render that path unreachable. >> >> This leaves us a big step closer to realistically being able to unpick >> the variety of different things that iommu_setup_dma_ops() has been >> muddling together, and further streamline iommu-dma into core API flows >> in future. >> >> Reviewed-by: Lu Baolu # For Intel IOMMU >> Reviewed-by: Jason Gunthorpe >> Tested-by: Hanjun Guo >> Signed-off-by: Robin Murphy >> --- >> v2: Shuffle around to make sure the iommu_group_do_probe_finalize() case >> is covered as well, with bonus side-effects as above. >> v3: *Really* do that, remembering the other two probe_finalize sites too. >> --- >> arch/arm64/mm/dma-mapping.c | 2 -- >> drivers/iommu/amd/iommu.c | 8 -------- >> drivers/iommu/dma-iommu.c | 18 ++++++------------ >> drivers/iommu/dma-iommu.h | 14 ++++++-------- >> drivers/iommu/intel/iommu.c | 7 ------- >> drivers/iommu/iommu.c | 20 +++++++------------- >> drivers/iommu/s390-iommu.c | 6 ------ >> drivers/iommu/virtio-iommu.c | 10 ---------- >> include/linux/iommu.h | 7 ------- >> 9 files changed, 19 insertions(+), 73 deletions(-) > > This patch breaks UFS on Qualcomm SC8180X Primus platform: > > > [ 3.846856] arm-smmu 15000000.iommu: Unhandled context fault: fsr=0x402, iova=0x1032db3e0, fsynr=0x130000, cbfrsynra=0x300, cb=4 Hmm, a context fault implies that the device did get attached to a DMA domain, thus has successfully been through __iommu_probe_device(), yet somehow still didn't get the right DMA ops (since that "IOVA" looks more like a PA to me). Do you see the "Adding to IOMMU group..." message for this device, and/or any other relevant messages or errors before this point? I'm guessing there's a fair chance probe deferral might be involved as well. I'd like to understand what path(s) this ends up taking through __iommu_probe_device() and of_dma_configure(), or at least the number and order of probe attempts between the UFS and SMMU drivers. I'll stare at the code in the morning and see if I can spot any overlooked ways in which what I think might be happening could happen, but any more info to help narrow it down would be much appreciated. Thanks, Robin. > [ 3.846880] ufshcd-qcom 1d84000.ufshc: ufshcd_check_errors: saved_err 0x20000 saved_uic_err 0x0 > [ 3.846929] host_regs: 00000000: 1587031f 00000000 00000300 00000000 > [ 3.846935] host_regs: 00000010: 01000000 00010217 00000000 00000000 > [ 3.846941] host_regs: 00000020: 00000000 00070ef5 00000000 00000000 > [ 3.846946] host_regs: 00000030: 0000000f 00000001 00000000 00000000 > [ 3.846951] host_regs: 00000040: 00000000 00000000 00000000 00000000 > [ 3.846956] host_regs: 00000050: 032db000 00000001 00000000 00000000 > [ 3.846962] host_regs: 00000060: 00000000 80000000 00000000 00000000 > [ 3.846967] host_regs: 00000070: 032dd000 00000001 00000000 00000000 > [ 3.846972] host_regs: 00000080: 00000000 00000000 00000000 00000000 > [ 3.846977] host_regs: 00000090: 00000016 00000000 00000000 0000000c > [ 3.847074] ufshcd-qcom 1d84000.ufshc: ufshcd_err_handler started; HBA state eh_fatal; powered 1; shutting down 0; saved_err = 131072; saved_uic_err = 0; force_reset = 0 > [ 4.406550] ufshcd-qcom 1d84000.ufshc: ufshcd_verify_dev_init: NOP OUT failed -11 > [ 4.417953] ufshcd-qcom 1d84000.ufshc: ufshcd_async_scan failed: -11 >