Error reporting patches for 2024-10-18
-----BEGIN PGP SIGNATURE----- iQJGBAABCAAwFiEENUvIs9frKmtoZ05fOHC0AOuRhlMFAmcSXQQSHGFybWJydUBy ZWRoYXQuY29tAAoJEDhwtADrkYZTRKcP/R/nmE22MJBDT8LLZEaQpvkqEURpHFVY uHcLPBfezWy2A9qgWiPMKEs9Q7L3qpJq2FKCPFx7VyzctMcYt2W70AzVpaBOBkTN g5JAyFaJ3cGj6VT/HDZrBeIpySHZI1ynZyRqLvay5aV6l2dIzMWAcpFI4w6He0yJ 9CVV5z8K3zh7a7HjkBeWeKn75W2v6cE1PnRlPIsA4Q05LGVU6iHOhZ9LCJYpgIlL StJh1zlscSItMbHnfdx0iEiEuoP/nqwoFbA+XpDRzZOLX6+dm2oVwFoApv95bE+/ CZ8QIy3zda6+V1AGhTfBqDV/NfZZCqzi58YPOo+ny4+sNKXsU7/z2OQzGNVd7NqF fpflJAPOe+1tuAd/c40VrJn/DN+TgYVV199kMNfbBojMNaoJh262uvQ9L0NuLcW+ v0cKYRJsTIIHOFj7NwHR8ALY6ZlE3pdLvz9AivFuLLtK+RtfKw2YQvTDTmqXgRsG J6glqTeN+2M9cYb7/r6Kc/P9TGEaSEoCwmAadfmfwLSW/m1UkrqNzn+iC4m1iLe1 bq+N1iW5T4nhibw8dFCvD4AwFSP9VQNAy5AlKW78Y+K/xAC2781A8PHV9QAIM1/t Kz6FRts0Jg6uyB0I7AAZ9k18i1oiEqoz3SjGWpQlTiI7VCMCpgHX6nvwWFPf3Zxa Rn0SUg10eUW9 =sR8Q -----END PGP SIGNATURE----- Merge tag 'pull-error-2024-10-18' of https://repo.or.cz/qemu/armbru into staging Error reporting patches for 2024-10-18 # -----BEGIN PGP SIGNATURE----- # # iQJGBAABCAAwFiEENUvIs9frKmtoZ05fOHC0AOuRhlMFAmcSXQQSHGFybWJydUBy # ZWRoYXQuY29tAAoJEDhwtADrkYZTRKcP/R/nmE22MJBDT8LLZEaQpvkqEURpHFVY # uHcLPBfezWy2A9qgWiPMKEs9Q7L3qpJq2FKCPFx7VyzctMcYt2W70AzVpaBOBkTN # g5JAyFaJ3cGj6VT/HDZrBeIpySHZI1ynZyRqLvay5aV6l2dIzMWAcpFI4w6He0yJ # 9CVV5z8K3zh7a7HjkBeWeKn75W2v6cE1PnRlPIsA4Q05LGVU6iHOhZ9LCJYpgIlL # StJh1zlscSItMbHnfdx0iEiEuoP/nqwoFbA+XpDRzZOLX6+dm2oVwFoApv95bE+/ # CZ8QIy3zda6+V1AGhTfBqDV/NfZZCqzi58YPOo+ny4+sNKXsU7/z2OQzGNVd7NqF # fpflJAPOe+1tuAd/c40VrJn/DN+TgYVV199kMNfbBojMNaoJh262uvQ9L0NuLcW+ # v0cKYRJsTIIHOFj7NwHR8ALY6ZlE3pdLvz9AivFuLLtK+RtfKw2YQvTDTmqXgRsG # J6glqTeN+2M9cYb7/r6Kc/P9TGEaSEoCwmAadfmfwLSW/m1UkrqNzn+iC4m1iLe1 # bq+N1iW5T4nhibw8dFCvD4AwFSP9VQNAy5AlKW78Y+K/xAC2781A8PHV9QAIM1/t # Kz6FRts0Jg6uyB0I7AAZ9k18i1oiEqoz3SjGWpQlTiI7VCMCpgHX6nvwWFPf3Zxa # Rn0SUg10eUW9 # =sR8Q # -----END PGP SIGNATURE----- # gpg: Signature made Fri 18 Oct 2024 14:05:08 BST # gpg: using RSA key 354BC8B3D7EB2A6B68674E5F3870B400EB918653 # gpg: issuer "armbru@redhat.com" # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" [full] # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" [full] # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * tag 'pull-error-2024-10-18' of https://repo.or.cz/qemu/armbru: qerror: QERR_PROPERTY_VALUE_OUT_OF_RANGE is no longer used, drop hw/intc/openpic: Improve errors for out of bounds property values target/i386/cpu: Improve errors for out of bounds property values target/i386/cpu: Avoid mixing signed and unsigned in property setters block: Adjust check_block_size() signature block: Improve errors about block sizes error: Drop superfluous #include "qapi/qmp/qerror.h" qga: Improve error for guest-set-user-password parameter @crypted qga/qapi-schema: Drop obsolete note on "unsupported" errors Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
19a989096e
@ -273,7 +273,6 @@ static int vduse_blk_exp_create(BlockExport *exp, BlockExportOptions *opts,
|
||||
uint64_t logical_block_size = VIRTIO_BLK_SECTOR_SIZE;
|
||||
uint16_t num_queues = VDUSE_DEFAULT_NUM_QUEUE;
|
||||
uint16_t queue_size = VDUSE_DEFAULT_QUEUE_SIZE;
|
||||
Error *local_err = NULL;
|
||||
struct virtio_blk_config config = { 0 };
|
||||
uint64_t features;
|
||||
int i, ret;
|
||||
@ -297,10 +296,8 @@ static int vduse_blk_exp_create(BlockExport *exp, BlockExportOptions *opts,
|
||||
|
||||
if (vblk_opts->has_logical_block_size) {
|
||||
logical_block_size = vblk_opts->logical_block_size;
|
||||
check_block_size(exp->id, "logical-block-size", logical_block_size,
|
||||
&local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
if (!check_block_size("logical-block-size", logical_block_size,
|
||||
errp)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
@ -319,7 +319,6 @@ static int vu_blk_exp_create(BlockExport *exp, BlockExportOptions *opts,
|
||||
{
|
||||
VuBlkExport *vexp = container_of(exp, VuBlkExport, export);
|
||||
BlockExportOptionsVhostUserBlk *vu_opts = &opts->u.vhost_user_blk;
|
||||
Error *local_err = NULL;
|
||||
uint64_t logical_block_size;
|
||||
uint16_t num_queues = VHOST_USER_BLK_NUM_QUEUES_DEFAULT;
|
||||
|
||||
@ -330,10 +329,7 @@ static int vu_blk_exp_create(BlockExport *exp, BlockExportOptions *opts,
|
||||
} else {
|
||||
logical_block_size = VIRTIO_BLK_SECTOR_SIZE;
|
||||
}
|
||||
check_block_size(exp->id, "logical-block-size", logical_block_size,
|
||||
&local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
if (!check_block_size("logical-block-size", logical_block_size, errp)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -588,18 +588,14 @@ const PropertyInfo qdev_prop_losttickpolicy = {
|
||||
static void set_blocksize(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
DeviceState *dev = DEVICE(obj);
|
||||
Property *prop = opaque;
|
||||
uint32_t *ptr = object_field_prop_ptr(obj, prop);
|
||||
uint64_t value;
|
||||
Error *local_err = NULL;
|
||||
|
||||
if (!visit_type_size(v, name, &value, errp)) {
|
||||
return;
|
||||
}
|
||||
check_block_size(dev->id ? : "", name, value, &local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
if (!check_block_size(name, value, errp)) {
|
||||
return;
|
||||
}
|
||||
*ptr = value;
|
||||
|
@ -41,7 +41,6 @@
|
||||
#include "hw/pci/msi.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/bitops.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "qemu/module.h"
|
||||
#include "qemu/timer.h"
|
||||
#include "qemu/error-report.h"
|
||||
@ -1535,9 +1534,7 @@ static void openpic_realize(DeviceState *dev, Error **errp)
|
||||
};
|
||||
|
||||
if (opp->nb_cpus > MAX_CPU) {
|
||||
error_setg(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE,
|
||||
TYPE_OPENPIC, "nb_cpus", (uint64_t)opp->nb_cpus,
|
||||
(uint64_t)0, (uint64_t)MAX_CPU);
|
||||
error_setg(errp, "property 'nb_cpus' can be at most %d", MAX_CPU);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -23,10 +23,4 @@
|
||||
#define QERR_MISSING_PARAMETER \
|
||||
"Parameter '%s' is missing"
|
||||
|
||||
#define QERR_PROPERTY_VALUE_OUT_OF_RANGE \
|
||||
"Property %s.%s doesn't take value %" PRId64 " (minimum: %" PRId64 ", maximum: %" PRId64 ")"
|
||||
|
||||
#define QERR_UNSUPPORTED \
|
||||
"this feature or command is not currently supported"
|
||||
|
||||
#endif /* QERROR_H */
|
||||
|
@ -12,7 +12,6 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qga-qapi-commands.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/queue.h"
|
||||
#include "commands-common.h"
|
||||
|
@ -15,7 +15,6 @@
|
||||
#include "qapi/error.h"
|
||||
#include "qga-qapi-commands.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "commands-common.h"
|
||||
#include "cutils.h"
|
||||
#include <mntent.h>
|
||||
|
@ -18,7 +18,6 @@
|
||||
#include <dirent.h>
|
||||
#include "qga-qapi-commands.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "qemu/host-utils.h"
|
||||
#include "qemu/sockets.h"
|
||||
#include "qemu/base64.h"
|
||||
|
@ -1914,7 +1914,7 @@ void qmp_guest_set_user_password(const char *username,
|
||||
GError *gerr = NULL;
|
||||
|
||||
if (crypted) {
|
||||
error_setg(errp, QERR_UNSUPPORTED);
|
||||
error_setg(errp, "'crypted' must be off on this host");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1,15 +1,6 @@
|
||||
# *-*- Mode: Python -*-*
|
||||
# vim: filetype=python
|
||||
|
||||
##
|
||||
# = General note concerning the use of guest agent interfaces
|
||||
#
|
||||
# "unsupported" is a higher-level error than the errors that
|
||||
# individual commands might document. The caller should always be
|
||||
# prepared to receive QERR_UNSUPPORTED, even if the given command
|
||||
# doesn't specify it, or doesn't document any failure mode at all.
|
||||
##
|
||||
|
||||
##
|
||||
# = QEMU guest agent protocol commands and structs
|
||||
##
|
||||
|
@ -31,7 +31,6 @@
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/qapi-visit-machine.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "standard-headers/asm-x86/kvm_para.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/i386/topology.h"
|
||||
@ -5440,13 +5439,13 @@ static void x86_cpuid_version_get_family(Object *obj, Visitor *v,
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
CPUX86State *env = &cpu->env;
|
||||
int64_t value;
|
||||
uint64_t value;
|
||||
|
||||
value = (env->cpuid_version >> 8) & 0xf;
|
||||
if (value == 0xf) {
|
||||
value += (env->cpuid_version >> 20) & 0xff;
|
||||
}
|
||||
visit_type_int(v, name, &value, errp);
|
||||
visit_type_uint64(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void x86_cpuid_version_set_family(Object *obj, Visitor *v,
|
||||
@ -5455,16 +5454,15 @@ static void x86_cpuid_version_set_family(Object *obj, Visitor *v,
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
CPUX86State *env = &cpu->env;
|
||||
const int64_t min = 0;
|
||||
const int64_t max = 0xff + 0xf;
|
||||
int64_t value;
|
||||
const uint64_t max = 0xff + 0xf;
|
||||
uint64_t value;
|
||||
|
||||
if (!visit_type_int(v, name, &value, errp)) {
|
||||
if (!visit_type_uint64(v, name, &value, errp)) {
|
||||
return;
|
||||
}
|
||||
if (value < min || value > max) {
|
||||
error_setg(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, "",
|
||||
name ? name : "null", value, min, max);
|
||||
if (value > max) {
|
||||
error_setg(errp, "parameter '%s' can be at most %" PRIu64,
|
||||
name ? name : "null", max);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -5482,11 +5480,11 @@ static void x86_cpuid_version_get_model(Object *obj, Visitor *v,
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
CPUX86State *env = &cpu->env;
|
||||
int64_t value;
|
||||
uint64_t value;
|
||||
|
||||
value = (env->cpuid_version >> 4) & 0xf;
|
||||
value |= ((env->cpuid_version >> 16) & 0xf) << 4;
|
||||
visit_type_int(v, name, &value, errp);
|
||||
visit_type_uint64(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void x86_cpuid_version_set_model(Object *obj, Visitor *v,
|
||||
@ -5495,16 +5493,15 @@ static void x86_cpuid_version_set_model(Object *obj, Visitor *v,
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
CPUX86State *env = &cpu->env;
|
||||
const int64_t min = 0;
|
||||
const int64_t max = 0xff;
|
||||
int64_t value;
|
||||
const uint64_t max = 0xff;
|
||||
uint64_t value;
|
||||
|
||||
if (!visit_type_int(v, name, &value, errp)) {
|
||||
if (!visit_type_uint64(v, name, &value, errp)) {
|
||||
return;
|
||||
}
|
||||
if (value < min || value > max) {
|
||||
error_setg(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, "",
|
||||
name ? name : "null", value, min, max);
|
||||
if (value > max) {
|
||||
error_setg(errp, "parameter '%s' can be at most %" PRIu64,
|
||||
name ? name : "null", max);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -5518,10 +5515,10 @@ static void x86_cpuid_version_get_stepping(Object *obj, Visitor *v,
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
CPUX86State *env = &cpu->env;
|
||||
int64_t value;
|
||||
uint64_t value;
|
||||
|
||||
value = env->cpuid_version & 0xf;
|
||||
visit_type_int(v, name, &value, errp);
|
||||
visit_type_uint64(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void x86_cpuid_version_set_stepping(Object *obj, Visitor *v,
|
||||
@ -5530,16 +5527,15 @@ static void x86_cpuid_version_set_stepping(Object *obj, Visitor *v,
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
CPUX86State *env = &cpu->env;
|
||||
const int64_t min = 0;
|
||||
const int64_t max = 0xf;
|
||||
int64_t value;
|
||||
const uint64_t max = 0xf;
|
||||
uint64_t value;
|
||||
|
||||
if (!visit_type_int(v, name, &value, errp)) {
|
||||
if (!visit_type_uint64(v, name, &value, errp)) {
|
||||
return;
|
||||
}
|
||||
if (value < min || value > max) {
|
||||
error_setg(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, "",
|
||||
name ? name : "null", value, min, max);
|
||||
if (value > max) {
|
||||
error_setg(errp, "parameter '%s' can be at most %" PRIu64,
|
||||
name ? name : "null", max);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -5633,16 +5629,15 @@ static void x86_cpuid_set_tsc_freq(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(obj);
|
||||
const int64_t min = 0;
|
||||
const int64_t max = INT64_MAX;
|
||||
int64_t value;
|
||||
|
||||
if (!visit_type_int(v, name, &value, errp)) {
|
||||
return;
|
||||
}
|
||||
if (value < min || value > max) {
|
||||
error_setg(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE, "",
|
||||
name ? name : "null", value, min, max);
|
||||
if (value < 0 || value > max) {
|
||||
error_setg(errp, "parameter '%s' can be at most %" PRId64,
|
||||
name ? name : "null", max);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -10,12 +10,10 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qapi/qmp/qerror.h"
|
||||
#include "block-helpers.h"
|
||||
|
||||
/**
|
||||
* check_block_size:
|
||||
* @id: The unique ID of the object
|
||||
* @name: The name of the property being validated
|
||||
* @value: The block size in bytes
|
||||
* @errp: A pointer to an area to store an error
|
||||
@ -24,23 +22,23 @@
|
||||
* 1. At least MIN_BLOCK_SIZE
|
||||
* 2. No larger than MAX_BLOCK_SIZE
|
||||
* 3. A power of 2
|
||||
*
|
||||
* Returns: true on success, false on failure
|
||||
*/
|
||||
void check_block_size(const char *id, const char *name, int64_t value,
|
||||
Error **errp)
|
||||
bool check_block_size(const char *name, int64_t value, Error **errp)
|
||||
{
|
||||
/* value of 0 means "unset" */
|
||||
if (value && (value < MIN_BLOCK_SIZE || value > MAX_BLOCK_SIZE)) {
|
||||
error_setg(errp, QERR_PROPERTY_VALUE_OUT_OF_RANGE,
|
||||
id, name, value, MIN_BLOCK_SIZE, MAX_BLOCK_SIZE);
|
||||
return;
|
||||
if (!value) {
|
||||
/* unset */
|
||||
return true;
|
||||
}
|
||||
|
||||
/* We rely on power-of-2 blocksizes for bitmasks */
|
||||
if ((value & (value - 1)) != 0) {
|
||||
if (value < MIN_BLOCK_SIZE || value > MAX_BLOCK_SIZE
|
||||
|| (value & (value - 1))) {
|
||||
error_setg(errp,
|
||||
"Property %s.%s doesn't take value '%" PRId64
|
||||
"', it's not a power of 2",
|
||||
id, name, value);
|
||||
return;
|
||||
"parameter %s must be a power of 2 between %" PRId64
|
||||
" and %" PRId64,
|
||||
name, MIN_BLOCK_SIZE, MAX_BLOCK_SIZE);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -13,7 +13,6 @@
|
||||
#define MAX_BLOCK_SIZE (2 * MiB)
|
||||
#define MAX_BLOCK_SIZE_STR "2 MiB"
|
||||
|
||||
void check_block_size(const char *id, const char *name, int64_t value,
|
||||
Error **errp);
|
||||
bool check_block_size(const char *name, int64_t value, Error **errp);
|
||||
|
||||
#endif /* BLOCK_HELPERS_H */
|
||||
|
Loading…
Reference in New Issue
Block a user