Browse Source

ar71xx: use dynamically allocated partitions in wrt160nl_part

SVN-Revision: 29970
Gabor Juhos 14 years ago
parent
commit
d5d37febb4

+ 14 - 4
target/linux/ar71xx/files/drivers/mtd/wrt160nl_part.c

@@ -77,8 +77,6 @@ struct wrt160nl_header {
 	struct uimage_header	uimage;
 } __attribute__ ((packed));
 
-static struct mtd_partition trx_parts[TRX_PARTS];
-
 #define WRT160NL_UBOOT_LEN	0x40000
 #define WRT160NL_ART_LEN	0x10000
 #define WRT160NL_NVRAM_LEN	0x10000
@@ -90,6 +88,7 @@ static int wrt160nl_parse_partitions(struct mtd_info *master,
 	struct wrt160nl_header *header;
 	struct trx_header *theader;
 	struct uimage_header *uheader;
+	struct mtd_partition *trx_parts;
 	size_t retlen;
 	unsigned int kernel_len;
 	unsigned int uboot_len;
@@ -101,10 +100,17 @@ static int wrt160nl_parse_partitions(struct mtd_info *master,
 	nvram_len = max_t(unsigned int, master->erasesize, WRT160NL_NVRAM_LEN);
 	art_len = max_t(unsigned int, master->erasesize, WRT160NL_ART_LEN);
 
+	trx_parts = kzalloc(TRX_PARTS * sizeof(struct mtd_partition),
+			    GFP_KERNEL);
+	if (!trx_parts) {
+		ret = -ENOMEM;
+		goto out;
+	}
+
 	header = vmalloc(sizeof(*header));
 	if (!header) {
 		return -ENOMEM;
-		goto out;
+		goto free_parts;
 	}
 
 	ret = master->read(master, uboot_len, sizeof(*header),
@@ -169,11 +175,15 @@ static int wrt160nl_parse_partitions(struct mtd_info *master,
 	trx_parts[5].size = master->size - uboot_len - nvram_len - art_len;
 	trx_parts[5].mask_flags = 0;
 
+	vfree(header);
+
 	*pparts = trx_parts;
-	ret = TRX_PARTS;
+	return TRX_PARTS;
 
 free_hdr:
 	vfree(header);
+free_parts:
+	kfree(trx_parts);
 out:
 	return ret;
 }

+ 1 - 1
target/linux/ar71xx/patches-3.2/308-wrt160nl_part-3.2-fixes.patch

@@ -1,6 +1,6 @@
 --- a/drivers/mtd/wrt160nl_part.c
 +++ b/drivers/mtd/wrt160nl_part.c
-@@ -85,7 +85,7 @@ static struct mtd_partition trx_parts[TR
+@@ -83,7 +83,7 @@ struct wrt160nl_header {
  
  static int wrt160nl_parse_partitions(struct mtd_info *master,
  				     struct mtd_partition **pparts,