x86, gart: Don't enforce GART aperture lower-bound by alignment
This patch changes the allocation of the GART aperture to enforce only natural alignment instead of aligning it on 512MB. This big alignment was used to force the GART aperture to be over 512MB. This is enforced by using 512MB as the lower-bound address in the allocation range. [ hpa: The actual number 512 MiB needs to be revisited, too. ] Cc: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> Link: http://lkml.kernel.org/r/1303134346-5805-2-git-send-email-joerg.roedel@amd.com Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
Родитель
665d3e2af8
Коммит
c387aa3a1a
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче