mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
pflash: Require backend size to match device, improve errors
We reject undersized backends with a rather enigmatic "failed to read the initial flash content" error. For instance: $ qemu-system-ppc64 -S -display none -M sam460ex -drive if=pflash,format=raw,file=eins.img qemu-system-ppc64: Initialization of device cfi.pflash02 failed: failed to read the initial flash content We happily accept oversized images, ignoring their tail. Throwing away parts of firmware that way is pretty much certain to end in an even more enigmatic failure to boot. Require the backend's size to match the device's size exactly. Report mismatch like this: qemu-system-ppc64: Initialization of device cfi.pflash01 failed: device requires 1048576 bytes, block backend provides 512 bytes Improve the error for actual read failures to "can't read block backend". To avoid duplicating even more code between the two pflash device models, do all that in new helper blk_check_size_and_read_all(). The error reporting can still be confusing. For instance: qemu-system-ppc64 -S -display none -M taihu -drive if=pflash,format=raw,file=eins.img -drive if=pflash,unit=1,format=raw,file=zwei.img qemu-system-ppc64: Initialization of device cfi.pflash02 failed: device requires 2097152 bytes, block backend provides 512 bytes Leaves the user guessing which of the two -drive is wrong. Mention the issue in a TODO comment. Suggested-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20190319163551.32499-2-armbru@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
This commit is contained in:
parent
d132baa05e
commit
06f1521795
4 changed files with 59 additions and 11 deletions
|
@ -11,7 +11,7 @@
|
|||
#ifndef HW_BLOCK_H
|
||||
#define HW_BLOCK_H
|
||||
|
||||
#include "qemu-common.h"
|
||||
#include "exec/hwaddr.h"
|
||||
#include "qapi/qapi-types-block-core.h"
|
||||
|
||||
/* Configuration */
|
||||
|
@ -70,6 +70,11 @@ static inline unsigned int get_physical_block_exp(BlockConf *conf)
|
|||
DEFINE_PROP_BLOCKDEV_ON_ERROR("werror", _state, _conf.werror, \
|
||||
BLOCKDEV_ON_ERROR_AUTO)
|
||||
|
||||
/* Backend access helpers */
|
||||
|
||||
bool blk_check_size_and_read_all(BlockBackend *blk, void *buf, hwaddr size,
|
||||
Error **errp);
|
||||
|
||||
/* Configuration helpers */
|
||||
|
||||
bool blkconf_geometry(BlockConf *conf, int *trans,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue