x86: fix set_fixmap to use phys_addr_t

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.

Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Ingo Molnar <mingo@elte.hu>
Acked-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Masami Hiramatsu 2009-04-09 10:55:33 -07:00 committed by Linus Torvalds
parent 62b8e680e6
commit 3b3809ac53
4 changed files with 7 additions and 6 deletions

View File

@ -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, pte_t pte);
void native_set_fixmap(enum fixed_addresses idx, void native_set_fixmap(enum fixed_addresses idx,
unsigned long phys, pgprot_t flags); phys_addr_t phys, pgprot_t flags);
#ifndef CONFIG_PARAVIRT #ifndef CONFIG_PARAVIRT
static inline void __set_fixmap(enum fixed_addresses idx, 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); native_set_fixmap(idx, phys, flags);
} }

View File

@ -347,7 +347,7 @@ struct pv_mmu_ops {
/* Sometimes the physical address is a pfn, and sometimes its /* Sometimes the physical address is a pfn, and sometimes its
an mfn. We can tell which is which from the index. */ an mfn. We can tell which is which from the index. */
void (*set_fixmap)(unsigned /* enum fixed_addresses */ idx, void (*set_fixmap)(unsigned /* enum fixed_addresses */ idx,
unsigned long phys, pgprot_t flags); phys_addr_t phys, pgprot_t flags);
}; };
struct raw_spinlock; struct raw_spinlock;
@ -1432,7 +1432,7 @@ static inline void arch_leave_lazy_mmu_mode(void)
void arch_flush_lazy_mmu_mode(void); void arch_flush_lazy_mmu_mode(void);
static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx, 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); pv_mmu_ops.set_fixmap(idx, phys, flags);
} }

View File

@ -345,7 +345,8 @@ void __native_set_fixmap(enum fixed_addresses idx, pte_t pte)
fixmaps_set++; 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)); __native_set_fixmap(idx, pfn_pte(phys >> PAGE_SHIFT, flags));
} }

View File

@ -1750,7 +1750,7 @@ __init pgd_t *xen_setup_kernel_pagetable(pgd_t *pgd,
} }
#endif /* CONFIG_X86_64 */ #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; pte_t pte;