Author: stefanct Date: Tue Aug 13 00:58:43 2013 New Revision: 1707 URL: http://flashrom.org/trac/flashrom/changeset/1707
Log: Fix verification operation.
I broke this in r1702 where I enabled avoidance of the verification step if we did not modify anything in the erase/write step. The problem is that all_skipped is initialized to true and hence it would only ever verify if there have been changes noted in the erase/write step. This obviously breaks the verification operation (-v/--verify) because there we never enter the erase/write loop.
The better alternative would be to enable (the implicit) verification in the write loop and not in cli_classic.c. This would require a bigger change due to the existance of dont_verify_it. Eventually this is the right thing to do but not so shortly before a release.
Signed-off-by: Stefan Tauner stefan.tauner@student.tuwien.ac.at Acked-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Modified: trunk/cli_classic.c trunk/flashrom.c
Modified: trunk/cli_classic.c ============================================================================== --- trunk/cli_classic.c Thu Aug 8 14:00:19 2013 (r1706) +++ trunk/cli_classic.c Tue Aug 13 00:58:43 2013 (r1707) @@ -175,8 +175,7 @@ cli_classic_abort_usage(); } if (dont_verify_it) { - fprintf(stderr, "--verify and --noverify are" - "mutually exclusive. Aborting.\n"); + fprintf(stderr, "--verify and --noverify are mutually exclusive. Aborting.\n"); cli_classic_abort_usage(); } filename = strdup(optarg); @@ -184,8 +183,7 @@ break; case 'n': if (verify_it) { - fprintf(stderr, "--verify and --noverify are" - "mutually exclusive. Aborting.\n"); + fprintf(stderr, "--verify and --noverify are mutually exclusive. Aborting.\n"); cli_classic_abort_usage(); } dont_verify_it = 1;
Modified: trunk/flashrom.c ============================================================================== --- trunk/flashrom.c Thu Aug 8 14:00:19 2013 (r1706) +++ trunk/flashrom.c Tue Aug 13 00:58:43 2013 (r1707) @@ -335,6 +335,9 @@ */ static int may_register_shutdown = 0;
+/* Did we change something or was every erase/write skipped (if any)? */ +static bool all_skipped = true; + static int check_block_eraser(const struct flashctx *flash, int k, int log);
/* Register a function to be executed on programmer shutdown. @@ -1309,7 +1312,6 @@ return ret; }
-static bool all_skipped = true; static int erase_and_write_block_helper(struct flashctx *flash, unsigned int start, unsigned int len, uint8_t *curcontents, @@ -1995,7 +1997,8 @@ } }
- if (verify_it && !all_skipped) { + /* Verify only if we either did not try to write (verify operation) or actually changed something. */ + if (verify_it && (!write_it || !all_skipped)) { msg_cinfo("Verifying flash... ");
if (write_it) {