From nobody Mon Feb 9 13:58:32 2026 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 57C022C0287 for ; Fri, 19 Dec 2025 05:37:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766122669; cv=none; b=hzgLZdvG3p0gpQedNtpc4RS6IEEzFOY00+Gtx7EtIYpLz0BN4Nn17lHg0EWksQprCLdVR+MqMmQYDed4YR9o9RpNrcmjfrRJiDs5DSHJVow72nviX2x5Db8K9Dsaammi9YjGoVCGNkkpMqpZJ1X8ILNiyn+MFSsNML2XMIygAOw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766122669; c=relaxed/simple; bh=+jyi5gd3AIMhjz4J7lVMgs4zhdEBtbx6wjVxjxON7rU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TKMibFWy8kdkgIpi/eLucH8z8qP+b1ADvtGByRjH0nbajMv3G9QEA/N5l3Wv5HH1YMtqOhQgMe4XT5aGlGp2CW/E0xeFY8Ru8a8FTYnq2jwNZnPiyQq5/sSAzu6azsL0ht2NDGHdMAb8NcxFceCOfCuanKEIx7HYbt8Up8IZv8w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=G3e+qvQj; arc=none smtp.client-ip=209.85.214.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="G3e+qvQj" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-2a0bb2f093aso14246465ad.3 for ; Thu, 18 Dec 2025 21:37:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766122667; x=1766727467; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cJO21xU2H+bRt1oLrdkCFshk8QlbaOYxvZtIbsr9n2g=; b=G3e+qvQjJAxEFjIJjHosQA29F7sciKx6YSbgiWi7f+buj3cLLzldEUg9XepA7GlWcE D4cc9efxDFZQPRQRUaAk+s6Sox9kUWAL2pt++3b75Ju5KVaTfUHFj8wjRu1SNPK3ePxN w1Lyq8WwSGzS49w4PqzVKfAc/zqb6CSo2cJAdI81g1JJY2QbQ9UxACPiWkthD6B2zSR9 Yhd1AZUXTT16SDsV5hMOxJm7kAnmYvvVxbwYAK9aMe72f+1c2YtlEXjenYfoNI77LmDB Sxzdn7xb4uSHUJYXFymiT2J1Sx4UScbjfa1kyfkEkAfA2tUJoiXmBxxow0HsFXlQIWJJ D0lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766122667; x=1766727467; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=cJO21xU2H+bRt1oLrdkCFshk8QlbaOYxvZtIbsr9n2g=; b=TOGBgA2bpnqJMwlNK2toQzRMmQFvH0f1+1bTwmlcqabioY2vymNqLEGJovp8P1mjQX 6PGKMoztrCBJ3YAm51dIGQuRG6WT4dbgK0w558WoirhgTx+rjaHtetnSC+R1HbrhBm5+ W8856vlPHem8K+54iO9KxBkwKRUfRMj2GrGGeCbagGvoycqFHvpD9BnyF8I3kj0T0YH7 T5H98hTCfJ3FFSbCb1/RKY3WxrLyMI1ndKJBxYs7AaG1MZYcRDRmD8RP8p/hY0GvfmvQ 8ZuWGXlX6NkKOOT7oOwmrTXBBUApV/pMb1Vl79i7dyZsS+qKyUV6cPLwNw60JUweEnLa EiSg== X-Forwarded-Encrypted: i=1; AJvYcCWJjYzxaw8biF79kQ/57nNsxTmWHhNgh2d/1a2fQ2+MarRBKaEUOkUSaXL/ef0gvrSyGhc/4sgAL5FOv9E=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+j63KTCW4q/NGj1KHtAWA9SdUqzre6meB4nWZzp1gddjf6PNO Kiz3eg4GoP3UVKY4fS8B4RM3MCTyeP3nJyta7f0s9ggOfmaKOJ+wo2fk X-Gm-Gg: AY/fxX64u5FuVeZ23FLiw9jZtQOquO+IFAk5XzP5Twn41kSffDhp8bB9TMc4ReP6u6w jNRPZYqVuaxE5Effo70N+VFWbxP1hIbUrBmdKdCkx5hYbroUqPBwIuLXxQIoMVkbsS3ZYUzWRF0 NiYHJ3zTQmn/5OxFAWMAHUEnqRmneKTHy4O6oL4AxTcUiIT6DGi6nXELWVC03vNwHrHnjp4CAxC aWoHeUHPVrOr3tp3PJQIELx9eMdVETdaZwWpQyijCXQ+G/tMjXd29AH17Q+r6rh7qh77sAn4Fsc i3hz5mBm5uzKzWbGMgSMtrQE4l6SJNZPx7zmGE6492MTWgzfRO86D4DeQrZklT9QdHr+jLtNCkG 2/pvkKkRhnO8x00o1MFEHc3f9XfSYDYKvBGSA4xTQMzxpS7RgqKrCObiHrq7ovmMjoxFV1xSyo0 SxN2MpnWeuCEMlNvdKWRU= X-Google-Smtp-Source: AGHT+IGDMYqEG2oDqA96bVWjmxK1/Wde940fAntilRs7/x6PwBG31jTbdPi/FUUfggX13zuKgo2NiQ== X-Received: by 2002:a17:903:230c:b0:29d:a26c:34b6 with SMTP id d9443c01a7336-2a2f293d4f7mr14844825ad.50.1766122667279; Thu, 18 Dec 2025 21:37:47 -0800 (PST) Received: from Barrys-MBP.hub ([47.72.129.29]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3d4d895sm9930215ad.54.2025.12.18.21.37.41 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 18 Dec 2025 21:37:46 -0800 (PST) From: Barry Song <21cnbao@gmail.com> To: catalin.marinas@arm.com, m.szyprowski@samsung.com, robin.murphy@arm.com, will@kernel.org Cc: ada.coupriediaz@arm.com, anshuman.khandual@arm.com, ardb@kernel.org, iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, maz@kernel.org, ryan.roberts@arm.com, surenb@google.com, v-songbaohua@oppo.com, zhengtangquan@oppo.com, Joerg Roedel Subject: [PATCH RFC 6/6] dma-iommu: Allow DMA sync batching for IOVA link/unlink Date: Fri, 19 Dec 2025 13:36:58 +0800 Message-Id: <20251219053658.84978-7-21cnbao@gmail.com> X-Mailer: git-send-email 2.39.3 (Apple Git-146) In-Reply-To: <20251219053658.84978-1-21cnbao@gmail.com> References: <20251219053658.84978-1-21cnbao@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Barry Song Apply batched DMA synchronization to __dma_iova_link() and iommu_dma_iova_unlink_range_slow(). For multiple sync_dma_for_device() and sync_dma_for_cpu() calls, we only need to wait once for the completion of all sync operations, rather than waiting for each one individually. I do not have the hardware to test this, so it is marked as RFC. I would greatly appreciate it if someone could test it. Suggested-by: Marek Szyprowski Cc: Robin Murphy Cc: Joerg Roedel Cc: Will Deacon Signed-off-by: Barry Song --- drivers/iommu/dma-iommu.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index c92088855450..95432bdc364f 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -1837,7 +1837,7 @@ static int __dma_iova_link(struct device *dev, dma_ad= dr_t addr, int prot =3D dma_info_to_prot(dir, coherent, attrs); =20 if (!coherent && !(attrs & (DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_MMIO))) - arch_sync_dma_for_device(phys, size, dir); + arch_sync_dma_for_device_batch_add(phys, size, dir); =20 return iommu_map_nosync(iommu_get_dma_domain(dev), addr, phys, size, prot, GFP_ATOMIC); @@ -1980,6 +1980,8 @@ int dma_iova_sync(struct device *dev, struct dma_iova= _state *state, dma_addr_t addr =3D state->addr + offset; size_t iova_start_pad =3D iova_offset(iovad, addr); =20 + if (!dev_is_dma_coherent(dev)) + arch_sync_dma_batch_flush(); return iommu_sync_map(domain, addr - iova_start_pad, iova_align(iovad, size + iova_start_pad)); } @@ -1993,6 +1995,8 @@ static void iommu_dma_iova_unlink_range_slow(struct d= evice *dev, struct iommu_dma_cookie *cookie =3D domain->iova_cookie; struct iova_domain *iovad =3D &cookie->iovad; size_t iova_start_pad =3D iova_offset(iovad, addr); + bool need_sync_dma =3D !dev_is_dma_coherent(dev) && + !(attrs & (DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_MMIO)); dma_addr_t end =3D addr + size; =20 do { @@ -2007,8 +2011,7 @@ static void iommu_dma_iova_unlink_range_slow(struct d= evice *dev, len =3D min_t(size_t, end - addr, iovad->granule - iova_start_pad); =20 - if (!dev_is_dma_coherent(dev) && - !(attrs & (DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_MMIO))) + if (need_sync_dma) arch_sync_dma_for_cpu(phys, len, dir); =20 swiotlb_tbl_unmap_single(dev, phys, len, dir, attrs); @@ -2016,6 +2019,9 @@ static void iommu_dma_iova_unlink_range_slow(struct d= evice *dev, addr +=3D len; iova_start_pad =3D 0; } while (addr < end); + + if (need_sync_dma) + arch_sync_dma_batch_flush(); } =20 static void __iommu_dma_iova_unlink(struct device *dev, --=20 2.39.3 (Apple Git-146)