Well, I can't say I know precisely what s390 needs, but I don't see anything wrong with the patch. I just have one question, the generic.ins file can be overriden or changed to have some other values? Or why isn't the 0x00010408 address as a constant in geninitrdsz.c if we only grep and pass it? On Mon, 2010-11-29 at 16:59 -1000, David Cantrell wrote: > The previous fix just updated the generic.ins files, but that was not > enough. We also needed to modify geninitrdsz.c to compute the size of > the initrd.img file and add that to the initrd.addrsize file. Get the > load address from the generic.ins file. > --- > bootdisk/s390/generic.ins | 2 +- > bootdisk/s390x/generic.ins | 2 +- > scripts/mk-images.s390 | 6 +++--- > utils/geninitrdsz.c | 42 +++++++++++++++++++++++++++++++----------- > 4 files changed, 36 insertions(+), 16 deletions(-) > > diff --git a/bootdisk/s390/generic.ins b/bootdisk/s390/generic.ins > index 2f513db..b991dfd 100644 > --- a/bootdisk/s390/generic.ins > +++ b/bootdisk/s390/generic.ins > @@ -2,4 +2,4 @@ > images/kernel.img 0x00000000 > images/initrd.img 0x02000000 > images/generic.prm 0x00010480 > -images/initrd.size 0x00010408 > +images/initrd.addrsize 0x00010408 > diff --git a/bootdisk/s390x/generic.ins b/bootdisk/s390x/generic.ins > index 2f513db..b991dfd 100644 > --- a/bootdisk/s390x/generic.ins > +++ b/bootdisk/s390x/generic.ins > @@ -2,4 +2,4 @@ > images/kernel.img 0x00000000 > images/initrd.img 0x02000000 > images/generic.prm 0x00010480 > -images/initrd.size 0x00010408 > +images/initrd.addrsize 0x00010408 > diff --git a/scripts/mk-images.s390 b/scripts/mk-images.s390 > index 9dff2de..afb616e 100644 > --- a/scripts/mk-images.s390 > +++ b/scripts/mk-images.s390 > @@ -8,8 +8,8 @@ makeBootImages() { > --initrdsize 20000 \ > --loaderbin loader \ > --modules "$INITRDMODS $S390MODS" > - sz=$(ls -l $TOPDESTPATH/images/initrd.img | awk '{print $5}') > - $GENINITRDSZ $sz $TOPDESTPATH/images/initrd.size > + addr=$(grep "/initrd.img" $BOOTDISKDIR/generic.ins | cut -d ' ' -f 2) > + $GENINITRDSZ $addr $TOPDESTPATH/images/initrd.img $TOPDESTPATH/images/initrd.addrsize > cp -vf $KERNELROOT/boot/${KERNELNAME}-${version} $TOPDESTPATH/images/kernel.img > > cp -v $BOOTDISKDIR/generic.prm $TOPDESTPATH/images/generic.prm > @@ -26,7 +26,7 @@ makeBootImages() { > [images-$KERNELARCH] > kernel = images/kernel.img > initrd = images/initrd.img > -initrd.size = images/initrd.size > +initrd.addrsize = images/initrd.addrsize > generic.prm = images/generic.prm > generic.ins = generic.ins > cdboot.img = images/cdboot.img > diff --git a/utils/geninitrdsz.c b/utils/geninitrdsz.c > index 01d1cf1..ed7caab 100644 > --- a/utils/geninitrdsz.c > +++ b/utils/geninitrdsz.c > @@ -1,7 +1,7 @@ > /* > - * Generate initrd.size file for zSeries platforms. > + * Generate initrd.addrsize file for zSeries platforms. > * Takes an integer argument and writes out the binary representation of > - * that value to the initrd.size file. > + * that value to the initrd.addrsize file. > * https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=197773 > */ > > @@ -17,27 +17,47 @@ > #include <string.h> > > int main(int argc,char **argv) { > + char *prog = basename(argv[0]); > + struct stat initrd_sbuf; > unsigned int zero = 0; > - int fd; > - unsigned int size; > + unsigned int addr, size; > + int fd, rc; > + char *tmp; > mode_t mode = S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH; > > - if (argc != 3) { > - printf("Usage: %s [integer size] [output file]\n", basename(argv[0])); > - printf("Example: %s 12288475 initrd.size\n", basename(argv[0])); > + if (argc != 4) { > + printf("Usage: %s [address] [initrd file] [output file]\n", prog); > + printf("Example: %s 0x2000000 initrd.img initrd.addrsize\n", prog); > return 0; > } > > - size = htonl(atoi(argv[1])); > - fd = open(argv[2], O_CREAT | O_RDWR, mode); > + rc = stat(argv[2], &initrd_sbuf); > + if (rc) { > + perror("Error getting initrd stats "); > + return rc; > + } > + > + addr = htonl(strtoul(argv[1], &tmp, 0)); > + size = htonl(initrd_sbuf.st_size); > + fd = open(argv[3], O_CREAT | O_RDWR, mode); > + > + if (write(fd, &zero, sizeof(int)) == -1) { > + perror("writing first zero"); > + return errno; > + } > + > + if (write(fd, &addr, sizeof(int)) == -1) { > + perror("writing addr"); > + return errno; > + } > > if (write(fd, &zero, sizeof(int)) == -1) { > - perror("writing initrd.size (zero)"); > + perror("writing second zero"); > return errno; > } > > if (write(fd, &size, sizeof(int)) == -1) { > - perror("writing initrd.size (size)"); > + perror("writing size"); > return errno; > } > -- Martin Gracik <mgracik@xxxxxxxxxx> _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list