Messages in this thread Patch in this message | | | Date | Mon, 2 Apr 2007 20:50:32 +0200 (MEST) | From | Jan Engelhardt <> | Subject | Re: [PATCH 09/16] zlib-decompression-status.diff |
| |
Hi,
On Apr 2 2007 19:48, Jörn Engel wrote: >On Sun, 1 April 2007 20:15:42 +0200, Jan Engelhardt wrote: >> >> +static inline void putstr(const char *s) { >> + printk("%s", s); >> + return; >> +} >> + >> static int __init crd_load(int in_fd, int out_fd) >> { >> int result; >> @@ -418,7 +423,7 @@ static int __init crd_load(int in_fd, in >> return -1; >> } >> makecrc(); >> - result = gunzip(); >> + result = gunzip(putstr); > >You are sure this wasn't meant as an April fools joke?
It actually has use (for my 20 MHz 386 *hug*)
>Passing the address of an inline function certainly has a humorous aspect. ;)
You bet. Well, "inline" is, as far as I hear the voices of the C standard, just a "hint" to the compiler that this function should be inlined. If it cannot do that, well, then do not inline it. But you have a point, it gets interesting when "inline" expands to __attribute__((always_inline)). Well, let's hope that gcc 'carries the inlining over' into gunzip().
>Also, you can remove the "return;" in the void function and possibly >change this bit to match Documentation/CodingStyle.
Yup.
>> + if(putstr != NULL) putstr("*"); > >The patch alternately uses puts() and putstr(), which looks rather odd.
It is because some arches seem to have a arch-specific "output function" called puts() try the following:
$ grep -r 'puts(' arch/arm26/ (results) $ grep -r 'puts(' arch/i386/ (no results)
So yes, I would need some advice what people were thinking here. If it was not for this arch specific stuff, the putstr() function I added in lib/ would also be gone and the "*" could be directly printed in gunzip(), making the extra argument to gunzip superfluous.
The extra putstr() in init/initramfs.c [cf. putstr() in lib/inflate.c] is also something I did not know how to really do better.
Thoughts are appreciated and stylofixed patch below. (lib/inflate.c does not even use tabs, what could I possibly do more wrong than already? :p)
---
Shows some stars during decompression. This is particularly useful on old 386s where one asterisk is probably printed every second - making the long linux and initramfs uncompress progress more evident. Not compile tested outside {i386, x86_64} - don't have other machines.
Signed-off-by: Jan Engelhardt <jengelh@gmx.de>
arch/alpha/boot/misc.c | 2 +- arch/arm/boot/compressed/misc.c | 4 ++-- arch/arm26/boot/compressed/misc.c | 4 ++-- arch/cris/arch-v10/boot/compressed/misc.c | 2 +- arch/cris/arch-v32/boot/compressed/misc.c | 2 +- arch/i386/boot/compressed/misc.c | 2 +- arch/m32r/boot/compressed/misc.c | 2 +- arch/sh/boot/compressed/misc.c | 2 +- arch/sh64/boot/compressed/misc.c | 2 +- arch/x86_64/boot/compressed/misc.c | 2 +- init/do_mounts_rd.c | 7 ++++++- init/initramfs.c | 7 ++++++- lib/inflate.c | 10 ++++++---- 13 files changed, 30 insertions(+), 18 deletions(-)
Index: linux-2.6.21-rc5/arch/alpha/boot/misc.c =================================================================== --- linux-2.6.21-rc5.orig/arch/alpha/boot/misc.c +++ linux-2.6.21-rc5/arch/alpha/boot/misc.c @@ -201,7 +201,7 @@ decompress_kernel(void *output_start, makecrc(); /* puts("Uncompressing Linux..."); */ - gunzip(); + gunzip(NULL); /* puts(" done, booting the kernel.\n"); */ return output_ptr; } Index: linux-2.6.21-rc5/arch/arm/boot/compressed/misc.c =================================================================== --- linux-2.6.21-rc5.orig/arch/arm/boot/compressed/misc.c +++ linux-2.6.21-rc5/arch/arm/boot/compressed/misc.c @@ -355,7 +355,7 @@ decompress_kernel(ulg output_start, ulg makecrc(); putstr("Uncompressing Linux..."); - gunzip(); + gunzip(putstr); putstr(" done, booting the kernel.\n"); return output_ptr; } @@ -369,7 +369,7 @@ int main() makecrc(); putstr("Uncompressing Linux..."); - gunzip(); + gunzip(putstr); putstr("done.\n"); return 0; } Index: linux-2.6.21-rc5/arch/arm26/boot/compressed/misc.c =================================================================== --- linux-2.6.21-rc5.orig/arch/arm26/boot/compressed/misc.c +++ linux-2.6.21-rc5/arch/arm26/boot/compressed/misc.c @@ -294,7 +294,7 @@ decompress_kernel(ulg output_start, ulg makecrc(); puts("Uncompressing Linux..."); - gunzip(); + gunzip(puts); puts(" done, booting the kernel.\n"); return output_ptr; } @@ -308,7 +308,7 @@ int main() makecrc(); puts("Uncompressing Linux..."); - gunzip(); + gunzip(puts); puts("done.\n"); return 0; } Index: linux-2.6.21-rc5/arch/cris/arch-v10/boot/compressed/misc.c =================================================================== --- linux-2.6.21-rc5.orig/arch/cris/arch-v10/boot/compressed/misc.c +++ linux-2.6.21-rc5/arch/cris/arch-v10/boot/compressed/misc.c @@ -267,6 +267,6 @@ decompress_kernel() } puts("Uncompressing Linux...\n"); - gunzip(); + gunzip(puts); puts("Done. Now booting the kernel.\n"); } Index: linux-2.6.21-rc5/arch/cris/arch-v32/boot/compressed/misc.c =================================================================== --- linux-2.6.21-rc5.orig/arch/cris/arch-v32/boot/compressed/misc.c +++ linux-2.6.21-rc5/arch/cris/arch-v32/boot/compressed/misc.c @@ -312,6 +312,6 @@ decompress_kernel() } puts("Uncompressing Linux...\n"); - gunzip(); + gunzip(puts); puts("Done. Now booting the kernel.\n"); } Index: linux-2.6.21-rc5/arch/i386/boot/compressed/misc.c =================================================================== --- linux-2.6.21-rc5.orig/arch/i386/boot/compressed/misc.c +++ linux-2.6.21-rc5/arch/i386/boot/compressed/misc.c @@ -373,7 +373,7 @@ asmlinkage void decompress_kernel(void * makecrc(); putstr("Uncompressing Linux... "); - gunzip(); + gunzip(putstr); putstr("Ok, booting the kernel.\n"); return; } Index: linux-2.6.21-rc5/arch/m32r/boot/compressed/misc.c =================================================================== --- linux-2.6.21-rc5.orig/arch/m32r/boot/compressed/misc.c +++ linux-2.6.21-rc5/arch/m32r/boot/compressed/misc.c @@ -204,6 +204,6 @@ decompress_kernel(int mmu_on, unsigned c makecrc(); puts("Uncompressing Linux... "); - gunzip(); + gunzip(puts); puts("Ok, booting the kernel.\n"); } Index: linux-2.6.21-rc5/arch/sh/boot/compressed/misc.c =================================================================== --- linux-2.6.21-rc5.orig/arch/sh/boot/compressed/misc.c +++ linux-2.6.21-rc5/arch/sh/boot/compressed/misc.c @@ -236,6 +236,6 @@ void decompress_kernel(void) makecrc(); puts("Uncompressing Linux... "); - gunzip(); + gunzip(puts); puts("Ok, booting the kernel.\n"); } Index: linux-2.6.21-rc5/arch/sh64/boot/compressed/misc.c =================================================================== --- linux-2.6.21-rc5.orig/arch/sh64/boot/compressed/misc.c +++ linux-2.6.21-rc5/arch/sh64/boot/compressed/misc.c @@ -218,7 +218,7 @@ void decompress_kernel(void) makecrc(); puts("Uncompressing Linux... "); cache_control(CACHE_ENABLE); - gunzip(); + gunzip(puts); puts("\n"); #if 0 Index: linux-2.6.21-rc5/arch/x86_64/boot/compressed/misc.c =================================================================== --- linux-2.6.21-rc5.orig/arch/x86_64/boot/compressed/misc.c +++ linux-2.6.21-rc5/arch/x86_64/boot/compressed/misc.c @@ -351,7 +351,7 @@ int decompress_kernel(struct moveparams makecrc(); putstr(".\nDecompressing Linux..."); - gunzip(); + gunzip(putstr); putstr("done.\nBooting the kernel.\n"); if (high_loaded) close_output_buffer_if_we_run_high(mv); return high_loaded; Index: linux-2.6.21-rc5/init/do_mounts_rd.c =================================================================== --- linux-2.6.21-rc5.orig/init/do_mounts_rd.c +++ linux-2.6.21-rc5/init/do_mounts_rd.c @@ -393,6 +393,11 @@ static void __init error(char *x) unzip_error = 1; } +static void putstr(const char *s) +{ + printk("%s", s); +} + static int __init crd_load(int in_fd, int out_fd) { int result; @@ -418,7 +423,7 @@ static int __init crd_load(int in_fd, in return -1; } makecrc(); - result = gunzip(); + result = gunzip(putstr); if (unzip_error) result = 1; kfree(inbuf); Index: linux-2.6.21-rc5/init/initramfs.c =================================================================== --- linux-2.6.21-rc5.orig/init/initramfs.c +++ linux-2.6.21-rc5/init/initramfs.c @@ -441,6 +441,11 @@ static void __init flush_window(void) outcnt = 0; } +static void putstr(const char *s) +{ + printk("%s", s); +} + static char * __init unpack_to_rootfs(char *buf, unsigned len, int check_only) { int written; @@ -477,7 +482,7 @@ static char * __init unpack_to_rootfs(ch bytes_out = 0; crc = (ulg)0xffffffffL; /* shift register contents */ makecrc(); - gunzip(); + gunzip(putstr); if (state != Reset) error("junk in gzipped archive"); this_header = saved_offset + inptr; Index: linux-2.6.21-rc5/lib/inflate.c =================================================================== --- linux-2.6.21-rc5.orig/lib/inflate.c +++ linux-2.6.21-rc5/lib/inflate.c @@ -151,7 +151,7 @@ STATIC int INIT inflate_stored OF((void) STATIC int INIT inflate_fixed OF((void)); STATIC int INIT inflate_dynamic OF((void)); STATIC int INIT inflate_block OF((int *)); -STATIC int INIT inflate OF((void)); +STATIC int INIT inflate OF((void (*)(const char *))); /* The inflate algorithm uses a sliding 32 K byte window on the uncompressed @@ -983,7 +983,7 @@ STATIC int INIT inflate_block( -STATIC int INIT inflate(void) +STATIC int INIT inflate(void (*putstr)(const char *)) /* decompress an inflated entry */ { int e; /* last block flag */ @@ -1000,6 +1000,8 @@ STATIC int INIT inflate(void) /* decompress until the last block */ h = 0; do { + if(putstr != NULL) + putstr("*"); hufts = 0; gzip_mark(&ptr); if ((r = inflate_block(&e)) != 0) { @@ -1093,7 +1095,7 @@ makecrc(void) /* * Do the uncompression! */ -static int INIT gunzip(void) +static int INIT gunzip(void (*putstr)(const char *)) { uch flags; unsigned char magic[2]; /* magic header */ @@ -1157,7 +1159,7 @@ static int INIT gunzip(void) } /* Decompress */ - if ((res = inflate())) { + if ((res = inflate(putstr))) { switch (res) { case 0: break; #<EOF>
Jan -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |