|
@@ -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);
|