aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Jeffery <andrew@aj.id.au>2018-10-09 00:32:30 -0700
committerStewart Smith <stewart@linux.ibm.com>2018-10-31 16:49:21 +1100
commit67531d1deacc8a0cbf94580dd28a410be9106061 (patch)
tree09ac8c937f747063bc222b7205c0dd1853b63ce9
parentf976e7788a3b0bace1014c58a957c2db329d0d43 (diff)
downloadskiboot-67531d1deacc8a0cbf94580dd28a410be9106061.zip
skiboot-67531d1deacc8a0cbf94580dd28a410be9106061.tar.gz
skiboot-67531d1deacc8a0cbf94580dd28a410be9106061.tar.bz2
core/flash: Unlock around blocklevel calls in NVRAM accessors
[ Upstream commit c0b84547521da5be92eea9e4bef60a1971cca283 ] This ensures progress when we don't have interrupts available for IPMI. Signed-off-by: Andrew Jeffery <andrew@aj.id.au> Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
-rw-r--r--core/flash.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/core/flash.c b/core/flash.c
index d420017..a4b7c80 100644
--- a/core/flash.c
+++ b/core/flash.c
@@ -118,8 +118,13 @@ static int flash_nvram_start_read(void *dst, uint32_t src, uint32_t len)
goto out;
}
+ nvram_flash->busy = true;
+ unlock(&flash_lock);
+
rc = blocklevel_read(nvram_flash->bl, nvram_offset + src, dst, len);
+ lock(&flash_lock);
+ nvram_flash->busy = false;
out:
unlock(&flash_lock);
if (!rc)
@@ -147,8 +152,14 @@ static int flash_nvram_write(uint32_t dst, void *src, uint32_t len)
rc = OPAL_PARAMETER;
goto out;
}
+
+ nvram_flash->busy = true;
+ unlock(&flash_lock);
+
rc = blocklevel_write(nvram_flash->bl, nvram_offset + dst, src, len);
+ lock(&flash_lock);
+ nvram_flash->busy = false;
out:
unlock(&flash_lock);
return rc;