x86/gart change for v2.6.40
Linus,
Please pull the latest x86-gart-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git x86-gart-for-linus
Thanks,
Ingo
------------------>
Joerg Roedel (1):
x86, gart: Don't enforce GART aperture lower-bound by alignment
arch/x86/kernel/aperture_64.c | 34 +++++++++++++++++++--------------- 1 files changed, 19 insertions(+), 15 deletions(-)
arch/x86/kernel/aperture_64.c +19 -15
@@ -30,6 +30,22 @@#include <asm/amd_nb.h> #include <asm/x86_init.h> +/* +* Using 512M as goal, in case kexec will load kernel_big +* that will do the on-position decompress, and could overlap with +* with the gart aperture that is used. +* Sequence: +* kernel_small +* ==> kexec (with kdump trigger path or gart still enabled) +* ==> kernel_small (gart area become e820_reserved) +* ==> kexec (with kdump trigger path or gart still enabled) +* ==> kerne_big (uncompressed size will be big than 64M or 128M) +* So don't use 512M below as gart iommu, leave the space for kernel +* code for safe. +*/ +#define GART_MIN_ADDR (512ULL << 20) +#define GART_MAX_ADDR (1ULL << 32) +int gart_iommu_aperture;int gart_iommu_aperture_disabled__initdata ;int gart_iommu_aperture_allowed__initdata ;
@@ -70,21 +86,9 @@ static u32 __init allocate_aperture(void)* memory. Unfortunately we cannot move it up because that would * make the IOMMU useless. */ -/* -* using 512M as goal, in case kexec will load kernel_big -* that will do the on position decompress, and could overlap with -* that position with gart that is used. -* sequende: -* kernel_small -* ==> kexec (with kdump trigger path or previous doesn't shutdown gart) -* ==> kernel_small(gart area become e820_reserved) -* ==> kexec (with kdump trigger path or previous doesn't shutdown gart) -* ==> kerne_big (uncompressed size will be big than 64M or 128M) -* so don't use 512M below as gart iommu, leave the space for kernel -* code for safe -*/ - addr =memblock_find_in_range (0 ,1ULL <<32 , aper_size,512ULL <<20 ); -if (addr ==MEMBLOCK_ERROR || addr + aper_size >0xffffffff ) { + addr =memblock_find_in_range (GART_MIN_ADDR ,GART_MAX_ADDR , + aper_size, aper_size); +if (addr ==MEMBLOCK_ERROR || addr + aper_size >GART_MAX_ADDR ) {printk (KERN_ERR "Cannot allocate aperture memory hole (%lx,%uK)\n" , addr, aper_size>>10 );