mirror of
https://github.com/xcat2/xcat-dep.git
synced 2024-12-18 01:01:30 +00:00
-Add kernel move patch for larger kernels
Former-commit-id: 44ffe7e3f171803e8a9052c683af7a4af5c1df60
This commit is contained in:
parent
8cb6c1268c
commit
9447446bf9
118
yaboot/yaboot-1.3.14-move_kernel.patch
Normal file
118
yaboot/yaboot-1.3.14-move_kernel.patch
Normal file
@ -0,0 +1,118 @@
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 8f2b1c4..3603c7d 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -121,6 +121,9 @@ mkofboot:
|
||||
false; \
|
||||
fi
|
||||
|
||||
+%.i: %.c
|
||||
+ $(CC) $(YBCFLAGS) -E -o $@ $<
|
||||
+
|
||||
%.o: %.c
|
||||
$(CC) $(YBCFLAGS) -c -o $@ $<
|
||||
|
||||
diff --git a/include/file.h b/include/file.h
|
||||
index b2d9c63..9990f4b 100644
|
||||
--- a/include/file.h
|
||||
+++ b/include/file.h
|
||||
@@ -68,6 +68,7 @@ struct boot_file_t {
|
||||
ino_t inode;
|
||||
__u64 pos;
|
||||
unsigned char* buffer;
|
||||
+ __u64 buffer_sz;
|
||||
__u64 len;
|
||||
// unsigned int dev_blk_size;
|
||||
// unsigned int part_start;
|
||||
diff --git a/second/fs_of.c b/second/fs_of.c
|
||||
index 1f48f4f..d2e7434 100644
|
||||
--- a/second/fs_of.c
|
||||
+++ b/second/fs_of.c
|
||||
@@ -214,6 +214,7 @@ of_net_open(struct boot_file_t* file,
|
||||
DEBUG_LEAVE(FILE_IOERR);
|
||||
return FILE_IOERR;
|
||||
}
|
||||
+ file->buffer_sz = LOAD_BUFFER_SIZE;
|
||||
memset(file->buffer, 0, LOAD_BUFFER_SIZE);
|
||||
|
||||
DEBUG_F("TFP...\n");
|
||||
diff --git a/second/yaboot.c b/second/yaboot.c
|
||||
index 0ccfed5..1241eec 100644
|
||||
--- a/second/yaboot.c
|
||||
+++ b/second/yaboot.c
|
||||
@@ -1052,6 +1052,7 @@ yaboot_text_ui(void)
|
||||
static struct boot_param_t params;
|
||||
void *initrd_base;
|
||||
unsigned long initrd_size;
|
||||
+ unsigned long initrd_end;
|
||||
void *sysmap_base;
|
||||
unsigned long sysmap_size;
|
||||
kernel_entry_t kernel_entry;
|
||||
@@ -1227,8 +1228,67 @@ yaboot_text_ui(void)
|
||||
initrd_read = file.fs->read(&file, INITRD_CHUNKSIZE, initrd_more);
|
||||
DEBUG_F(" block at %p rc=%lu\n",initrd_more,initrd_read);
|
||||
initrd_size += initrd_read;
|
||||
+ initrd_end = initrd_more+INITRD_CHUNKSIZE;
|
||||
}
|
||||
}
|
||||
+ /* If we netbooted and got this far, we may have filled the
|
||||
+ * RMA. We're about the free the TFTP load buffer to we
|
||||
+ * can "shuffle" things around so that the booted kernel
|
||||
+ * has some memory to run with */
|
||||
+ if (!is_elf64(&loadinfo)) {
|
||||
+ DEBUG_F("Not running a 64-kernel\n");
|
||||
+ /* Is this check enough? */
|
||||
+ } else if (loadinfo.base == file.buffer + file.buffer_sz) {
|
||||
+ DEBUG_F("file->buffer %lx -> %lx (%lx)\n",
|
||||
+ (unsigned long)(file.buffer),
|
||||
+ (unsigned long)(file.buffer+file.buffer_sz),
|
||||
+ (unsigned long)(file.buffer_sz));
|
||||
+ DEBUG_F("vmlinux %lx -> %lx (%lx)\n",
|
||||
+ (unsigned long)(loadinfo.base),
|
||||
+ (unsigned long)(loadinfo.base+loadinfo.memsize),
|
||||
+ (unsigned long)(loadinfo.memsize));
|
||||
+ DEBUG_F("initrd %lx -> %lx (%lx)\n",
|
||||
+ (unsigned long)(initrd_base),
|
||||
+ (unsigned long)(initrd_base+initrd_size),
|
||||
+ (unsigned long)(initrd_size));
|
||||
+
|
||||
+ /* Check to see if we're near the top of the RMA */
|
||||
+ /* Cheat and assume the RMA == 128Mb */
|
||||
+ if (initrd_end > 0x7000000) {
|
||||
+ unsigned long new_initrd_end, free_len;
|
||||
+ unsigned long initrd_claim_len = initrd_end - (unsigned long)initrd_base;
|
||||
+
|
||||
+ memmove(file.buffer, loadinfo.base,
|
||||
+ loadinfo.memsize+initrd_size);
|
||||
+ loadinfo.base = file.buffer;
|
||||
+ initrd_base = loadinfo.base+loadinfo.memsize;
|
||||
+
|
||||
+ new_initrd_end = (unsigned long)initrd_base+initrd_claim_len;
|
||||
+ free_len = initrd_end - (unsigned long)new_initrd_end;
|
||||
+ file.buffer = NULL;
|
||||
+ file.buffer_sz = 0;
|
||||
+ memset((void*)new_initrd_end, 0x0, free_len);
|
||||
+ prom_release((void*)new_initrd_end, free_len);
|
||||
+
|
||||
+ DEBUG_F("Releaseing from 0x%08lx -> 0x%08lx\n",
|
||||
+ new_initrd_end, free_len);
|
||||
+
|
||||
+ DEBUG_F("file->buffer %lx -> %lx (%lx)\n",
|
||||
+ (unsigned long)(file.buffer),
|
||||
+ (unsigned long)(file.buffer+file.buffer_sz),
|
||||
+ (unsigned long)(file.buffer_sz));
|
||||
+ DEBUG_F("vmlinux %lx -> %lx (%lx)\n",
|
||||
+ (unsigned long)(loadinfo.base),
|
||||
+ (unsigned long)(loadinfo.base+loadinfo.memsize),
|
||||
+ (unsigned long)(loadinfo.memsize));
|
||||
+ DEBUG_F("initrd %lx -> %lx (%lx)\n",
|
||||
+ (unsigned long)(initrd_base),
|
||||
+ (unsigned long)(initrd_base+initrd_size),
|
||||
+ (unsigned long)(initrd_size));
|
||||
+ } else {
|
||||
+ DEBUG_F("Looks like we do not need to move the kernel\n");
|
||||
+ }
|
||||
+ }
|
||||
file.fs->close(&file);
|
||||
memset(&file, 0, sizeof(file));
|
||||
}
|
@ -2,15 +2,17 @@
|
||||
%define ver 1.3.15
|
||||
|
||||
Summary: yaboot binary for tftp server
|
||||
%define _binary_payload w9.bzdio
|
||||
Name: %{pkg}
|
||||
Version: %{ver}
|
||||
Release: 05122010
|
||||
Release: 05172010
|
||||
Group: System/Administration
|
||||
License: GPL2
|
||||
URL: http://yaboot.ozlabs.org/
|
||||
Source: yaboot-%{ver}-%{release}.tar.gz
|
||||
Source: yaboot-%{ver}-05122010.tar.gz
|
||||
Patch0: yaboot-skipmac.patch
|
||||
Patch1: yaboot-32bitbuild.patch
|
||||
Patch5: yaboot-1.3.14-move_kernel.patch
|
||||
BuildRoot: %{_tmppath}/%{pkg}-buildroot
|
||||
Prefix: %{_prefix}
|
||||
BuildArch: noarch
|
||||
@ -22,9 +24,10 @@ ppc nodes.
|
||||
|
||||
%prep
|
||||
%{__rm} -rf %{buildroot}
|
||||
%setup -q -n yaboot-%{ver}-%{release}
|
||||
%setup -q -n yaboot-%{ver}-05122010
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch5 -p1
|
||||
|
||||
|
||||
%build
|
||||
|
Loading…
Reference in New Issue
Block a user