On Mon, Jun 01, 2026 at 01:35:16PM +0100, Will Deacon wrote:
On Tue, May 05, 2026 at 12:27:36AM +0000, Samiullah Khawaja wrote:diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c index ec887f443741..c2b98f91900a 100644 --- a/kernel/dma/direct.c +++ b/kernel/dma/direct.c @@ -6,6 +6,8 @@ */ #include <linux/memblock.h> /* for max_pfn */ #include <linux/export.h> +#include <linux/kexec_handover.h> +#include <linux/kho/abi/dma_alloc.h> #include <linux/mm.h> #include <linux/dma-map-ops.h> #include <linux/scatterlist.h> @@ -307,6 +309,167 @@ void *dma_direct_alloc(struct device *dev, size_t size, return NULL; }+#ifdef CONFIG_DMA_LIVEUPDATE +int dma_direct_preserve_allocation(struct device *dev, void *cpu_addr, + size_t size, dma_addr_t dma_handle, + unsigned long attrs, u64 *state) +{ + struct dma_alloc_ser *ser; + int ret; + + if (!kho_is_enabled()) + return -EOPNOTSUPP; + + if (IS_ENABLED(CONFIG_DMA_CMA)) + return -EOPNOTSUPP;Hmm, it seems a bit overkill to do this just because CMA is compiled in, especially as it's user-selectable in kconfig. Maybe you need to iterate over the CMA areas using cma_for_each_area(), similarly to how you do with the pools?
Agreed. So basically return error if the range belongs to one of the CMAs. I will update this.
Will
