diff options
author | Douglas Anderson <dianders@chromium.org> | 2021-01-29 16:35:24 -0800 |
---|---|---|
committer | Angel Pons <th3fanbus@gmail.com> | 2021-02-01 15:21:29 +0000 |
commit | a2f2f3f5ee1bb9c953f098f019c3ad09657cba38 (patch) | |
tree | ad669a30400a0bcee5c5ab034e96ad20a0076c68 /cbtable.c | |
parent | 5905270fc7a8b0b59dbff8f6832c8b42604e04ed (diff) | |
download | flashrom-a2f2f3f5ee1bb9c953f098f019c3ad09657cba38.tar.gz flashrom-a2f2f3f5ee1bb9c953f098f019c3ad09657cba38.tar.bz2 flashrom-a2f2f3f5ee1bb9c953f098f019c3ad09657cba38.zip |
linux_mtd: Disable buffering on the mtd device
We open the device node for the MTD device with this:
dev_fp = fopen(dev_path, "r+")
In C fopen() is allowed to provide _buffered_ access to the file.
That means that the standard library is allowed to read ahead and/or
return cached data. That's really not what we want for something like
this. Let's turn it off.
This fixes a problem where flashrom would sometimes fail to "verify"
that it erased the flash. The error message would look something like
this:
Erasing and writing flash chip... FAILED at 0x0000e220! Expected=0xff, Found=0xe9, failed byte count from 0x0000e200-0x0000e2ff: 0xdc
failed byte count from 0x0000e000-0x0000efff: 0xffffffff
ERASE_FAILED
FAILED!
Uh oh. Erase/write failed. Checking if anything changed.
After the failure I could read the flash device with a new invocation
of flashrom and I would see that, indeed, the erase had worked.
Tracing in the kernel showed that when the failure happened we saw a
pattern that looked like this:
* Read 0x0b00 bytes starting at 0x0000d000
* Read 0x1000 bytes starting at 0x0000db00
* Erase 0x1000 bytes starting at 0x0000e000
...and then there was _not_ a read after the erase. It can be assumed
that, since userspace had already read 0xdb00 - 0xeaff that it was
looking at old buffered data after the erase.
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Change-Id: I989afd83a33013b2756a0090d6b08245613215c6
Reviewed-on: https://review.coreboot.org/c/flashrom/+/50155
Reviewed-by: Hung-Te Lin <hungte@chromium.org>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'cbtable.c')
0 files changed, 0 insertions, 0 deletions