From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (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 3736E3A7858 for ; Wed, 8 Jul 2026 23:48:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783554539; cv=none; b=KtSQFLg9meCszaLcXBioVMxW0wZEVdTGx1zOcm0BwNac2dwk94gClZyrYZKMLkagCXiz1cmayHWQKP/WBVVaZ9HC+DTUJQSPn5KcvIdHN/h3doanR5IhsNC9cCBsG/PD0+3tU7xAY5etK2vxuEJ4PHB5OJi5GC2qTrji3KK5ZNE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783554539; c=relaxed/simple; bh=DEX0yqNi4VHc6r6nOhjQTu2pYp/qtE5fRwU+aO1mx58=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Ef/bsMX1WRpqwXtjDfJ5LVcZeoUW/ypfjrsjH9AkbuvumVwRFRjpHriyH3Kj1kNPKkT15A571rY2D/yTTSywm2hl0CncJIF1twpBSIXrAFRYX+SzkI1kAmytqOKY9WuJ3fBcKmD5ZKuqNiag/n4I/KmkRF9I/0dskIHK5ruuQIk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--skhawaja.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=jbkBmNhe; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--skhawaja.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="jbkBmNhe" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c85a298cd62so1243636a12.0 for ; Wed, 08 Jul 2026 16:48:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1783554538; x=1784159338; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=lkcC1WuBJfDnOUDpo4VCYaNuz/sum/AUORjsX5C4m/M=; b=jbkBmNheAKSBHkXrynU//RdtSBoOmIkU8cUgbGNGBSVibDIc7yMKanszR+VkoCBBdy 0bQfPiHj/SI+Yjicb3tQ6tedBXVftHDqdxZHJhyD8JCdwXiIEGGYPStM4InYMj8EB0zr DtuxCdlL1MQwtODLP92NWfW9cr8DKsSVADE1HlfRdrl8YsWzbHQ7tW+wACqLACZQ7gZT VQJjrGEwQMQ7kR7GR+Lr0ZFACTASAJ5GidK6PsbhWTseprK3hfSDJmAGjok7WmIIHG7Y BZt23/LZef5UG24/ysYepWSDwfiZh7boRtlGdxjrE8szMnajbbDpXsg9jdfcPbAOcENy QGZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783554538; x=1784159338; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=lkcC1WuBJfDnOUDpo4VCYaNuz/sum/AUORjsX5C4m/M=; b=EFBw0qy3XSjTcylGQmm7xjMKzbNticnarh34/DleACqB7X7m+DISm0PDS++2FXfL5V RbRbDgh2jmJd0ONGBFAvHFg3fyxgJ34jPXkeDupaT+/a7/CK13Ac87uENjeiOyLJAe56 oTaXb7zVF3HwkZ9XDW99+hjP5RJY1ROHUcR0hVDrC2d7JTurLMJzyVtmSENW+SUOPREL ydRtFrtvKDHMLea/XdCpC++dY6hu/gnUnGsKnd4+jvxT4aqUbC2Ear4ySnto6Ka02bTD Icdc/ZGBYeCtL38zw9ygIjjO5LK8SdtDQLGnzLJVfitCvS4s0h9qUcg9smENrpwsdlaI WCFg== X-Forwarded-Encrypted: i=1; AHgh+Ro9iChbOGXDQ5fjrTbvOKXJeYgY4pgxiFFb5nAGd9ROShgdpE81too4kko0qXbd2XEOhwWCyyljdwIL2s0=@vger.kernel.org X-Gm-Message-State: AOJu0YwrfE6mSQiZmbNMdRH6HhACH+q+54FVqNBDAA/g4ticXZbhJEL+ X0UjsvEqB0GHYeXI/jg/yPGBWBI88sc5faWj05bceokgNtaawPihXKXsSgNRpdu1lo0n0VXzcpF tOB8TvMZqNAyxPw== X-Received: from pgbe38.prod.google.com ([2002:a63:5026:0:b0:c99:aff5:7092]) (user=skhawaja job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:e082:b0:3c0:9c19:659f with SMTP id adf61e73a8af0-3c0bd23427fmr5506792637.71.1783554537333; Wed, 08 Jul 2026 16:48:57 -0700 (PDT) Date: Wed, 8 Jul 2026 23:48:47 +0000 In-Reply-To: <20260708234854.4044652-1-skhawaja@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260708234854.4044652-1-skhawaja@google.com> X-Mailer: git-send-email 2.55.0.795.g602f6c329a-goog Message-ID: <20260708234854.4044652-4-skhawaja@google.com> Subject: [RFC PATCH v2 03/10] dma: contiguous: Add API to check if an allocation is from CMA From: Samiullah Khawaja To: Marek Szyprowski , Will Deacon , Jason Gunthorpe Cc: Samiullah Khawaja , Pasha Tatashin , Mike Rapoport , Pratyush Yadav , Alexander Graf , Robin Murphy , Kevin Tian , iommu@lists.linux.dev, kexec@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, David Matlack , Andrew Morton , Pranjal Shrivastava , Vipin Sharma Content-Type: text/plain; charset="UTF-8" Add an API that uses cma_for_each() to check whether a DMA allocation is from a CMA region. Signed-off-by: Samiullah Khawaja --- include/linux/dma-map-ops.h | 6 ++++++ kernel/dma/contiguous.c | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h index 9382785a2faa..9b91c839ceb5 100644 --- a/include/linux/dma-map-ops.h +++ b/include/linux/dma-map-ops.h @@ -106,6 +106,7 @@ struct page *dma_alloc_contiguous(struct device *dev, size_t size, gfp_t gfp); void dma_free_contiguous(struct device *dev, struct page *page, size_t size); void dma_contiguous_early_fixup(phys_addr_t base, unsigned long size); +bool dma_is_from_cma(phys_addr_t phys, size_t size); #else /* CONFIG_DMA_CMA */ static inline struct cma *dev_get_cma_area(struct device *dev) { @@ -145,6 +146,11 @@ static inline void dma_free_contiguous(struct device *dev, struct page *page, { __free_pages(page, get_order(size)); } + +static inline bool dma_is_from_cma(phys_addr_t phys, size_t size) +{ + return false; +} #endif /* CONFIG_DMA_CMA*/ #ifdef CONFIG_DMA_DECLARE_COHERENT diff --git a/kernel/dma/contiguous.c b/kernel/dma/contiguous.c index 03f52bd17120..0b1702bf39ca 100644 --- a/kernel/dma/contiguous.c +++ b/kernel/dma/contiguous.c @@ -130,6 +130,30 @@ struct cma *dev_get_cma_area(struct device *dev) } EXPORT_SYMBOL_GPL(dev_get_cma_area); +struct dma_cma_check_data { + phys_addr_t start; + phys_addr_t end; +}; + +static int dma_cma_check_area(struct cma *cma, void *data) +{ + struct dma_cma_check_data *chk = data; + + if (cma_intersects(cma, chk->start, chk->end)) + return 1; + return 0; +} + +bool dma_is_from_cma(phys_addr_t phys, size_t size) +{ + struct dma_cma_check_data chk = { + .start = phys, + .end = phys + size - 1, + }; + + return cma_for_each_area(dma_cma_check_area, &chk) != 0; +} + #ifdef CONFIG_DMA_NUMA_CMA static struct cma *dma_contiguous_numa_area[MAX_NUMNODES]; -- 2.55.0.795.g602f6c329a-goog