diff --git a/ChangeLog b/ChangeLog
index 65f42dd6a..f3050ef73 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-04-10  Vladimir Serbinenko  <phcoder@gmail.com>
+
+	* grub-core/loader/mips/linux.c (grub_cmd_initrd): Use correct limits
+	rather than trying to put initrd way too high.
+	Reported by: Ryan Lortie <desrt@desrt.ca>
+
 2011-04-10  Vladimir Serbinenko  <phcoder@gmail.com>
 
 	* grub-core/boot/mips/yeeloong/fwstart.S (no_cs5536): Put back
diff --git a/grub-core/loader/mips/linux.c b/grub-core/loader/mips/linux.c
index 6ae2a9321..9accfc270 100644
--- a/grub-core/loader/mips/linux.c
+++ b/grub-core/loader/mips/linux.c
@@ -379,8 +379,9 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
     grub_relocator_chunk_t ch;
 
     err = grub_relocator_alloc_chunk_align (relocator, &ch,
-					    target_addr + linux_size + 0x10000,
-					    (0xffffffff - size) + 1,
+					    (target_addr & 0x1fffffff)
+					    + linux_size + 0x10000,
+					    (0x10000000 - size),
 					    size, 0x10000,
 					    GRUB_RELOCATOR_PREFERENCE_NONE);