[PATCH] cfi: Fixup of write errors on XIP

Korolev, Alexey alexey.korolev at intel.com
Wed Feb 22 13:17:09 EST 2006


Hi all,
 
Here is fixup of issue I have seen on XIP configuration. 
Sometimes I received write errors with message "buffer write error
(status timeout)" on test  which did read write and erase on several
volumes at the same time.
 
I investigated the issue. 
The scenario of the issue is following:
 
1. do_write_buffer 
2. Waiting for write complete in xip_udelay
3. System Interrupt
4. Write suspend
5. Rescheduling
6. Block erasing by other process. ( This operation typically took
rather long time )
7. Complete, rescheduling 
8. Return to write (write is not complete due to suspend ). 
9. Check timeout. Time is up.
10. Error.
 
I made small fixup for these issue. Please see patch below.

Thanks,
Alexey

===================================================================
--- c/drivers/mtd/chips/cfi_cmdset_0001.c	2006-02-22
20:58:05.869203280 +0300
+++ b/drivers/mtd/chips/cfi_cmdset_0001.c	2006-02-22
20:55:42.272033368 +0300
@@ -1571,6 +1571,7 @@
 	/* GO GO GO */
 	map_write(map, CMD(0xd0), cmd_adr);
 	chip->state = FL_WRITING;
+	chip->write_suspended = 0;
 
 	INVALIDATE_CACHE_UDELAY(map, chip, cmd_adr,
 				adr, len,
@@ -1592,6 +1593,12 @@
 			continue;
 		}
 
+		/* Somebody suspended write. We should reset timeo. */
+		if (chip->write_suspended) {
+			chip->write_suspended = 0;
+			timeo = jiffies + (HZ/2);
+		}
+		
 		status = map_read(map, cmd_adr);
 		if (map_word_andequal(map, status, status_OK,
status_OK))
 			break;
====================================================================





More information about the linux-mtd mailing list