diff options
author | Graff Yang <graff.yang@gmail.com> | 2009-03-02 03:31:29 -0500 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2009-03-20 14:32:17 -0400 |
commit | 6ac15e92dfd3064ae484e2e823890622476c4356 (patch) | |
tree | 4aced435b7d4cd9cb9fffb83694e6fa15f94fe29 /drivers/mtd/chips | |
parent | 610f75e74b636f933bc3e379a88a10f883b91332 (diff) |
[MTD] [CHIPS] cfi_cmdset_0001.c: Fix a bug in inval_cache_and_wait_for_operation().
If the inval_cache_and_wait_for_operation() is re-entered by write operation when erase
operation is in progress, the chip->erase_suspended will be cleared, this cause the erase
timeo is not reset and will result time out error for erase.
Signed-off-by: Graff Yang <graff.yang@gmail.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/mtd/chips')
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0001.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c index f5ab6fa1057b..c240454fd113 100644 --- a/drivers/mtd/chips/cfi_cmdset_0001.c +++ b/drivers/mtd/chips/cfi_cmdset_0001.c | |||
@@ -1236,10 +1236,14 @@ static int inval_cache_and_wait_for_operation( | |||
1236 | remove_wait_queue(&chip->wq, &wait); | 1236 | remove_wait_queue(&chip->wq, &wait); |
1237 | spin_lock(chip->mutex); | 1237 | spin_lock(chip->mutex); |
1238 | } | 1238 | } |
1239 | if (chip->erase_suspended || chip->write_suspended) { | 1239 | if (chip->erase_suspended && chip_state == FL_ERASING) { |
1240 | /* Suspend has occured while sleep: reset timeout */ | 1240 | /* Erase suspend occured while sleep: reset timeout */ |
1241 | timeo = reset_timeo; | 1241 | timeo = reset_timeo; |
1242 | chip->erase_suspended = 0; | 1242 | chip->erase_suspended = 0; |
1243 | } | ||
1244 | if (chip->write_suspended && chip_state == FL_WRITING) { | ||
1245 | /* Write suspend occured while sleep: reset timeout */ | ||
1246 | timeo = reset_timeo; | ||
1243 | chip->write_suspended = 0; | 1247 | chip->write_suspended = 0; |
1244 | } | 1248 | } |
1245 | } | 1249 | } |