[PATCH 07/10] powerpc: Implement kmap_atomic_pfn on powerpc

Dale Farnsworth dale at farnsworth.org
Wed Dec 19 03:20:32 EST 2007


On Sat, Dec 15, 2007 at 05:17:41PM +1100, Benjamin Herrenschmidt wrote:
> 
> 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.

Kumar, are you close to posting something that would make the
patch below unnecessary (or change it significantly)?  If so,
I'll hold off.

-Dale

> > 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