diff options
author | Stewart Smith <stewart@linux.ibm.com> | 2018-12-03 11:05:42 +1100 |
---|---|---|
committer | Stewart Smith <stewart@linux.ibm.com> | 2018-12-11 22:37:41 -0600 |
commit | 1534ab1dca13403ade020be26989a95156f321e0 (patch) | |
tree | 12de797958b26095921ef8e3b210f140626b044b | |
parent | eb0226273239d806f404712aacc42961130c7079 (diff) | |
download | skiboot-1534ab1dca13403ade020be26989a95156f321e0.zip skiboot-1534ab1dca13403ade020be26989a95156f321e0.tar.gz skiboot-1534ab1dca13403ade020be26989a95156f321e0.tar.bz2 |
libflash/file: greatly increase perf of file_erase()
Do 4096 byte chunks not 8 byte chunks. A ffspart invocation constructing
a 64MB PNOR goes from a couple of seconds to ~0.1seconds with this
patch.
Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
Reviewed-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
-rw-r--r-- | libflash/file.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/libflash/file.c b/libflash/file.c index 49f6177..72765b5 100644 --- a/libflash/file.c +++ b/libflash/file.c @@ -117,15 +117,17 @@ static int file_write(struct blocklevel_device *bl, uint64_t dst, const void *sr */ static int file_erase(struct blocklevel_device *bl, uint64_t dst, uint64_t len) { - unsigned long long int d = ULLONG_MAX; + char buf[4096]; int i = 0; int rc; + memset(buf, ~0, sizeof(buf)); + while (len - i > 0) { - rc = file_write(bl, dst + i, &d, len - i > sizeof(d) ? sizeof(d) : len - i); + rc = file_write(bl, dst + i, buf, len - i > sizeof(buf) ? sizeof(buf) : len - i); if (rc) return rc; - i += len - i > sizeof(d) ? sizeof(d) : len - i; + i += (len - i > sizeof(buf)) ? sizeof(buf) : len - i; } return 0; |