Messages in this thread | | | Date | Thu, 9 Apr 2009 14:46:05 -0400 | From | Mathieu Desnoyers <> | Subject | Re: [BUGFIX][PATCH] x86: fix set_fixmap to use phys_addr_t |
| |
* Masami Hiramatsu (mhiramat@redhat.com) wrote: > Use phys_addr_t for receiving a physical address argument > instead of unsigned long. This allows fixmap to handle > pages higher than 4GB on x86-32. >
You might also want to update arch/x86/mm/ioremap.c:early_set_fixmap() and __early_set_fixmap().
Otherwise it looks good.
Thanks,
Mathieu
> Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com> > Cc: Ingo Molnar <mingo@elte.hu> > Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> > --- > > arch/x86/include/asm/fixmap.h | 4 ++-- > arch/x86/include/asm/paravirt.h | 4 ++-- > arch/x86/mm/pgtable.c | 3 ++- > arch/x86/xen/mmu.c | 2 +- > 4 files changed, 7 insertions(+), 6 deletions(-) > > > diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h > index 81937a5..2d81af3 100644 > --- a/arch/x86/include/asm/fixmap.h > +++ b/arch/x86/include/asm/fixmap.h > @@ -151,11 +151,11 @@ extern pte_t *pkmap_page_table; > > void __native_set_fixmap(enum fixed_addresses idx, pte_t pte); > void native_set_fixmap(enum fixed_addresses idx, > - unsigned long phys, pgprot_t flags); > + phys_addr_t phys, pgprot_t flags); > > #ifndef CONFIG_PARAVIRT > static inline void __set_fixmap(enum fixed_addresses idx, > - unsigned long phys, pgprot_t flags) > + phys_addr_t phys, pgprot_t flags) > { > native_set_fixmap(idx, phys, flags); > } > diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h > index 7727aa8..378e369 100644 > --- a/arch/x86/include/asm/paravirt.h > +++ b/arch/x86/include/asm/paravirt.h > @@ -347,7 +347,7 @@ struct pv_mmu_ops { > /* Sometimes the physical address is a pfn, and sometimes its > an mfn. We can tell which is which from the index. */ > void (*set_fixmap)(unsigned /* enum fixed_addresses */ idx, > - unsigned long phys, pgprot_t flags); > + phys_addr_t phys, pgprot_t flags); > }; > > struct raw_spinlock; > @@ -1432,7 +1432,7 @@ static inline void arch_leave_lazy_mmu_mode(void) > void arch_flush_lazy_mmu_mode(void); > > static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx, > - unsigned long phys, pgprot_t flags) > + phys_addr_t phys, pgprot_t flags) > { > pv_mmu_ops.set_fixmap(idx, phys, flags); > } > diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c > index 7a4d6ee..8e43bdd 100644 > --- a/arch/x86/mm/pgtable.c > +++ b/arch/x86/mm/pgtable.c > @@ -347,7 +347,8 @@ void __native_set_fixmap(enum fixed_addresses idx, pte_t pte) > fixmaps_set++; > } > > -void native_set_fixmap(enum fixed_addresses idx, unsigned long phys, pgprot_t flags) > +void native_set_fixmap(enum fixed_addresses idx, phys_addr_t phys, > + pgprot_t flags) > { > __native_set_fixmap(idx, pfn_pte(phys >> PAGE_SHIFT, flags)); > } > diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c > index db3802f..2a81838 100644 > --- a/arch/x86/xen/mmu.c > +++ b/arch/x86/xen/mmu.c > @@ -1750,7 +1750,7 @@ __init pgd_t *xen_setup_kernel_pagetable(pgd_t *pgd, > } > #endif /* CONFIG_X86_64 */ > > -static void xen_set_fixmap(unsigned idx, unsigned long phys, pgprot_t prot) > +static void xen_set_fixmap(unsigned idx, phys_addr_t phys, pgprot_t prot) > { > pte_t pte; >
-- Mathieu Desnoyers OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
| |