Initial commit
This commit is contained in:
		| @@ -0,0 +1,44 @@ | ||||
| --- a/drivers/mtd/parsers/redboot.c | ||||
| +++ b/drivers/mtd/parsers/redboot.c | ||||
| @@ -90,12 +90,18 @@ static int parse_redboot_partitions(stru | ||||
|   | ||||
|  	parse_redboot_of(master); | ||||
|   | ||||
| +	buf = vmalloc(master->erasesize); | ||||
| +	if (!buf) | ||||
| +		return -ENOMEM; | ||||
| + | ||||
| + restart: | ||||
|  	if ( directory < 0 ) { | ||||
|  		offset = master->size + directory * master->erasesize; | ||||
|  		while (mtd_block_isbad(master, offset)) { | ||||
|  			if (!offset) { | ||||
|  			nogood: | ||||
|  				printk(KERN_NOTICE "Failed to find a non-bad block to check for RedBoot partition table\n"); | ||||
| +				vfree(buf); | ||||
|  				return -EIO; | ||||
|  			} | ||||
|  			offset -= master->erasesize; | ||||
| @@ -108,10 +114,6 @@ static int parse_redboot_partitions(stru | ||||
|  				goto nogood; | ||||
|  		} | ||||
|  	} | ||||
| -	buf = vmalloc(master->erasesize); | ||||
| - | ||||
| -	if (!buf) | ||||
| -		return -ENOMEM; | ||||
|   | ||||
|  	printk(KERN_NOTICE "Searching for RedBoot partition table in %s at offset 0x%lx\n", | ||||
|  	       master->name, offset); | ||||
| @@ -184,6 +186,11 @@ static int parse_redboot_partitions(stru | ||||
|  	} | ||||
|  	if (i == numslots) { | ||||
|  		/* Didn't find it */ | ||||
| +		if (offset + master->erasesize < master->size) { | ||||
| +			/* not at the end of the flash yet, maybe next block :) */ | ||||
| +			directory++; | ||||
| +			goto restart; | ||||
| +		} | ||||
|  		printk(KERN_NOTICE "No RedBoot partition table detected in %s\n", | ||||
|  		       master->name); | ||||
|  		ret = 0; | ||||
		Reference in New Issue
	
	Block a user
	 domenico
					domenico