| From stable-bounces@linux.kernel.org Tue Sep 26 23:16:19 2006 |
| Date: Tue, 26 Sep 2006 23:15:38 -0700 (PDT) |
| Message-Id: <20060926.231538.59469660.davem@davemloft.net> |
| From: David S. Miller <davem@davemloft.net> |
| To: stable@kernel.org |
| Subject: Fix sparc64 ramdisk handling |
| |
| From: David S. Miller <davem@davemloft.net> |
| |
| [SPARC64]: Kill bogus check from bootmem_init(). |
| |
| There is an ancient and totally incorrect sanity check being |
| done on the ramdisk location. The check assumes that the |
| kernel is always loaded to physical address zero, which is |
| wrong. It was trying to validate the ramdisk value by saying that |
| if it fell within the kernel image address range it must be wrong. |
| |
| Anyways, kill this because it actually creates problems. The |
| 'ramdisk_image' should always be adjusted down by KERNBASE. |
| SILO can easily put the ramdisk in a location which causes |
| this test to trigger, breaking things. |
| |
| [ Based almost entirely upon a patch from Ben Collins. ] |
| |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/sparc64/mm/init.c | 3 +-- |
| 1 file changed, 1 insertion(+), 2 deletions(-) |
| |
| --- linux-2.6.17.13.orig/arch/sparc64/mm/init.c |
| +++ linux-2.6.17.13/arch/sparc64/mm/init.c |
| @@ -902,8 +902,7 @@ static unsigned long __init bootmem_init |
| if (sparc_ramdisk_image || sparc_ramdisk_image64) { |
| unsigned long ramdisk_image = sparc_ramdisk_image ? |
| sparc_ramdisk_image : sparc_ramdisk_image64; |
| - if (ramdisk_image >= (unsigned long)_end - 2 * PAGE_SIZE) |
| - ramdisk_image -= KERNBASE; |
| + ramdisk_image -= KERNBASE; |
| initrd_start = ramdisk_image + phys_base; |
| initrd_end = initrd_start + sparc_ramdisk_size; |
| if (initrd_end > end_of_phys_memory) { |