mirror of https://gitee.com/openkylin/qemu.git
Check block driver read error in pflash_cfi0x
If a flash file of size smaller than the flash size is specified in the -pflash option, the block driver returns error. But the pflash_cfi0x ignores the error. This results in a flash content of all zeroes. And the simulation aborts while executing code. This patch adds the checks for errors from bdrv_read and escalates it to the calling code. Signed-off-by: Vijay Kumar B. <vijaykumar@bravegnu.org> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
4c0960c0c4
commit
d0e7605ee0
|
@ -507,6 +507,7 @@ pflash_t *pflash_cfi01_register(target_phys_addr_t base, ram_addr_t off,
|
|||
{
|
||||
pflash_t *pfl;
|
||||
target_phys_addr_t total_len;
|
||||
int ret;
|
||||
|
||||
total_len = sector_len * nb_blocs;
|
||||
|
||||
|
@ -530,7 +531,12 @@ pflash_t *pflash_cfi01_register(target_phys_addr_t base, ram_addr_t off,
|
|||
pfl->bs = bs;
|
||||
if (pfl->bs) {
|
||||
/* read the initial flash content */
|
||||
bdrv_read(pfl->bs, 0, pfl->storage, total_len >> 9);
|
||||
ret = bdrv_read(pfl->bs, 0, pfl->storage, total_len >> 9);
|
||||
if (ret < 0) {
|
||||
cpu_unregister_io_memory(pfl->fl_mem);
|
||||
qemu_free(pfl);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
#if 0 /* XXX: there should be a bit to set up read-only,
|
||||
* the same way the hardware does (with WP pin).
|
||||
|
|
|
@ -547,6 +547,7 @@ pflash_t *pflash_cfi02_register(target_phys_addr_t base, ram_addr_t off,
|
|||
{
|
||||
pflash_t *pfl;
|
||||
int32_t chip_len;
|
||||
int ret;
|
||||
|
||||
chip_len = sector_len * nb_blocs;
|
||||
/* XXX: to be fixed */
|
||||
|
@ -568,7 +569,12 @@ pflash_t *pflash_cfi02_register(target_phys_addr_t base, ram_addr_t off,
|
|||
pfl->bs = bs;
|
||||
if (pfl->bs) {
|
||||
/* read the initial flash content */
|
||||
bdrv_read(pfl->bs, 0, pfl->storage, chip_len >> 9);
|
||||
ret = bdrv_read(pfl->bs, 0, pfl->storage, chip_len >> 9);
|
||||
if (ret < 0) {
|
||||
cpu_unregister_io_memory(pfl->fl_mem);
|
||||
qemu_free(pfl);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
#if 0 /* XXX: there should be a bit to set up read-only,
|
||||
* the same way the hardware does (with WP pin).
|
||||
|
|
Loading…
Reference in New Issue