[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Make the fixmap area moveable in kernel address space.
# HG changeset patch # User cl349@xxxxxxxxxxxxxxxxxxxx # Node ID d161c07014a3232a71f9b1d8cb2081f00fdd5f0e # Parent 822a27d28afeab1ffdf8ca8e8e8a11de5e7c7aec Make the fixmap area moveable in kernel address space. From: Gerd Hoffmann <kraxel@xxxxxxx> Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx> diff -r 822a27d28afe -r d161c07014a3 linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c --- a/linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c Thu Feb 23 15:22:19 2006 +++ b/linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c Thu Feb 23 15:59:54 2006 @@ -13,6 +13,7 @@ #include <linux/slab.h> #include <linux/pagemap.h> #include <linux/spinlock.h> +#include <linux/module.h> #include <asm/system.h> #include <asm/pgtable.h> @@ -184,6 +185,10 @@ __flush_tlb_one(vaddr); } +static int nr_fixmaps = 0; +unsigned long __FIXADDR_TOP = (HYPERVISOR_VIRT_START - 2 * PAGE_SIZE); +EXPORT_SYMBOL(__FIXADDR_TOP); + void __set_fixmap (enum fixed_addresses idx, maddr_t phys, pgprot_t flags) { unsigned long address = __fix_to_virt(idx); @@ -203,6 +208,13 @@ set_pte_pfn_ma(address, phys >> PAGE_SHIFT, flags); break; } + nr_fixmaps++; +} + +void set_fixaddr_top(unsigned long top) +{ + BUG_ON(nr_fixmaps > 0); + __FIXADDR_TOP = top - PAGE_SIZE; } pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) diff -r 822a27d28afe -r d161c07014a3 linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/fixmap.h --- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/fixmap.h Thu Feb 23 15:22:19 2006 +++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/fixmap.h Thu Feb 23 15:59:54 2006 @@ -20,7 +20,7 @@ * Leave one empty page between vmalloc'ed areas and * the start of the fixmap. */ -#define __FIXADDR_TOP (HYPERVISOR_VIRT_START - 2 * PAGE_SIZE) +extern unsigned long __FIXADDR_TOP; #ifndef __ASSEMBLY__ #include <linux/kernel.h> @@ -98,8 +98,10 @@ __end_of_fixed_addresses }; -extern void __set_fixmap( - enum fixed_addresses idx, maddr_t phys, pgprot_t flags); +extern void __set_fixmap(enum fixed_addresses idx, + maddr_t phys, pgprot_t flags); + +extern void set_fixaddr_top(unsigned long top); #define set_fixmap(idx, phys) \ __set_fixmap(idx, phys, PAGE_KERNEL) diff -r 822a27d28afe -r d161c07014a3 linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/page.h --- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/page.h Thu Feb 23 15:22:19 2006 +++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/page.h Thu Feb 23 15:59:54 2006 @@ -294,7 +294,7 @@ #define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET) #define VMALLOC_RESERVE ((unsigned long)__VMALLOC_RESERVE) -#define MAXMEM (HYPERVISOR_VIRT_START-__PAGE_OFFSET-__VMALLOC_RESERVE) +#define MAXMEM (__FIXADDR_TOP-__PAGE_OFFSET-__VMALLOC_RESERVE) #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET) #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) diff -r 822a27d28afe -r d161c07014a3 linux-2.6-xen-sparse/include/asm-i386/mach-xen/setup_arch_post.h --- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/setup_arch_post.h Thu Feb 23 15:22:19 2006 +++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/setup_arch_post.h Thu Feb 23 15:59:54 2006 @@ -33,6 +33,8 @@ static void __init machine_specific_arch_setup(void) { + struct xen_platform_parameters pp; + HYPERVISOR_set_callbacks( __KERNEL_CS, (unsigned long)hypervisor_callback, __KERNEL_CS, (unsigned long)failsafe_callback); @@ -40,4 +42,8 @@ HYPERVISOR_nmi_op(XENNMI_register_callback, (unsigned long)&nmi); machine_specific_modify_cpu_capabilities(&boot_cpu_data); + + if (HYPERVISOR_xen_version(XENVER_platform_parameters, + &pp) == 0) + set_fixaddr_top(pp.virt_start - PAGE_SIZE); } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |