[PATCH v3 07/13] mm: introduce io_remap_pfn_range_[prepare, complete]()

Jason Gunthorpe jgg at nvidia.com
Tue Sep 16 10:19:30 PDT 2025


On Tue, Sep 16, 2025 at 03:11:53PM +0100, Lorenzo Stoakes wrote:
>  
> -int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long vaddr,
> -		unsigned long pfn, unsigned long size, pgprot_t prot)
> +static unsigned long calc_pfn(unsigned long pfn, unsigned long size)
>  {
>  	phys_addr_t phys_addr = fixup_bigphys_addr(pfn << PAGE_SHIFT, size);
>  
> -	return remap_pfn_range(vma, vaddr, phys_addr >> PAGE_SHIFT, size, prot);
> +	return phys_addr >> PAGE_SHIFT;
> +}

Given you changed all of these to add a calc_pfn why not make that
the arch abstraction?

static unsigned long arch_io_remap_remap_pfn(unsigned long pfn, unsigned long size)
{
..
}
#define arch_io_remap_remap_pfn arch_io_remap_remap_pfn

[..]

#ifndef arch_io_remap_remap_pfn
static inline unsigned long arch_io_remap_remap_pfn(unsigned long pfn, unsigned long size)
{
	return pfn;
}
#endif

static inline void io_remap_pfn_range_prepare(struct vm_area_desc *desc, unsigned long pfn,
	unsigned long size)
{
	return remap_pfn_range_prepare(desc, arch_io_remap_remap_pfn(pfn));
}

etc

Removes alot of the maze here.

Jason



More information about the kexec mailing list