Browse Source

use vmalloc instead of kmalloc when reserving space for the lzma initramfs (#3488)

SVN-Revision: 15534
Florian Fainelli 17 years ago
parent
commit
35fd7d6d20
1 changed files with 19 additions and 11 deletions
  1. 19 11
      target/linux/brcm47xx/patches-2.6.28/500-lzma_initramfs.patch

+ 19 - 11
target/linux/brcm47xx/patches-2.6.28/500-lzma_initramfs.patch

@@ -1,6 +1,14 @@
---- a/init/initramfs.c
-+++ b/init/initramfs.c
-@@ -475,6 +475,69 @@ static void __init flush_window(void)
+--- a/init/initramfs.c	2009-03-23 22:55:52.000000000 +0100
++++ b/init/initramfs.c	2009-05-01 11:15:46.000000000 +0200
+@@ -7,6 +7,7 @@
+ #include <linux/string.h>
+ #include <linux/syscalls.h>
+ #include <linux/utime.h>
++#include <linux/vmalloc.h>
+ 
+ static __initdata char *message;
+ static void __init error(char *x)
+@@ -475,6 +476,69 @@
  	outcnt = 0;
  }
  
@@ -40,13 +48,13 @@
 +	workspace_size = ((LZMA_BASE_SIZE + (LZMA_LIT_SIZE << (lc + lp))) * sizeof(CProb)) + 100;
 +	printk( KERN_NOTICE "initramfs: LZMA lc=%d,lp=%d,pb=%d,origSize=%d\n",
 +	lc,lp,pb,osize);
-+	outputbuffer = kmalloc(osize, GFP_KERNEL);
++	outputbuffer = vmalloc(osize);
 +	if (outputbuffer == 0) {
 +		printk(KERN_ERR "initramfs: Couldn't allocate lzma output buffer\n");
 +		return -1;
 +	}
 +
-+	workspace = kmalloc(workspace_size, GFP_KERNEL);
++	workspace = vmalloc(workspace_size);
 +	if (workspace == NULL) {
 +		printk(KERN_ERR "initramfs: Couldn't allocate lzma workspace\n");
 +		return -1;
@@ -61,8 +69,8 @@
 +	flush_buffer(outputbuffer, outsizeProcessed);
 +	inptr = insize;
 +
-+	kfree(outputbuffer);
-+	kfree(workspace);
++	vfree(outputbuffer);
++	vfree(workspace);
 +	state = Reset;
 +	return 0;
 +}
@@ -70,7 +78,7 @@
  static char * __init unpack_to_rootfs(char *buf, unsigned len, int check_only)
  {
  	int written;
-@@ -509,12 +572,28 @@ static char * __init unpack_to_rootfs(ch
+@@ -509,12 +573,28 @@
  		inptr = 0;
  		outcnt = 0;		/* bytes in output buffer */
  		bytes_out = 0;
@@ -104,9 +112,9 @@
  		buf += inptr;
  		len -= inptr;
  	}
---- a/scripts/gen_initramfs_list.sh
-+++ b/scripts/gen_initramfs_list.sh
-@@ -287,7 +287,7 @@ if [ ! -z ${output_file} ]; then
+--- a/scripts/gen_initramfs_list.sh	2009-03-23 22:55:52.000000000 +0100
++++ b/scripts/gen_initramfs_list.sh	2009-05-01 11:12:45.000000000 +0200
+@@ -287,7 +287,7 @@
  	if [ "${is_cpio_compressed}" = "compressed" ]; then
  		cat ${cpio_tfile} > ${output_file}
  	else