rpms/mkelfimage/devel mkelfImage-2.7-ramdisk_base.patch, NONE, 1.1 mkelfimage.spec, 1.3, 1.4

Peter Jones (pjones) fedora-extras-commits at redhat.com
Wed May 21 17:17:49 UTC 2008


Author: pjones

Update of /cvs/extras/rpms/mkelfimage/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv16913

Modified Files:
	mkelfimage.spec 
Added Files:
	mkelfImage-2.7-ramdisk_base.patch 
Log Message:
* Wed May 21 2008 Peter Jones <pjones at redhat.com> - 2.7-4
- Add support for intelligent placement of the ramdisk.


mkelfImage-2.7-ramdisk_base.patch:

--- NEW FILE mkelfImage-2.7-ramdisk_base.patch ---
diff -up mkelfImage-2.7/linux-i386/convert_params.c.ramdisk_base mkelfImage-2.7/linux-i386/convert_params.c
--- mkelfImage-2.7/linux-i386/convert_params.c.ramdisk_base	2006-03-27 18:44:59.000000000 -0500
+++ mkelfImage-2.7/linux-i386/convert_params.c	2008-05-21 12:55:44.000000000 -0400
@@ -1301,6 +1301,44 @@ static void query_firmware_values(struct
 	
 }
 
+static void relocate_ramdisk(struct param_info *info)
+{
+	struct e820entry *e820_map;
+	struct e820entry *highest = 0;
+	unsigned long load_addr;
+	int i;
+
+	e820_map = info->real_mode->e820_map;
+#if 0
+	printf("initrd_start = 0x%lx\n", info->real_mode->initrd_start);
+	printf("real_mode->e820_map_nr: %d\n", info->real_mode->e820_map_nr);
+#endif
+	for (i = 0; i < info->real_mode->e820_map_nr; i++) {
+		if (e820_map[i].type != E820_RAM)
+			continue;
+#if 0
+		printf("addr: 0x%lx len: %x\n", e820_map[i].addr, e820_map[i].size);
+#endif
+		if (highest && e820_map[i].addr < highest->addr)
+			continue;
+		if (e820_map[i].size < info->real_mode->initrd_size)
+			continue;
+		if (e820_map[i].addr + info->real_mode->initrd_size >= 0x38000000)
+			continue;
+		highest = &e820_map[i];
+	}
+
+	if (highest == 0)
+		return;
+
+	load_addr = highest->addr + highest->size;
+	load_addr -= info->real_mode->initrd_size;
+	load_addr &= ~0xfffUL;
+
+	memcpy((void *)load_addr, (void *)info->real_mode->initrd_start, info->real_mode->initrd_size);
+	printf("relocating ramdisk to 0x%lx\n", load_addr);
+	info->real_mode->initrd_start = load_addr;
+}
 /*
  * Debug
  * =============================================================================
@@ -1533,6 +1571,10 @@ void *convert_params(unsigned type, void
 	query_firmware_class(&info);
 	query_firmware_values(&info);
 	query_bootloader_values(&info);
+	if (info.real_mode->initrd_size) {
+		/* Make sure the initrd is in a relatively safe place. */
+		relocate_ramdisk(&info);
+	}
 
 	/* Do the hardware setup that linux might forget... */
 	hardware_setup(&info);
diff -up mkelfImage-2.7/linux-i386/mkelf-linux-i386.c.ramdisk_base mkelfImage-2.7/linux-i386/mkelf-linux-i386.c
--- mkelfImage-2.7/linux-i386/mkelf-linux-i386.c.ramdisk_base	2006-03-17 09:08:22.000000000 -0500
+++ mkelfImage-2.7/linux-i386/mkelf-linux-i386.c	2008-05-21 10:47:42.000000000 -0400
@@ -352,6 +352,9 @@ int linux_i386_mkelf(int argc, char **ar
 	 */
 	params->initrd_start = params->initrd_size = 0;
 	if (ramdisk_size) {
+		while (ramdisk_base <= kernel_size)
+			ramdisk_base <<= 1;
+
 		phdr[index].p_paddr  = ramdisk_base;
 		phdr[index].p_vaddr  = ramdisk_base;
 		phdr[index].p_filesz = ramdisk_size;


Index: mkelfimage.spec
===================================================================
RCS file: /cvs/extras/rpms/mkelfimage/devel/mkelfimage.spec,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- mkelfimage.spec	14 Feb 2008 17:43:31 -0000	1.3
+++ mkelfimage.spec	21 May 2008 17:17:00 -0000	1.4
@@ -1,7 +1,7 @@
 Summary:    Utility to create ELF boot images from Linux kernel images
 Name:       mkelfimage
 Version:    2.7
-Release:    3%{?dist}
+Release:    4%{?dist}
 # No license declaration in the source files, but parts come from the Linux
 # kernel.
 License:    GPLv2
@@ -9,6 +9,7 @@
 URL:        ftp://ftp.lnxi.com/pub/mkelfImage/
 Source0:    ftp://ftp.lnxi.com/pub/mkelfImage/mkelfImage-%{version}.tar.gz
 Patch0:     mkelfimage-makefileconf.patch
+Patch1:     mkelfImage-2.7-ramdisk_base.patch
 BuildRoot:  %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 %description
@@ -22,6 +23,7 @@
 %prep
 %setup -q -n mkelfImage-%{version}
 %patch0 -p1 -b .makefileconf
+%patch1 -p1 -b .ramdisk_base
 
 %build
 %configure
@@ -44,6 +46,9 @@
 %{_mandir}/man8/mkelfImage.8.gz
 
 %changelog
+* Wed May 21 2008 Peter Jones <pjones at redhat.com> - 2.7-4
+- Add support for intelligent placement of the ramdisk.
+
 * Fri Feb 08 2008 Warren Togami <wtogami at redhat.com> - 2.7-3
 - rebuild for gcc-4.3
 




More information about the fedora-extras-commits mailing list