qdev-monitor: add option to report GenericError from find_device_state
Here we just prepare for the following patch, making possible to report GenericError as recommended. This patch doesn't aim to prevent further use of DeviceNotFound by future interfaces: - find_device_state() is used in blk_by_qdev_id() and qmp_get_blk() functions, which may lead to spread of DeviceNotFound anyway - also, nothing prevent simply copy-pasting find_device_state() calls with false argument Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Reviewed-by: Markus Armbruster <armbru@redhat.com> Acked-by: Raphael Norwitz <raphael@enfabrica.net> Message-Id: <20240920094936.450987-2-vsementsov@yandex-team.ru> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
fa19fe4e3a
commit
9e4cc917e0
@ -885,13 +885,20 @@ void qmp_device_add(QDict *qdict, QObject **ret_data, Error **errp)
|
||||
object_unref(OBJECT(dev));
|
||||
}
|
||||
|
||||
static DeviceState *find_device_state(const char *id, Error **errp)
|
||||
/*
|
||||
* Note that creating new APIs using error classes other than GenericError is
|
||||
* not recommended. Set use_generic_error=true for new interfaces.
|
||||
*/
|
||||
static DeviceState *find_device_state(const char *id, bool use_generic_error,
|
||||
Error **errp)
|
||||
{
|
||||
Object *obj = object_resolve_path_at(qdev_get_peripheral(), id);
|
||||
DeviceState *dev;
|
||||
|
||||
if (!obj) {
|
||||
error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
|
||||
error_set(errp,
|
||||
(use_generic_error ?
|
||||
ERROR_CLASS_GENERIC_ERROR : ERROR_CLASS_DEVICE_NOT_FOUND),
|
||||
"Device '%s' not found", id);
|
||||
return NULL;
|
||||
}
|
||||
@ -956,7 +963,7 @@ void qdev_unplug(DeviceState *dev, Error **errp)
|
||||
|
||||
void qmp_device_del(const char *id, Error **errp)
|
||||
{
|
||||
DeviceState *dev = find_device_state(id, errp);
|
||||
DeviceState *dev = find_device_state(id, false, errp);
|
||||
if (dev != NULL) {
|
||||
if (dev->pending_deleted_event &&
|
||||
(dev->pending_deleted_expires_ms == 0 ||
|
||||
@ -1076,7 +1083,7 @@ BlockBackend *blk_by_qdev_id(const char *id, Error **errp)
|
||||
|
||||
GLOBAL_STATE_CODE();
|
||||
|
||||
dev = find_device_state(id, errp);
|
||||
dev = find_device_state(id, false, errp);
|
||||
if (dev == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user