[PATCH 07/10] powerpc: Implement kmap_atomic_pfn on powerpc
Benjamin Herrenschmidt
benh at kernel.crashing.org
Sat Dec 15 17:17:41 EST 2007
On Thu, 2007-11-22 at 08:46 -0700, Dale Farnsworth wrote:
> This is needed for the ppc32 /dev/oldmem driver of crash dump.
Kumar's working (well, last I heard he was) on a fixmap mechanism
so we can do that sort of thing without CONFIG_HIGHMEM, you may
want to sync with him here, that would allow to shrink the crash
kernel by not having highmem selected.
Cheers,
Ben.
> Signed-off-by: Dale Farnsworth <dale at farnsworth.org>
> ---
> include/asm-powerpc/highmem.h | 18 ++++++++++++++++++
> 1 files changed, 18 insertions(+), 0 deletions(-)
>
> diff --git a/include/asm-powerpc/highmem.h b/include/asm-powerpc/highmem.h
> index f7b21ee..88d9e05 100644
> --- a/include/asm-powerpc/highmem.h
> +++ b/include/asm-powerpc/highmem.h
> @@ -117,6 +117,24 @@ static inline void kunmap_atomic(void *kvaddr, enum km_type type)
> pagefault_enable();
> }
>
> +/* This is the same as kmap_atomic() but can map memory that doesn't
> + * have a struct page associated with it.
> + */
> +static inline void *kmap_atomic_pfn(unsigned long pfn, enum km_type type)
> +{
> + unsigned int idx;
> + unsigned long vaddr;
> +
> + pagefault_disable();
> +
> + idx = type + KM_TYPE_NR * smp_processor_id();
> + vaddr = KMAP_FIX_BEGIN + idx * PAGE_SIZE;
> + set_pte_at(&init_mm, vaddr, kmap_pte+idx, pfn_pte(pfn, kmap_prot));
> + flush_tlb_page(NULL, vaddr);
> +
> + return (void*) vaddr;
> +}
> +
> static inline struct page *kmap_atomic_to_page(void *ptr)
> {
> unsigned long idx, vaddr = (unsigned long) ptr;
More information about the Linuxppc-dev
mailing list