X-Git-Url: http://git.ozlabs.org/?p=yaboot.git;a=blobdiff_plain;f=second%2Fyaboot.c;h=ec0c0859d71813be46db27937154583b744c6a2a;hp=9b66ab44e1be0ee82b88e386a5d0358428766e73;hb=677037569e92173195efa04244cd4291721d8f20;hpb=396aa4f25cd3d454f9830989fa279072f43811d7 diff --git a/second/yaboot.c b/second/yaboot.c index 9b66ab4..ec0c085 100644 --- a/second/yaboot.c +++ b/second/yaboot.c @@ -76,6 +76,8 @@ #define KERNEL_LINK_ADDR_PPC32 0xC0000000UL #define KERNEL_LINK_ADDR_PPC64 0xC000000000000000ULL +#define INITRD_CHUNKSIZE 0x100000 + typedef struct { union { Elf32_Ehdr elf32hdr; @@ -1023,6 +1025,7 @@ yaboot_text_ui(void) loadinfo_t loadinfo; void *initrd_more,*initrd_want; unsigned long initrd_read; + unsigned int len = INITRD_CHUNKSIZE; loadinfo.load_loc = 0; @@ -1112,19 +1115,18 @@ yaboot_text_ui(void) } prom_printf("Loading ramdisk...\n"); result = open_file(¶ms.rd, &file); + if (result == FILE_ERR_OK && file.fs->ino_size) { + result = file.fs->ino_size(&file, &len); + } if (result != FILE_ERR_OK) { prom_printf("%s:%d,", params.rd.dev, params.rd.part); prom_perror(result, params.rd.file); } else { -#define INITRD_CHUNKSIZE 0x100000 - unsigned int len = INITRD_CHUNKSIZE; - - /* We add a bit to the actual size so the loop below doesn't think - * there is more to load. + /* We add a bit to the actual size so the loop below + * doesn't think there is more to load. */ - if (file.fs->ino_size && file.fs->ino_size(&file) > 0) - len = file.fs->ino_size(&file) + 0x1000; + len += 0x1000; initrd_base = prom_claim_chunk(loadinfo.base+loadinfo.memsize, len, 0); if (initrd_base == (void *)-1) { @@ -1195,7 +1197,7 @@ load_elf32(struct boot_file_t *file, loadinfo_t *loadinfo) { int i; Elf32_Ehdr *e = &(loadinfo->elf.elf32hdr); - Elf32_Phdr *p, *ph; + Elf32_Phdr *p, *ph = NULL; int size = sizeof(Elf32_Ehdr) - sizeof(Elf_Ident); unsigned long loadaddr; @@ -1328,7 +1330,7 @@ load_elf64(struct boot_file_t *file, loadinfo_t *loadinfo) { int i; Elf64_Ehdr *e = &(loadinfo->elf.elf64hdr); - Elf64_Phdr *p, *ph; + Elf64_Phdr *p, *ph = NULL; int size = sizeof(Elf64_Ehdr) - sizeof(Elf_Ident); unsigned long loadaddr;