mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
Miscellaneous patches for 2022-12-14
-----BEGIN PGP SIGNATURE----- iQJGBAABCAAwFiEENUvIs9frKmtoZ05fOHC0AOuRhlMFAmOZ6lYSHGFybWJydUBy ZWRoYXQuY29tAAoJEDhwtADrkYZT6VEQAKynjWh3AIZ4/qOgrVqsP0oRspevLmfH BbuGoldjYpEE7RbwuCaZalZ7iy7TcSySxnPfUDVsFHd7NWffJVjwKHifGC0D/Ez0 +Ggyb1CBebN+mS7t+BNFUHdMM+wxFIlHwg4f4aTFbn2o0HKgj2a8tcNzNRonZbfa xURnvbD4G4u0VZEc3Jak+x193xbOJFsuuWq0BZnDuNk+XqjyW2RwfpXLPJVk+82a 4uy/YgYuqXUqBeULwcJj+shBL4SXR9GyajTFMS64przSUle0ADUmXkPtaS2agV7e Pym/UQuAcxvNyw34fJsiMZxx6rZI9YU30jQUMRLoYcPRR/Q/aiPeiiHtiD6Kaid7 IfOeH/EArXaQRFpD89xj4YcaTnRLQOEj0NXgXvAbQf6eD8JYyao/S/0lCsPZEoA2 nibLqEQ25ncDNXoSomuwtfjVff3w68lODFbhwqfA0gf3cPtCgVZ6xQ8P/McNY6K6 wqFHXMWTDHk1LOCTucjYz1z2TGzTnSG4iWi5Yt6FSxAc958AO+v5ALn/1pcYun+E azM/MF0AInKj2aJCT530zT0tpCs/Jo07YKC8k6ubi77S0ZdmGS1XLeXkRXfk1+yI OhuUgiVlSTHxD69DagT2vbnx1mDMM9X+OBIMvEi5nwvD9A/ghaCgkDeGFvbA1ud0 t0mxPBZJ+tiZ =JJjG -----END PGP SIGNATURE----- Merge tag 'pull-misc-2022-12-14' of https://repo.or.cz/qemu/armbru into staging Miscellaneous patches for 2022-12-14 # gpg: Signature made Wed 14 Dec 2022 15:23:02 GMT # 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-misc-2022-12-14' of https://repo.or.cz/qemu/armbru: ppc4xx_sdram: Simplify sdram_ddr_size() to return block/vmdk: Simplify vmdk_co_create() to return directly cleanup: Tweak and re-run return_directly.cocci io: Tidy up fat-fingered parameter name qapi: Use returned bool to check for failure (again) sockets: Use ERRP_GUARD() where obviously appropriate qemu-config: Use ERRP_GUARD() where obviously appropriate qemu-config: Make config_parse_qdict() return bool monitor: Use ERRP_GUARD() in monitor_init() monitor: Simplify monitor_fd_param()'s error handling error: Move ERRP_GUARD() to the beginning of the function error: Drop a few superfluous ERRP_GUARD() error: Drop some obviously superfluous error_propagate() Drop more useless casts from void * to pointer Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
48804eebd4
70 changed files with 188 additions and 407 deletions
|
@ -3586,7 +3586,6 @@ static void kvm_set_dirty_ring_size(Object *obj, Visitor *v,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
KVMState *s = KVM_STATE(obj);
|
KVMState *s = KVM_STATE(obj);
|
||||||
Error *error = NULL;
|
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
|
|
||||||
if (s->fd != -1) {
|
if (s->fd != -1) {
|
||||||
|
@ -3594,9 +3593,7 @@ static void kvm_set_dirty_ring_size(Object *obj, Visitor *v,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
visit_type_uint32(v, name, &value, &error);
|
if (!visit_type_uint32(v, name, &value, errp)) {
|
||||||
if (error) {
|
|
||||||
error_propagate(errp, error);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value & (value - 1)) {
|
if (value & (value - 1)) {
|
||||||
|
|
|
@ -297,9 +297,7 @@ static int read_config(BDRVBlkdebugState *s, const char *filename,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qemu_config_parse_qdict(options, config_groups, &local_err);
|
if (!qemu_config_parse_qdict(options, config_groups, errp)) {
|
||||||
if (local_err) {
|
|
||||||
error_propagate(errp, local_err);
|
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
|
@ -522,7 +522,6 @@ BlockDriverState *bdrv_cbw_append(BlockDriverState *source,
|
||||||
BlockCopyState **bcs,
|
BlockCopyState **bcs,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
ERRP_GUARD();
|
|
||||||
BDRVCopyBeforeWriteState *state;
|
BDRVCopyBeforeWriteState *state;
|
||||||
BlockDriverState *top;
|
BlockDriverState *top;
|
||||||
QDict *opts;
|
QDict *opts;
|
||||||
|
|
28
block/vmdk.c
28
block/vmdk.c
|
@ -2821,7 +2821,6 @@ static BlockBackend *vmdk_co_create_cb(int64_t size, int idx,
|
||||||
static int coroutine_fn vmdk_co_create(BlockdevCreateOptions *create_options,
|
static int coroutine_fn vmdk_co_create(BlockdevCreateOptions *create_options,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
BlockdevCreateOptionsVmdk *opts;
|
BlockdevCreateOptionsVmdk *opts;
|
||||||
|
|
||||||
opts = &create_options->u.vmdk;
|
opts = &create_options->u.vmdk;
|
||||||
|
@ -2829,24 +2828,19 @@ static int coroutine_fn vmdk_co_create(BlockdevCreateOptions *create_options,
|
||||||
/* Validate options */
|
/* Validate options */
|
||||||
if (!QEMU_IS_ALIGNED(opts->size, BDRV_SECTOR_SIZE)) {
|
if (!QEMU_IS_ALIGNED(opts->size, BDRV_SECTOR_SIZE)) {
|
||||||
error_setg(errp, "Image size must be a multiple of 512 bytes");
|
error_setg(errp, "Image size must be a multiple of 512 bytes");
|
||||||
ret = -EINVAL;
|
return -EINVAL;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = vmdk_co_do_create(opts->size,
|
return vmdk_co_do_create(opts->size,
|
||||||
opts->subformat,
|
opts->subformat,
|
||||||
opts->adapter_type,
|
opts->adapter_type,
|
||||||
opts->backing_file,
|
opts->backing_file,
|
||||||
opts->hwversion,
|
opts->hwversion,
|
||||||
opts->toolsversion,
|
opts->toolsversion,
|
||||||
false,
|
false,
|
||||||
opts->zeroed_grain,
|
opts->zeroed_grain,
|
||||||
vmdk_co_create_cb,
|
vmdk_co_create_cb,
|
||||||
opts, errp);
|
opts, errp);
|
||||||
return ret;
|
|
||||||
|
|
||||||
out:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vmdk_close(BlockDriverState *bs)
|
static void vmdk_close(BlockDriverState *bs)
|
||||||
|
|
|
@ -156,7 +156,7 @@ static abi_ulong copy_elf_strings(int argc, char **argv, void **page,
|
||||||
--p; --tmp; --len;
|
--p; --tmp; --len;
|
||||||
if (--offset < 0) {
|
if (--offset < 0) {
|
||||||
offset = p % TARGET_PAGE_SIZE;
|
offset = p % TARGET_PAGE_SIZE;
|
||||||
pag = (char *)page[p / TARGET_PAGE_SIZE];
|
pag = page[p / TARGET_PAGE_SIZE];
|
||||||
if (!pag) {
|
if (!pag) {
|
||||||
pag = g_try_malloc0(TARGET_PAGE_SIZE);
|
pag = g_try_malloc0(TARGET_PAGE_SIZE);
|
||||||
page[p / TARGET_PAGE_SIZE] = pag;
|
page[p / TARGET_PAGE_SIZE] = pag;
|
||||||
|
|
|
@ -405,7 +405,7 @@ static void vcpu_mem_access(unsigned int vcpu_index, qemu_plugin_meminfo_t info,
|
||||||
g_mutex_lock(&l1_dcache_locks[cache_idx]);
|
g_mutex_lock(&l1_dcache_locks[cache_idx]);
|
||||||
hit_in_l1 = access_cache(l1_dcaches[cache_idx], effective_addr);
|
hit_in_l1 = access_cache(l1_dcaches[cache_idx], effective_addr);
|
||||||
if (!hit_in_l1) {
|
if (!hit_in_l1) {
|
||||||
insn = (InsnData *) userdata;
|
insn = userdata;
|
||||||
__atomic_fetch_add(&insn->l1_dmisses, 1, __ATOMIC_SEQ_CST);
|
__atomic_fetch_add(&insn->l1_dmisses, 1, __ATOMIC_SEQ_CST);
|
||||||
l1_dcaches[cache_idx]->misses++;
|
l1_dcaches[cache_idx]->misses++;
|
||||||
}
|
}
|
||||||
|
@ -419,7 +419,7 @@ static void vcpu_mem_access(unsigned int vcpu_index, qemu_plugin_meminfo_t info,
|
||||||
|
|
||||||
g_mutex_lock(&l2_ucache_locks[cache_idx]);
|
g_mutex_lock(&l2_ucache_locks[cache_idx]);
|
||||||
if (!access_cache(l2_ucaches[cache_idx], effective_addr)) {
|
if (!access_cache(l2_ucaches[cache_idx], effective_addr)) {
|
||||||
insn = (InsnData *) userdata;
|
insn = userdata;
|
||||||
__atomic_fetch_add(&insn->l2_misses, 1, __ATOMIC_SEQ_CST);
|
__atomic_fetch_add(&insn->l2_misses, 1, __ATOMIC_SEQ_CST);
|
||||||
l2_ucaches[cache_idx]->misses++;
|
l2_ucaches[cache_idx]->misses++;
|
||||||
}
|
}
|
||||||
|
@ -440,7 +440,7 @@ static void vcpu_insn_exec(unsigned int vcpu_index, void *userdata)
|
||||||
g_mutex_lock(&l1_icache_locks[cache_idx]);
|
g_mutex_lock(&l1_icache_locks[cache_idx]);
|
||||||
hit_in_l1 = access_cache(l1_icaches[cache_idx], insn_addr);
|
hit_in_l1 = access_cache(l1_icaches[cache_idx], insn_addr);
|
||||||
if (!hit_in_l1) {
|
if (!hit_in_l1) {
|
||||||
insn = (InsnData *) userdata;
|
insn = userdata;
|
||||||
__atomic_fetch_add(&insn->l1_imisses, 1, __ATOMIC_SEQ_CST);
|
__atomic_fetch_add(&insn->l1_imisses, 1, __ATOMIC_SEQ_CST);
|
||||||
l1_icaches[cache_idx]->misses++;
|
l1_icaches[cache_idx]->misses++;
|
||||||
}
|
}
|
||||||
|
@ -454,7 +454,7 @@ static void vcpu_insn_exec(unsigned int vcpu_index, void *userdata)
|
||||||
|
|
||||||
g_mutex_lock(&l2_ucache_locks[cache_idx]);
|
g_mutex_lock(&l2_ucache_locks[cache_idx]);
|
||||||
if (!access_cache(l2_ucaches[cache_idx], insn_addr)) {
|
if (!access_cache(l2_ucaches[cache_idx], insn_addr)) {
|
||||||
insn = (InsnData *) userdata;
|
insn = userdata;
|
||||||
__atomic_fetch_add(&insn->l2_misses, 1, __ATOMIC_SEQ_CST);
|
__atomic_fetch_add(&insn->l2_misses, 1, __ATOMIC_SEQ_CST);
|
||||||
l2_ucaches[cache_idx]->misses++;
|
l2_ucaches[cache_idx]->misses++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -193,7 +193,7 @@ vub_discard_write_zeroes(VubReq *req, struct iovec *iov, uint32_t iovcnt,
|
||||||
|
|
||||||
#if defined(__linux__) && defined(BLKDISCARD) && defined(BLKZEROOUT)
|
#if defined(__linux__) && defined(BLKDISCARD) && defined(BLKZEROOUT)
|
||||||
VubDev *vdev_blk = req->vdev_blk;
|
VubDev *vdev_blk = req->vdev_blk;
|
||||||
desc = (struct virtio_blk_discard_write_zeroes *)buf;
|
desc = buf;
|
||||||
uint64_t range[2] = { le64toh(desc->sector) << 9,
|
uint64_t range[2] = { le64toh(desc->sector) << 9,
|
||||||
le32toh(desc->num_sectors) << 9 };
|
le32toh(desc->num_sectors) << 9 };
|
||||||
if (type == VIRTIO_BLK_T_DISCARD) {
|
if (type == VIRTIO_BLK_T_DISCARD) {
|
||||||
|
|
|
@ -357,7 +357,6 @@ static void write_elf32_notes(WriteCoreDumpFunction f, DumpState *s,
|
||||||
|
|
||||||
static void write_elf_phdr_note(DumpState *s, Error **errp)
|
static void write_elf_phdr_note(DumpState *s, Error **errp)
|
||||||
{
|
{
|
||||||
ERRP_GUARD();
|
|
||||||
Elf32_Phdr phdr32;
|
Elf32_Phdr phdr32;
|
||||||
Elf64_Phdr phdr64;
|
Elf64_Phdr phdr64;
|
||||||
void *phdr;
|
void *phdr;
|
||||||
|
@ -773,7 +772,6 @@ static void dump_iterate(DumpState *s, Error **errp)
|
||||||
static void dump_end(DumpState *s, Error **errp)
|
static void dump_end(DumpState *s, Error **errp)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
ERRP_GUARD();
|
|
||||||
|
|
||||||
if (s->elf_section_data_size) {
|
if (s->elf_section_data_size) {
|
||||||
s->elf_section_data = g_malloc0(s->elf_section_data_size);
|
s->elf_section_data = g_malloc0(s->elf_section_data_size);
|
||||||
|
|
|
@ -72,7 +72,6 @@ static V9fsSynthNode *v9fs_add_dir_node(V9fsSynthNode *parent, int mode,
|
||||||
int qemu_v9fs_synth_mkdir(V9fsSynthNode *parent, int mode,
|
int qemu_v9fs_synth_mkdir(V9fsSynthNode *parent, int mode,
|
||||||
const char *name, V9fsSynthNode **result)
|
const char *name, V9fsSynthNode **result)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
V9fsSynthNode *node, *tmp;
|
V9fsSynthNode *node, *tmp;
|
||||||
|
|
||||||
if (!synth_fs) {
|
if (!synth_fs) {
|
||||||
|
@ -87,8 +86,7 @@ int qemu_v9fs_synth_mkdir(V9fsSynthNode *parent, int mode,
|
||||||
QEMU_LOCK_GUARD(&synth_mutex);
|
QEMU_LOCK_GUARD(&synth_mutex);
|
||||||
QLIST_FOREACH(tmp, &parent->child, sibling) {
|
QLIST_FOREACH(tmp, &parent->child, sibling) {
|
||||||
if (!strcmp(tmp->name, name)) {
|
if (!strcmp(tmp->name, name)) {
|
||||||
ret = EEXIST;
|
return EEXIST;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Add the name */
|
/* Add the name */
|
||||||
|
@ -98,15 +96,13 @@ int qemu_v9fs_synth_mkdir(V9fsSynthNode *parent, int mode,
|
||||||
v9fs_add_dir_node(node, node->attr->mode, ".",
|
v9fs_add_dir_node(node, node->attr->mode, ".",
|
||||||
node->attr, node->attr->inode);
|
node->attr, node->attr->inode);
|
||||||
*result = node;
|
*result = node;
|
||||||
ret = 0;
|
return 0;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int qemu_v9fs_synth_add_file(V9fsSynthNode *parent, int mode,
|
int qemu_v9fs_synth_add_file(V9fsSynthNode *parent, int mode,
|
||||||
const char *name, v9fs_synth_read read,
|
const char *name, v9fs_synth_read read,
|
||||||
v9fs_synth_write write, void *arg)
|
v9fs_synth_write write, void *arg)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
V9fsSynthNode *node, *tmp;
|
V9fsSynthNode *node, *tmp;
|
||||||
|
|
||||||
if (!synth_fs) {
|
if (!synth_fs) {
|
||||||
|
@ -122,8 +118,7 @@ int qemu_v9fs_synth_add_file(V9fsSynthNode *parent, int mode,
|
||||||
QEMU_LOCK_GUARD(&synth_mutex);
|
QEMU_LOCK_GUARD(&synth_mutex);
|
||||||
QLIST_FOREACH(tmp, &parent->child, sibling) {
|
QLIST_FOREACH(tmp, &parent->child, sibling) {
|
||||||
if (!strcmp(tmp->name, name)) {
|
if (!strcmp(tmp->name, name)) {
|
||||||
ret = EEXIST;
|
return EEXIST;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Add file type and remove write bits */
|
/* Add file type and remove write bits */
|
||||||
|
@ -138,8 +133,7 @@ int qemu_v9fs_synth_add_file(V9fsSynthNode *parent, int mode,
|
||||||
node->private = arg;
|
node->private = arg;
|
||||||
pstrcpy(node->name, sizeof(node->name), name);
|
pstrcpy(node->name, sizeof(node->name), name);
|
||||||
QLIST_INSERT_HEAD_RCU(&parent->child, node, sibling);
|
QLIST_INSERT_HEAD_RCU(&parent->child, node, sibling);
|
||||||
ret = 0;
|
return 0;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void synth_fill_statbuf(V9fsSynthNode *node, struct stat *stbuf)
|
static void synth_fill_statbuf(V9fsSynthNode *node, struct stat *stbuf)
|
||||||
|
|
|
@ -900,6 +900,7 @@ static qemu_irq armsse_get_common_irq_in(ARMSSE *s, int irqno)
|
||||||
|
|
||||||
static void armsse_realize(DeviceState *dev, Error **errp)
|
static void armsse_realize(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
|
ERRP_GUARD();
|
||||||
ARMSSE *s = ARM_SSE(dev);
|
ARMSSE *s = ARM_SSE(dev);
|
||||||
ARMSSEClass *asc = ARM_SSE_GET_CLASS(dev);
|
ARMSSEClass *asc = ARM_SSE_GET_CLASS(dev);
|
||||||
const ARMSSEInfo *info = asc->info;
|
const ARMSSEInfo *info = asc->info;
|
||||||
|
@ -914,8 +915,6 @@ static void armsse_realize(DeviceState *dev, Error **errp)
|
||||||
DeviceState *dev_splitter;
|
DeviceState *dev_splitter;
|
||||||
uint32_t addr_width_max;
|
uint32_t addr_width_max;
|
||||||
|
|
||||||
ERRP_GUARD();
|
|
||||||
|
|
||||||
if (!s->board_memory) {
|
if (!s->board_memory) {
|
||||||
error_setg(errp, "memory property was not set");
|
error_setg(errp, "memory property was not set");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -2771,24 +2771,20 @@ static void virt_dimm_unplug_request(HotplugHandler *hotplug_dev,
|
||||||
DeviceState *dev, Error **errp)
|
DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
VirtMachineState *vms = VIRT_MACHINE(hotplug_dev);
|
VirtMachineState *vms = VIRT_MACHINE(hotplug_dev);
|
||||||
Error *local_err = NULL;
|
|
||||||
|
|
||||||
if (!vms->acpi_dev) {
|
if (!vms->acpi_dev) {
|
||||||
error_setg(&local_err,
|
error_setg(errp,
|
||||||
"memory hotplug is not enabled: missing acpi-ged device");
|
"memory hotplug is not enabled: missing acpi-ged device");
|
||||||
goto out;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM)) {
|
if (object_dynamic_cast(OBJECT(dev), TYPE_NVDIMM)) {
|
||||||
error_setg(&local_err,
|
error_setg(errp, "nvdimm device hot unplug is not supported yet.");
|
||||||
"nvdimm device hot unplug is not supported yet.");
|
return;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hotplug_handler_unplug_request(HOTPLUG_HANDLER(vms->acpi_dev), dev,
|
hotplug_handler_unplug_request(HOTPLUG_HANDLER(vms->acpi_dev), dev,
|
||||||
&local_err);
|
errp);
|
||||||
out:
|
|
||||||
error_propagate(errp, local_err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void virt_dimm_unplug(HotplugHandler *hotplug_dev,
|
static void virt_dimm_unplug(HotplugHandler *hotplug_dev,
|
||||||
|
|
|
@ -274,7 +274,6 @@ SiFiveUARTState *sifive_uart_create(MemoryRegion *address_space, hwaddr base,
|
||||||
{
|
{
|
||||||
DeviceState *dev;
|
DeviceState *dev;
|
||||||
SysBusDevice *s;
|
SysBusDevice *s;
|
||||||
SiFiveUARTState *r;
|
|
||||||
|
|
||||||
dev = qdev_new("riscv.sifive.uart");
|
dev = qdev_new("riscv.sifive.uart");
|
||||||
s = SYS_BUS_DEVICE(dev);
|
s = SYS_BUS_DEVICE(dev);
|
||||||
|
@ -284,6 +283,5 @@ SiFiveUARTState *sifive_uart_create(MemoryRegion *address_space, hwaddr base,
|
||||||
sysbus_mmio_get_region(s, 0));
|
sysbus_mmio_get_region(s, 0));
|
||||||
sysbus_connect_irq(s, 0, irq);
|
sysbus_connect_irq(s, 0, irq);
|
||||||
|
|
||||||
r = SIFIVE_UART(dev);
|
return SIFIVE_UART(dev);
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -554,12 +554,11 @@ static void machine_get_mem(Object *obj, Visitor *v, const char *name,
|
||||||
static void machine_set_mem(Object *obj, Visitor *v, const char *name,
|
static void machine_set_mem(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
|
ERRP_GUARD();
|
||||||
MachineState *ms = MACHINE(obj);
|
MachineState *ms = MACHINE(obj);
|
||||||
MachineClass *mc = MACHINE_GET_CLASS(obj);
|
MachineClass *mc = MACHINE_GET_CLASS(obj);
|
||||||
MemorySizeConfiguration *mem;
|
MemorySizeConfiguration *mem;
|
||||||
|
|
||||||
ERRP_GUARD();
|
|
||||||
|
|
||||||
if (!visit_type_MemorySizeConfiguration(v, name, &mem, errp)) {
|
if (!visit_type_MemorySizeConfiguration(v, name, &mem, errp)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,7 +134,7 @@ void qdev_init_clocks(DeviceState *dev, const ClockPortInitArray clocks)
|
||||||
Clock **clkp;
|
Clock **clkp;
|
||||||
/* offset cannot be inside the DeviceState part */
|
/* offset cannot be inside the DeviceState part */
|
||||||
assert(elem->offset > sizeof(DeviceState));
|
assert(elem->offset > sizeof(DeviceState));
|
||||||
clkp = (Clock **)(((void *) dev) + elem->offset);
|
clkp = ((void *)dev) + elem->offset;
|
||||||
if (elem->is_output) {
|
if (elem->is_output) {
|
||||||
*clkp = qdev_init_clock_out(dev, elem->name);
|
*clkp = qdev_init_clock_out(dev, elem->name);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -679,14 +679,11 @@ static void set_reserved_region(Object *obj, Visitor *v, const char *name,
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
Property *prop = opaque;
|
||||||
ReservedRegion *rr = object_field_prop_ptr(obj, prop);
|
ReservedRegion *rr = object_field_prop_ptr(obj, prop);
|
||||||
Error *local_err = NULL;
|
|
||||||
const char *endptr;
|
const char *endptr;
|
||||||
char *str;
|
char *str;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
visit_type_str(v, name, &str, &local_err);
|
if (!visit_type_str(v, name, &str, errp)) {
|
||||||
if (local_err) {
|
|
||||||
error_propagate(errp, local_err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -493,8 +493,6 @@ void qdev_del_unplug_blocker(DeviceState *dev, Error *reason)
|
||||||
|
|
||||||
bool qdev_unplug_blocked(DeviceState *dev, Error **errp)
|
bool qdev_unplug_blocked(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
ERRP_GUARD();
|
|
||||||
|
|
||||||
if (dev->unplug_blockers) {
|
if (dev->unplug_blockers) {
|
||||||
error_propagate(errp, error_copy(dev->unplug_blockers->data));
|
error_propagate(errp, error_copy(dev->unplug_blockers->data));
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -2104,7 +2104,7 @@ static void process_message(VMBus *vmbus)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
msgdata = hv_msg->payload;
|
msgdata = hv_msg->payload;
|
||||||
msg = (struct vmbus_message_header *)msgdata;
|
msg = msgdata;
|
||||||
|
|
||||||
trace_vmbus_process_incoming_message(msg->message_type);
|
trace_vmbus_process_incoming_message(msg->message_type);
|
||||||
|
|
||||||
|
@ -2404,7 +2404,6 @@ static const TypeInfo vmbus_dev_type_info = {
|
||||||
static void vmbus_realize(BusState *bus, Error **errp)
|
static void vmbus_realize(BusState *bus, Error **errp)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
Error *local_err = NULL;
|
|
||||||
VMBus *vmbus = VMBUS(bus);
|
VMBus *vmbus = VMBUS(bus);
|
||||||
|
|
||||||
qemu_mutex_init(&vmbus->rx_queue_lock);
|
qemu_mutex_init(&vmbus->rx_queue_lock);
|
||||||
|
@ -2415,13 +2414,13 @@ static void vmbus_realize(BusState *bus, Error **errp)
|
||||||
ret = hyperv_set_msg_handler(VMBUS_MESSAGE_CONNECTION_ID,
|
ret = hyperv_set_msg_handler(VMBUS_MESSAGE_CONNECTION_ID,
|
||||||
vmbus_recv_message, vmbus);
|
vmbus_recv_message, vmbus);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
error_setg(&local_err, "hyperv set message handler failed: %d", ret);
|
error_setg(errp, "hyperv set message handler failed: %d", ret);
|
||||||
goto error_out;
|
goto error_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = event_notifier_init(&vmbus->notifier, 0);
|
ret = event_notifier_init(&vmbus->notifier, 0);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
error_setg(&local_err, "event notifier failed to init with %d", ret);
|
error_setg(errp, "event notifier failed to init with %d", ret);
|
||||||
goto remove_msg_handler;
|
goto remove_msg_handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2429,7 +2428,7 @@ static void vmbus_realize(BusState *bus, Error **errp)
|
||||||
ret = hyperv_set_event_flag_handler(VMBUS_EVENT_CONNECTION_ID,
|
ret = hyperv_set_event_flag_handler(VMBUS_EVENT_CONNECTION_ID,
|
||||||
&vmbus->notifier);
|
&vmbus->notifier);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
error_setg(&local_err, "hyperv set event handler failed with %d", ret);
|
error_setg(errp, "hyperv set event handler failed with %d", ret);
|
||||||
goto clear_event_notifier;
|
goto clear_event_notifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2441,7 +2440,6 @@ remove_msg_handler:
|
||||||
hyperv_set_msg_handler(VMBUS_MESSAGE_CONNECTION_ID, NULL, NULL);
|
hyperv_set_msg_handler(VMBUS_MESSAGE_CONNECTION_ID, NULL, NULL);
|
||||||
error_out:
|
error_out:
|
||||||
qemu_mutex_destroy(&vmbus->rx_queue_lock);
|
qemu_mutex_destroy(&vmbus->rx_queue_lock);
|
||||||
error_propagate(errp, local_err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vmbus_unrealize(BusState *bus)
|
static void vmbus_unrealize(BusState *bus)
|
||||||
|
|
|
@ -1782,12 +1782,9 @@ static void pc_machine_set_max_fw_size(Object *obj, Visitor *v,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
PCMachineState *pcms = PC_MACHINE(obj);
|
PCMachineState *pcms = PC_MACHINE(obj);
|
||||||
Error *error = NULL;
|
|
||||||
uint64_t value;
|
uint64_t value;
|
||||||
|
|
||||||
visit_type_size(v, name, &value, &error);
|
if (!visit_type_size(v, name, &value, errp)) {
|
||||||
if (error) {
|
|
||||||
error_propagate(errp, error);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1429,7 +1429,7 @@ static uint64_t gem_read(void *opaque, hwaddr offset, unsigned size)
|
||||||
{
|
{
|
||||||
CadenceGEMState *s;
|
CadenceGEMState *s;
|
||||||
uint32_t retval;
|
uint32_t retval;
|
||||||
s = (CadenceGEMState *)opaque;
|
s = opaque;
|
||||||
|
|
||||||
offset >>= 2;
|
offset >>= 2;
|
||||||
retval = s->regs[offset];
|
retval = s->regs[offset];
|
||||||
|
|
|
@ -2471,7 +2471,7 @@ static size_t virtio_net_rsc_receive6(void *opq, NetClientState *nc,
|
||||||
VirtioNetRscChain *chain;
|
VirtioNetRscChain *chain;
|
||||||
VirtioNetRscUnit unit;
|
VirtioNetRscUnit unit;
|
||||||
|
|
||||||
chain = (VirtioNetRscChain *)opq;
|
chain = opq;
|
||||||
hdr_len = ((VirtIONet *)(chain->n))->guest_hdr_len;
|
hdr_len = ((VirtIONet *)(chain->n))->guest_hdr_len;
|
||||||
|
|
||||||
if (size < (hdr_len + sizeof(struct eth_header) + sizeof(struct ip6_header)
|
if (size < (hdr_len + sizeof(struct eth_header) + sizeof(struct ip6_header)
|
||||||
|
|
|
@ -4028,14 +4028,14 @@ static uint16_t nvme_zone_mgmt_recv(NvmeCtrl *n, NvmeRequest *req)
|
||||||
nr_zones++;
|
nr_zones++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
header = (NvmeZoneReportHeader *)buf;
|
header = buf;
|
||||||
header->nr_zones = cpu_to_le64(nr_zones);
|
header->nr_zones = cpu_to_le64(nr_zones);
|
||||||
|
|
||||||
buf_p = buf + sizeof(NvmeZoneReportHeader);
|
buf_p = buf + sizeof(NvmeZoneReportHeader);
|
||||||
for (; zone_idx < ns->num_zones && max_zones > 0; zone_idx++) {
|
for (; zone_idx < ns->num_zones && max_zones > 0; zone_idx++) {
|
||||||
zone = &ns->zone_array[zone_idx];
|
zone = &ns->zone_array[zone_idx];
|
||||||
if (nvme_zone_matches_filter(zrasf, zone)) {
|
if (nvme_zone_matches_filter(zrasf, zone)) {
|
||||||
z = (NvmeZoneDescr *)buf_p;
|
z = buf_p;
|
||||||
buf_p += sizeof(NvmeZoneDescr);
|
buf_p += sizeof(NvmeZoneDescr);
|
||||||
|
|
||||||
z->zt = zone->d.zt;
|
z->zt = zone->d.zt;
|
||||||
|
|
|
@ -317,7 +317,6 @@ bool msi_is_masked(const PCIDevice *dev, unsigned int vector)
|
||||||
|
|
||||||
void msi_set_mask(PCIDevice *dev, int vector, bool mask, Error **errp)
|
void msi_set_mask(PCIDevice *dev, int vector, bool mask, Error **errp)
|
||||||
{
|
{
|
||||||
ERRP_GUARD();
|
|
||||||
uint16_t flags = pci_get_word(dev->config + msi_flags_off(dev));
|
uint16_t flags = pci_get_word(dev->config + msi_flags_off(dev));
|
||||||
bool msi64bit = flags & PCI_MSI_FLAGS_64BIT;
|
bool msi64bit = flags & PCI_MSI_FLAGS_64BIT;
|
||||||
uint32_t irq_state, vector_mask, pending;
|
uint32_t irq_state, vector_mask, pending;
|
||||||
|
|
|
@ -192,17 +192,13 @@ static inline hwaddr sdram_ddr_base(uint32_t bcr)
|
||||||
|
|
||||||
static hwaddr sdram_ddr_size(uint32_t bcr)
|
static hwaddr sdram_ddr_size(uint32_t bcr)
|
||||||
{
|
{
|
||||||
hwaddr size;
|
int sh = (bcr >> 17) & 0x7;
|
||||||
int sh;
|
|
||||||
|
|
||||||
sh = (bcr >> 17) & 0x7;
|
|
||||||
if (sh == 7) {
|
if (sh == 7) {
|
||||||
size = -1;
|
return -1;
|
||||||
} else {
|
|
||||||
size = (4 * MiB) << sh;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return size;
|
return (4 * MiB) << sh;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t sdram_ddr_dcr_read(void *opaque, int dcrn)
|
static uint32_t sdram_ddr_dcr_read(void *opaque, int dcrn)
|
||||||
|
@ -520,13 +516,10 @@ static inline hwaddr sdram_ddr2_base(uint32_t bcr)
|
||||||
|
|
||||||
static hwaddr sdram_ddr2_size(uint32_t bcr)
|
static hwaddr sdram_ddr2_size(uint32_t bcr)
|
||||||
{
|
{
|
||||||
hwaddr size;
|
|
||||||
int sh;
|
int sh;
|
||||||
|
|
||||||
sh = 1024 - ((bcr >> 6) & 0x3ff);
|
sh = 1024 - ((bcr >> 6) & 0x3ff);
|
||||||
size = 8 * MiB * sh;
|
return 8 * MiB * sh;
|
||||||
|
|
||||||
return size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t sdram_ddr2_dcr_read(void *opaque, int dcrn)
|
static uint32_t sdram_ddr2_dcr_read(void *opaque, int dcrn)
|
||||||
|
|
|
@ -182,13 +182,10 @@ static int create_pd(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
||||||
{
|
{
|
||||||
struct pvrdma_cmd_create_pd *cmd = &req->create_pd;
|
struct pvrdma_cmd_create_pd *cmd = &req->create_pd;
|
||||||
struct pvrdma_cmd_create_pd_resp *resp = &rsp->create_pd_resp;
|
struct pvrdma_cmd_create_pd_resp *resp = &rsp->create_pd_resp;
|
||||||
int rc;
|
|
||||||
|
|
||||||
memset(resp, 0, sizeof(*resp));
|
memset(resp, 0, sizeof(*resp));
|
||||||
rc = rdma_rm_alloc_pd(&dev->rdma_dev_res, &dev->backend_dev,
|
return rdma_rm_alloc_pd(&dev->rdma_dev_res, &dev->backend_dev,
|
||||||
&resp->pd_handle, cmd->ctx_handle);
|
&resp->pd_handle, cmd->ctx_handle);
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int destroy_pd(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
static int destroy_pd(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
||||||
|
@ -269,8 +266,7 @@ static int create_cq_ring(PCIDevice *pci_dev , PvrdmaRing **ring,
|
||||||
r = g_malloc(sizeof(*r));
|
r = g_malloc(sizeof(*r));
|
||||||
*ring = r;
|
*ring = r;
|
||||||
|
|
||||||
r->ring_state = (PvrdmaRingState *)
|
r->ring_state = rdma_pci_dma_map(pci_dev, tbl[0], TARGET_PAGE_SIZE);
|
||||||
rdma_pci_dma_map(pci_dev, tbl[0], TARGET_PAGE_SIZE);
|
|
||||||
|
|
||||||
if (!r->ring_state) {
|
if (!r->ring_state) {
|
||||||
rdma_error_report("Failed to map to CQ ring state");
|
rdma_error_report("Failed to map to CQ ring state");
|
||||||
|
@ -405,8 +401,7 @@ static int create_qp_rings(PCIDevice *pci_dev, uint64_t pdir_dma,
|
||||||
*rings = sr;
|
*rings = sr;
|
||||||
|
|
||||||
/* Create send ring */
|
/* Create send ring */
|
||||||
sr->ring_state = (PvrdmaRingState *)
|
sr->ring_state = rdma_pci_dma_map(pci_dev, tbl[0], TARGET_PAGE_SIZE);
|
||||||
rdma_pci_dma_map(pci_dev, tbl[0], TARGET_PAGE_SIZE);
|
|
||||||
if (!sr->ring_state) {
|
if (!sr->ring_state) {
|
||||||
rdma_error_report("Failed to map to QP ring state");
|
rdma_error_report("Failed to map to QP ring state");
|
||||||
goto out_free_sr_mem;
|
goto out_free_sr_mem;
|
||||||
|
@ -506,20 +501,17 @@ static int modify_qp(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
||||||
union pvrdma_cmd_resp *rsp)
|
union pvrdma_cmd_resp *rsp)
|
||||||
{
|
{
|
||||||
struct pvrdma_cmd_modify_qp *cmd = &req->modify_qp;
|
struct pvrdma_cmd_modify_qp *cmd = &req->modify_qp;
|
||||||
int rc;
|
|
||||||
|
|
||||||
/* No need to verify sgid_index since it is u8 */
|
/* No need to verify sgid_index since it is u8 */
|
||||||
|
|
||||||
rc = rdma_rm_modify_qp(&dev->rdma_dev_res, &dev->backend_dev,
|
return rdma_rm_modify_qp(&dev->rdma_dev_res, &dev->backend_dev,
|
||||||
cmd->qp_handle, cmd->attr_mask,
|
cmd->qp_handle, cmd->attr_mask,
|
||||||
cmd->attrs.ah_attr.grh.sgid_index,
|
cmd->attrs.ah_attr.grh.sgid_index,
|
||||||
(union ibv_gid *)&cmd->attrs.ah_attr.grh.dgid,
|
(union ibv_gid *)&cmd->attrs.ah_attr.grh.dgid,
|
||||||
cmd->attrs.dest_qp_num,
|
cmd->attrs.dest_qp_num,
|
||||||
(enum ibv_qp_state)cmd->attrs.qp_state,
|
(enum ibv_qp_state)cmd->attrs.qp_state,
|
||||||
cmd->attrs.qkey, cmd->attrs.rq_psn,
|
cmd->attrs.qkey, cmd->attrs.rq_psn,
|
||||||
cmd->attrs.sq_psn);
|
cmd->attrs.sq_psn);
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int query_qp(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
static int query_qp(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
||||||
|
@ -528,15 +520,14 @@ static int query_qp(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
||||||
struct pvrdma_cmd_query_qp *cmd = &req->query_qp;
|
struct pvrdma_cmd_query_qp *cmd = &req->query_qp;
|
||||||
struct pvrdma_cmd_query_qp_resp *resp = &rsp->query_qp_resp;
|
struct pvrdma_cmd_query_qp_resp *resp = &rsp->query_qp_resp;
|
||||||
struct ibv_qp_init_attr init_attr;
|
struct ibv_qp_init_attr init_attr;
|
||||||
int rc;
|
|
||||||
|
|
||||||
memset(resp, 0, sizeof(*resp));
|
memset(resp, 0, sizeof(*resp));
|
||||||
|
|
||||||
rc = rdma_rm_query_qp(&dev->rdma_dev_res, &dev->backend_dev, cmd->qp_handle,
|
return rdma_rm_query_qp(&dev->rdma_dev_res, &dev->backend_dev,
|
||||||
(struct ibv_qp_attr *)&resp->attrs, cmd->attr_mask,
|
cmd->qp_handle,
|
||||||
&init_attr);
|
(struct ibv_qp_attr *)&resp->attrs,
|
||||||
|
cmd->attr_mask,
|
||||||
return rc;
|
&init_attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int destroy_qp(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
static int destroy_qp(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
||||||
|
@ -562,34 +553,27 @@ static int create_bind(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
||||||
union pvrdma_cmd_resp *rsp)
|
union pvrdma_cmd_resp *rsp)
|
||||||
{
|
{
|
||||||
struct pvrdma_cmd_create_bind *cmd = &req->create_bind;
|
struct pvrdma_cmd_create_bind *cmd = &req->create_bind;
|
||||||
int rc;
|
|
||||||
union ibv_gid *gid = (union ibv_gid *)&cmd->new_gid;
|
union ibv_gid *gid = (union ibv_gid *)&cmd->new_gid;
|
||||||
|
|
||||||
if (cmd->index >= MAX_PORT_GIDS) {
|
if (cmd->index >= MAX_PORT_GIDS) {
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = rdma_rm_add_gid(&dev->rdma_dev_res, &dev->backend_dev,
|
return rdma_rm_add_gid(&dev->rdma_dev_res, &dev->backend_dev,
|
||||||
dev->backend_eth_device_name, gid, cmd->index);
|
dev->backend_eth_device_name, gid, cmd->index);
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int destroy_bind(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
static int destroy_bind(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
||||||
union pvrdma_cmd_resp *rsp)
|
union pvrdma_cmd_resp *rsp)
|
||||||
{
|
{
|
||||||
int rc;
|
|
||||||
|
|
||||||
struct pvrdma_cmd_destroy_bind *cmd = &req->destroy_bind;
|
struct pvrdma_cmd_destroy_bind *cmd = &req->destroy_bind;
|
||||||
|
|
||||||
if (cmd->index >= MAX_PORT_GIDS) {
|
if (cmd->index >= MAX_PORT_GIDS) {
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = rdma_rm_del_gid(&dev->rdma_dev_res, &dev->backend_dev,
|
return rdma_rm_del_gid(&dev->rdma_dev_res, &dev->backend_dev,
|
||||||
dev->backend_eth_device_name, cmd->index);
|
dev->backend_eth_device_name, cmd->index);
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int create_uc(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
static int create_uc(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
||||||
|
@ -597,12 +581,9 @@ static int create_uc(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
||||||
{
|
{
|
||||||
struct pvrdma_cmd_create_uc *cmd = &req->create_uc;
|
struct pvrdma_cmd_create_uc *cmd = &req->create_uc;
|
||||||
struct pvrdma_cmd_create_uc_resp *resp = &rsp->create_uc_resp;
|
struct pvrdma_cmd_create_uc_resp *resp = &rsp->create_uc_resp;
|
||||||
int rc;
|
|
||||||
|
|
||||||
memset(resp, 0, sizeof(*resp));
|
memset(resp, 0, sizeof(*resp));
|
||||||
rc = rdma_rm_alloc_uc(&dev->rdma_dev_res, cmd->pfn, &resp->ctx_handle);
|
return rdma_rm_alloc_uc(&dev->rdma_dev_res, cmd->pfn, &resp->ctx_handle);
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int destroy_uc(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
static int destroy_uc(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
||||||
|
@ -646,8 +627,7 @@ static int create_srq_ring(PCIDevice *pci_dev, PvrdmaRing **ring,
|
||||||
r = g_malloc(sizeof(*r));
|
r = g_malloc(sizeof(*r));
|
||||||
*ring = r;
|
*ring = r;
|
||||||
|
|
||||||
r->ring_state = (PvrdmaRingState *)
|
r->ring_state = rdma_pci_dma_map(pci_dev, tbl[0], TARGET_PAGE_SIZE);
|
||||||
rdma_pci_dma_map(pci_dev, tbl[0], TARGET_PAGE_SIZE);
|
|
||||||
if (!r->ring_state) {
|
if (!r->ring_state) {
|
||||||
rdma_error_report("Failed to map tp SRQ ring state");
|
rdma_error_report("Failed to map tp SRQ ring state");
|
||||||
goto out_free_ring_mem;
|
goto out_free_ring_mem;
|
||||||
|
|
|
@ -149,7 +149,7 @@ void pvrdma_qp_send(PVRDMADev *dev, uint32_t qp_handle)
|
||||||
|
|
||||||
ring = (PvrdmaRing *)qp->opaque;
|
ring = (PvrdmaRing *)qp->opaque;
|
||||||
|
|
||||||
wqe = (struct PvrdmaSqWqe *)pvrdma_ring_next_elem_read(ring);
|
wqe = pvrdma_ring_next_elem_read(ring);
|
||||||
while (wqe) {
|
while (wqe) {
|
||||||
CompHandlerCtx *comp_ctx;
|
CompHandlerCtx *comp_ctx;
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ void pvrdma_qp_recv(PVRDMADev *dev, uint32_t qp_handle)
|
||||||
|
|
||||||
ring = &((PvrdmaRing *)qp->opaque)[1];
|
ring = &((PvrdmaRing *)qp->opaque)[1];
|
||||||
|
|
||||||
wqe = (struct PvrdmaRqWqe *)pvrdma_ring_next_elem_read(ring);
|
wqe = pvrdma_ring_next_elem_read(ring);
|
||||||
while (wqe) {
|
while (wqe) {
|
||||||
CompHandlerCtx *comp_ctx;
|
CompHandlerCtx *comp_ctx;
|
||||||
|
|
||||||
|
@ -254,7 +254,7 @@ void pvrdma_srq_recv(PVRDMADev *dev, uint32_t srq_handle)
|
||||||
|
|
||||||
ring = (PvrdmaRing *)srq->opaque;
|
ring = (PvrdmaRing *)srq->opaque;
|
||||||
|
|
||||||
wqe = (struct PvrdmaRqWqe *)pvrdma_ring_next_elem_read(ring);
|
wqe = pvrdma_ring_next_elem_read(ring);
|
||||||
while (wqe) {
|
while (wqe) {
|
||||||
CompHandlerCtx *comp_ctx;
|
CompHandlerCtx *comp_ctx;
|
||||||
|
|
||||||
|
|
|
@ -719,7 +719,6 @@ static void vfu_object_machine_done(Notifier *notifier, void *data)
|
||||||
*/
|
*/
|
||||||
static void vfu_object_init_ctx(VfuObject *o, Error **errp)
|
static void vfu_object_init_ctx(VfuObject *o, Error **errp)
|
||||||
{
|
{
|
||||||
ERRP_GUARD();
|
|
||||||
DeviceState *dev = NULL;
|
DeviceState *dev = NULL;
|
||||||
vfu_pci_type_t pci_type = VFU_PCI_TYPE_CONVENTIONAL;
|
vfu_pci_type_t pci_type = VFU_PCI_TYPE_CONVENTIONAL;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
|
@ -2533,11 +2533,7 @@ vhost_user_crypto_close_session(struct vhost_dev *dev, uint64_t session_id)
|
||||||
static bool vhost_user_mem_section_filter(struct vhost_dev *dev,
|
static bool vhost_user_mem_section_filter(struct vhost_dev *dev,
|
||||||
MemoryRegionSection *section)
|
MemoryRegionSection *section)
|
||||||
{
|
{
|
||||||
bool result;
|
return memory_region_get_fd(section->mr) >= 0;
|
||||||
|
|
||||||
result = memory_region_get_fd(section->mr) >= 0;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vhost_user_get_inflight_fd(struct vhost_dev *dev,
|
static int vhost_user_get_inflight_fd(struct vhost_dev *dev,
|
||||||
|
|
|
@ -963,6 +963,7 @@ static bool vhost_vdpa_svq_map_rings(struct vhost_dev *dev,
|
||||||
struct vhost_vring_addr *addr,
|
struct vhost_vring_addr *addr,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
|
ERRP_GUARD();
|
||||||
DMAMap device_region, driver_region;
|
DMAMap device_region, driver_region;
|
||||||
struct vhost_vring_addr svq_addr;
|
struct vhost_vring_addr svq_addr;
|
||||||
struct vhost_vdpa *v = dev->opaque;
|
struct vhost_vdpa *v = dev->opaque;
|
||||||
|
@ -971,7 +972,6 @@ static bool vhost_vdpa_svq_map_rings(struct vhost_dev *dev,
|
||||||
size_t avail_offset;
|
size_t avail_offset;
|
||||||
bool ok;
|
bool ok;
|
||||||
|
|
||||||
ERRP_GUARD();
|
|
||||||
vhost_svq_get_vring_addr(svq, &svq_addr);
|
vhost_svq_get_vring_addr(svq, &svq_addr);
|
||||||
|
|
||||||
driver_region = (DMAMap) {
|
driver_region = (DMAMap) {
|
||||||
|
|
|
@ -241,36 +241,34 @@ static void balloon_stats_poll_cb(void *opaque)
|
||||||
static void balloon_stats_get_all(Object *obj, Visitor *v, const char *name,
|
static void balloon_stats_get_all(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Error *err = NULL;
|
|
||||||
VirtIOBalloon *s = VIRTIO_BALLOON(obj);
|
VirtIOBalloon *s = VIRTIO_BALLOON(obj);
|
||||||
|
bool ok = false;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!visit_start_struct(v, name, NULL, 0, &err)) {
|
if (!visit_start_struct(v, name, NULL, 0, errp)) {
|
||||||
goto out;
|
return;
|
||||||
}
|
}
|
||||||
if (!visit_type_int(v, "last-update", &s->stats_last_update, &err)) {
|
if (!visit_type_int(v, "last-update", &s->stats_last_update, errp)) {
|
||||||
goto out_end;
|
goto out_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!visit_start_struct(v, "stats", NULL, 0, &err)) {
|
if (!visit_start_struct(v, "stats", NULL, 0, errp)) {
|
||||||
goto out_end;
|
goto out_end;
|
||||||
}
|
}
|
||||||
for (i = 0; i < VIRTIO_BALLOON_S_NR; i++) {
|
for (i = 0; i < VIRTIO_BALLOON_S_NR; i++) {
|
||||||
if (!visit_type_uint64(v, balloon_stat_names[i], &s->stats[i], &err)) {
|
if (!visit_type_uint64(v, balloon_stat_names[i], &s->stats[i], errp)) {
|
||||||
goto out_nested;
|
goto out_nested;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
visit_check_struct(v, &err);
|
ok = visit_check_struct(v, errp);
|
||||||
out_nested:
|
out_nested:
|
||||||
visit_end_struct(v, NULL);
|
visit_end_struct(v, NULL);
|
||||||
|
|
||||||
if (!err) {
|
if (ok) {
|
||||||
visit_check_struct(v, &err);
|
visit_check_struct(v, errp);
|
||||||
}
|
}
|
||||||
out_end:
|
out_end:
|
||||||
visit_end_struct(v, NULL);
|
visit_end_struct(v, NULL);
|
||||||
out:
|
|
||||||
error_propagate(errp, err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void balloon_stats_get_poll_interval(Object *obj, Visitor *v,
|
static void balloon_stats_get_poll_interval(Object *obj, Visitor *v,
|
||||||
|
|
|
@ -775,8 +775,7 @@ static void virtio_iommu_handle_command(VirtIODevice *vdev, VirtQueue *vq)
|
||||||
output_size = s->config.probe_size + sizeof(tail);
|
output_size = s->config.probe_size + sizeof(tail);
|
||||||
buf = g_malloc0(output_size);
|
buf = g_malloc0(output_size);
|
||||||
|
|
||||||
ptail = (struct virtio_iommu_req_tail *)
|
ptail = buf + s->config.probe_size;
|
||||||
(buf + s->config.probe_size);
|
|
||||||
ptail->status = virtio_iommu_handle_probe(s, iov, iov_cnt, buf);
|
ptail->status = virtio_iommu_handle_probe(s, iov, iov_cnt, buf);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1094,12 +1094,9 @@ static void virtio_mem_set_requested_size(Object *obj, Visitor *v,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
VirtIOMEM *vmem = VIRTIO_MEM(obj);
|
VirtIOMEM *vmem = VIRTIO_MEM(obj);
|
||||||
Error *err = NULL;
|
|
||||||
uint64_t value;
|
uint64_t value;
|
||||||
|
|
||||||
visit_type_size(v, name, &value, &err);
|
if (!visit_type_size(v, name, &value, errp)) {
|
||||||
if (err) {
|
|
||||||
error_propagate(errp, err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1159,7 +1156,6 @@ static void virtio_mem_set_block_size(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
VirtIOMEM *vmem = VIRTIO_MEM(obj);
|
VirtIOMEM *vmem = VIRTIO_MEM(obj);
|
||||||
Error *err = NULL;
|
|
||||||
uint64_t value;
|
uint64_t value;
|
||||||
|
|
||||||
if (DEVICE(obj)->realized) {
|
if (DEVICE(obj)->realized) {
|
||||||
|
@ -1167,9 +1163,7 @@ static void virtio_mem_set_block_size(Object *obj, Visitor *v, const char *name,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
visit_type_size(v, name, &value, &err);
|
if (!visit_type_size(v, name, &value, errp)) {
|
||||||
if (err) {
|
|
||||||
error_propagate(errp, err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -921,11 +921,8 @@ PCI_DMA_DEFINE_LDST(q_be, q_be, 64);
|
||||||
static inline void *pci_dma_map(PCIDevice *dev, dma_addr_t addr,
|
static inline void *pci_dma_map(PCIDevice *dev, dma_addr_t addr,
|
||||||
dma_addr_t *plen, DMADirection dir)
|
dma_addr_t *plen, DMADirection dir)
|
||||||
{
|
{
|
||||||
void *buf;
|
return dma_memory_map(pci_get_address_space(dev), addr, plen, dir,
|
||||||
|
MEMTXATTRS_UNSPECIFIED);
|
||||||
buf = dma_memory_map(pci_get_address_space(dev), addr, plen, dir,
|
|
||||||
MEMTXATTRS_UNSPECIFIED);
|
|
||||||
return buf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void pci_dma_unmap(PCIDevice *dev, void *buffer, dma_addr_t len,
|
static inline void pci_dma_unmap(PCIDevice *dev, void *buffer, dma_addr_t len,
|
||||||
|
|
|
@ -350,7 +350,7 @@ int qio_channel_readv_all(QIOChannel *ioc,
|
||||||
int qio_channel_writev_all(QIOChannel *ioc,
|
int qio_channel_writev_all(QIOChannel *ioc,
|
||||||
const struct iovec *iov,
|
const struct iovec *iov,
|
||||||
size_t niov,
|
size_t niov,
|
||||||
Error **erp);
|
Error **errp);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* qio_channel_readv:
|
* qio_channel_readv:
|
||||||
|
|
|
@ -22,7 +22,7 @@ int qemu_read_config_file(const char *filename, QEMUConfigCB *f, Error **errp);
|
||||||
|
|
||||||
/* Parse QDict options as a replacement for a config file (allowing multiple
|
/* Parse QDict options as a replacement for a config file (allowing multiple
|
||||||
enumerated (0..(n-1)) configuration "sections") */
|
enumerated (0..(n-1)) configuration "sections") */
|
||||||
void qemu_config_parse_qdict(QDict *options, QemuOptsList **lists,
|
bool qemu_config_parse_qdict(QDict *options, QemuOptsList **lists,
|
||||||
Error **errp);
|
Error **errp);
|
||||||
|
|
||||||
#endif /* QEMU_CONFIG_FILE_H */
|
#endif /* QEMU_CONFIG_FILE_H */
|
||||||
|
|
|
@ -155,8 +155,8 @@ static void iothread_init_gcontext(IOThread *iothread)
|
||||||
|
|
||||||
static void iothread_set_aio_context_params(EventLoopBase *base, Error **errp)
|
static void iothread_set_aio_context_params(EventLoopBase *base, Error **errp)
|
||||||
{
|
{
|
||||||
IOThread *iothread = IOTHREAD(base);
|
|
||||||
ERRP_GUARD();
|
ERRP_GUARD();
|
||||||
|
IOThread *iothread = IOTHREAD(base);
|
||||||
|
|
||||||
if (!iothread->ctx) {
|
if (!iothread->ctx) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -5471,7 +5471,7 @@ static abi_long do_ioctl_rt(const IOCTLEntry *ie, uint8_t *buf_temp,
|
||||||
for (i = 0; i < se->nb_fields; i++) {
|
for (i = 0; i < se->nb_fields; i++) {
|
||||||
if (dst_offsets[i] == offsetof(struct rtentry, rt_dev)) {
|
if (dst_offsets[i] == offsetof(struct rtentry, rt_dev)) {
|
||||||
assert(*field_types == TYPE_PTRVOID);
|
assert(*field_types == TYPE_PTRVOID);
|
||||||
target_rt_dev_ptr = (abi_ulong *)(argptr + src_offsets[i]);
|
target_rt_dev_ptr = argptr + src_offsets[i];
|
||||||
host_rt_dev_ptr = (unsigned long *)(buf_temp + dst_offsets[i]);
|
host_rt_dev_ptr = (unsigned long *)(buf_temp + dst_offsets[i]);
|
||||||
if (*target_rt_dev_ptr != 0) {
|
if (*target_rt_dev_ptr != 0) {
|
||||||
*host_rt_dev_ptr = (unsigned long)lock_user_string(
|
*host_rt_dev_ptr = (unsigned long)lock_user_string(
|
||||||
|
|
|
@ -111,7 +111,6 @@ static void global_dirty_log_sync(unsigned int flag, bool one_shot)
|
||||||
static DirtyPageRecord *vcpu_dirty_stat_alloc(VcpuStat *stat)
|
static DirtyPageRecord *vcpu_dirty_stat_alloc(VcpuStat *stat)
|
||||||
{
|
{
|
||||||
CPUState *cpu;
|
CPUState *cpu;
|
||||||
DirtyPageRecord *records;
|
|
||||||
int nvcpu = 0;
|
int nvcpu = 0;
|
||||||
|
|
||||||
CPU_FOREACH(cpu) {
|
CPU_FOREACH(cpu) {
|
||||||
|
@ -121,9 +120,7 @@ static DirtyPageRecord *vcpu_dirty_stat_alloc(VcpuStat *stat)
|
||||||
stat->nvcpu = nvcpu;
|
stat->nvcpu = nvcpu;
|
||||||
stat->rates = g_new0(DirtyRateVcpu, nvcpu);
|
stat->rates = g_new0(DirtyRateVcpu, nvcpu);
|
||||||
|
|
||||||
records = g_new0(DirtyPageRecord, nvcpu);
|
return g_new0(DirtyPageRecord, nvcpu);
|
||||||
|
|
||||||
return records;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vcpu_dirty_stat_collect(VcpuStat *stat,
|
static void vcpu_dirty_stat_collect(VcpuStat *stat,
|
||||||
|
@ -473,7 +470,6 @@ find_block_matched(RAMBlock *block, int count,
|
||||||
struct RamblockDirtyInfo *infos)
|
struct RamblockDirtyInfo *infos)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
struct RamblockDirtyInfo *matched;
|
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
if (!strcmp(infos[i].idstr, qemu_ram_get_idstr(block))) {
|
if (!strcmp(infos[i].idstr, qemu_ram_get_idstr(block))) {
|
||||||
|
@ -492,9 +488,7 @@ find_block_matched(RAMBlock *block, int count,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
matched = &infos[i];
|
return &infos[i];
|
||||||
|
|
||||||
return matched;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool compare_page_hash_info(struct RamblockDirtyInfo *info,
|
static bool compare_page_hash_info(struct RamblockDirtyInfo *info,
|
||||||
|
|
|
@ -126,7 +126,6 @@ QIOChannelTLS *migration_tls_client_create(MigrationState *s,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
QCryptoTLSCreds *creds;
|
QCryptoTLSCreds *creds;
|
||||||
QIOChannelTLS *tioc;
|
|
||||||
|
|
||||||
creds = migration_tls_get_creds(
|
creds = migration_tls_get_creds(
|
||||||
s, QCRYPTO_TLS_CREDS_ENDPOINT_CLIENT, errp);
|
s, QCRYPTO_TLS_CREDS_ENDPOINT_CLIENT, errp);
|
||||||
|
@ -138,10 +137,7 @@ QIOChannelTLS *migration_tls_client_create(MigrationState *s,
|
||||||
hostname = s->parameters.tls_hostname;
|
hostname = s->parameters.tls_hostname;
|
||||||
}
|
}
|
||||||
|
|
||||||
tioc = qio_channel_tls_new_client(
|
return qio_channel_tls_new_client(ioc, creds, hostname, errp);
|
||||||
ioc, creds, hostname, errp);
|
|
||||||
|
|
||||||
return tioc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void migration_tls_channel_connect(MigrationState *s,
|
void migration_tls_channel_connect(MigrationState *s,
|
||||||
|
|
|
@ -1086,6 +1086,7 @@ int monitor_get_fd(Monitor *mon, const char *fdname, Error **errp)
|
||||||
}
|
}
|
||||||
|
|
||||||
fd = monfd->fd;
|
fd = monfd->fd;
|
||||||
|
assert(fd >= 0);
|
||||||
|
|
||||||
/* caller takes ownership of fd */
|
/* caller takes ownership of fd */
|
||||||
QLIST_REMOVE(monfd, next);
|
QLIST_REMOVE(monfd, next);
|
||||||
|
@ -1394,23 +1395,16 @@ void monitor_fdset_dup_fd_remove(int dup_fd)
|
||||||
int monitor_fd_param(Monitor *mon, const char *fdname, Error **errp)
|
int monitor_fd_param(Monitor *mon, const char *fdname, Error **errp)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
Error *local_err = NULL;
|
|
||||||
|
|
||||||
if (!qemu_isdigit(fdname[0]) && mon) {
|
if (!qemu_isdigit(fdname[0]) && mon) {
|
||||||
fd = monitor_get_fd(mon, fdname, &local_err);
|
fd = monitor_get_fd(mon, fdname, errp);
|
||||||
} else {
|
} else {
|
||||||
fd = qemu_parse_fd(fdname);
|
fd = qemu_parse_fd(fdname);
|
||||||
if (fd == -1) {
|
if (fd < 0) {
|
||||||
error_setg(&local_err, "Invalid file descriptor number '%s'",
|
error_setg(errp, "Invalid file descriptor number '%s'",
|
||||||
fdname);
|
fdname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (local_err) {
|
|
||||||
error_propagate(errp, local_err);
|
|
||||||
assert(fd == -1);
|
|
||||||
} else {
|
|
||||||
assert(fd != -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
|
@ -711,8 +711,8 @@ void monitor_init_globals_core(void)
|
||||||
|
|
||||||
int monitor_init(MonitorOptions *opts, bool allow_hmp, Error **errp)
|
int monitor_init(MonitorOptions *opts, bool allow_hmp, Error **errp)
|
||||||
{
|
{
|
||||||
|
ERRP_GUARD();
|
||||||
Chardev *chr;
|
Chardev *chr;
|
||||||
Error *local_err = NULL;
|
|
||||||
|
|
||||||
chr = qemu_chr_find(opts->chardev);
|
chr = qemu_chr_find(opts->chardev);
|
||||||
if (chr == NULL) {
|
if (chr == NULL) {
|
||||||
|
@ -726,7 +726,7 @@ int monitor_init(MonitorOptions *opts, bool allow_hmp, Error **errp)
|
||||||
|
|
||||||
switch (opts->mode) {
|
switch (opts->mode) {
|
||||||
case MONITOR_MODE_CONTROL:
|
case MONITOR_MODE_CONTROL:
|
||||||
monitor_init_qmp(chr, opts->pretty, &local_err);
|
monitor_init_qmp(chr, opts->pretty, errp);
|
||||||
break;
|
break;
|
||||||
case MONITOR_MODE_READLINE:
|
case MONITOR_MODE_READLINE:
|
||||||
if (!allow_hmp) {
|
if (!allow_hmp) {
|
||||||
|
@ -737,17 +737,13 @@ int monitor_init(MonitorOptions *opts, bool allow_hmp, Error **errp)
|
||||||
error_setg(errp, "'pretty' is not compatible with HMP monitors");
|
error_setg(errp, "'pretty' is not compatible with HMP monitors");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
monitor_init_hmp(chr, true, &local_err);
|
monitor_init_hmp(chr, true, errp);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached();
|
g_assert_not_reached();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (local_err) {
|
return *errp ? -1 : 0;
|
||||||
error_propagate(errp, local_err);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int monitor_init_opts(QemuOpts *opts, Error **errp)
|
int monitor_init_opts(QemuOpts *opts, Error **errp)
|
||||||
|
|
|
@ -470,9 +470,9 @@ static bool invoke_stats_cb(StatsCallbacks *entry,
|
||||||
StatsFilter *filter, StatsRequest *request,
|
StatsFilter *filter, StatsRequest *request,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
|
ERRP_GUARD();
|
||||||
strList *targets = NULL;
|
strList *targets = NULL;
|
||||||
strList *names = NULL;
|
strList *names = NULL;
|
||||||
ERRP_GUARD();
|
|
||||||
|
|
||||||
if (request) {
|
if (request) {
|
||||||
if (request->provider != entry->provider) {
|
if (request->provider != entry->provider) {
|
||||||
|
@ -537,9 +537,9 @@ StatsSchemaList *qmp_query_stats_schemas(bool has_provider,
|
||||||
StatsProvider provider,
|
StatsProvider provider,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
|
ERRP_GUARD();
|
||||||
StatsSchemaList *stats_results = NULL;
|
StatsSchemaList *stats_results = NULL;
|
||||||
StatsCallbacks *entry;
|
StatsCallbacks *entry;
|
||||||
ERRP_GUARD();
|
|
||||||
|
|
||||||
QTAILQ_FOREACH(entry, &stats_callbacks, next) {
|
QTAILQ_FOREACH(entry, &stats_callbacks, next) {
|
||||||
if (!has_provider || provider == entry->provider) {
|
if (!has_provider || provider == entry->provider) {
|
||||||
|
|
|
@ -1135,22 +1135,17 @@ static void set_max_queue_size(Object *obj, Visitor *v,
|
||||||
const char *name, void *opaque,
|
const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Error *local_err = NULL;
|
|
||||||
uint64_t value;
|
uint64_t value;
|
||||||
|
|
||||||
visit_type_uint64(v, name, &value, &local_err);
|
if (!visit_type_uint64(v, name, &value, errp)) {
|
||||||
if (local_err) {
|
return;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
if (!value) {
|
if (!value) {
|
||||||
error_setg(&local_err, "Property '%s.%s' requires a positive value",
|
error_setg(errp, "Property '%s.%s' requires a positive value",
|
||||||
object_get_typename(obj), name);
|
object_get_typename(obj), name);
|
||||||
goto out;
|
return;
|
||||||
}
|
}
|
||||||
max_queue_size = value;
|
max_queue_size = value;
|
||||||
|
|
||||||
out:
|
|
||||||
error_propagate(errp, local_err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void compare_pri_rs_finalize(SocketReadState *pri_rs)
|
static void compare_pri_rs_finalize(SocketReadState *pri_rs)
|
||||||
|
|
|
@ -274,13 +274,12 @@ static void acquire_privilege(const char *name, Error **errp)
|
||||||
{
|
{
|
||||||
HANDLE token = NULL;
|
HANDLE token = NULL;
|
||||||
TOKEN_PRIVILEGES priv;
|
TOKEN_PRIVILEGES priv;
|
||||||
Error *local_err = NULL;
|
|
||||||
|
|
||||||
if (OpenProcessToken(GetCurrentProcess(),
|
if (OpenProcessToken(GetCurrentProcess(),
|
||||||
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token))
|
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token))
|
||||||
{
|
{
|
||||||
if (!LookupPrivilegeValue(NULL, name, &priv.Privileges[0].Luid)) {
|
if (!LookupPrivilegeValue(NULL, name, &priv.Privileges[0].Luid)) {
|
||||||
error_setg(&local_err, QERR_QGA_COMMAND_FAILED,
|
error_setg(errp, QERR_QGA_COMMAND_FAILED,
|
||||||
"no luid for requested privilege");
|
"no luid for requested privilege");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -289,13 +288,13 @@ static void acquire_privilege(const char *name, Error **errp)
|
||||||
priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
||||||
|
|
||||||
if (!AdjustTokenPrivileges(token, FALSE, &priv, 0, NULL, 0)) {
|
if (!AdjustTokenPrivileges(token, FALSE, &priv, 0, NULL, 0)) {
|
||||||
error_setg(&local_err, QERR_QGA_COMMAND_FAILED,
|
error_setg(errp, QERR_QGA_COMMAND_FAILED,
|
||||||
"unable to acquire requested privilege");
|
"unable to acquire requested privilege");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
error_setg(&local_err, QERR_QGA_COMMAND_FAILED,
|
error_setg(errp, QERR_QGA_COMMAND_FAILED,
|
||||||
"failed to open privilege token");
|
"failed to open privilege token");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -303,7 +302,6 @@ out:
|
||||||
if (token) {
|
if (token) {
|
||||||
CloseHandle(token);
|
CloseHandle(token);
|
||||||
}
|
}
|
||||||
error_propagate(errp, local_err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void execute_async(DWORD WINAPI (*func)(LPVOID), LPVOID opaque,
|
static void execute_async(DWORD WINAPI (*func)(LPVOID), LPVOID opaque,
|
||||||
|
|
|
@ -48,7 +48,6 @@ void replay_read_next_clock(ReplayClockKind kind)
|
||||||
/*! Reads next clock event from the input. */
|
/*! Reads next clock event from the input. */
|
||||||
int64_t replay_read_clock(ReplayClockKind kind, int64_t raw_icount)
|
int64_t replay_read_clock(ReplayClockKind kind, int64_t raw_icount)
|
||||||
{
|
{
|
||||||
int64_t ret;
|
|
||||||
g_assert(replay_file && replay_mutex_locked());
|
g_assert(replay_file && replay_mutex_locked());
|
||||||
|
|
||||||
replay_advance_current_icount(raw_icount);
|
replay_advance_current_icount(raw_icount);
|
||||||
|
@ -56,7 +55,5 @@ int64_t replay_read_clock(ReplayClockKind kind, int64_t raw_icount)
|
||||||
if (replay_next_event_is(EVENT_CLOCK + kind)) {
|
if (replay_next_event_is(EVENT_CLOCK + kind)) {
|
||||||
replay_read_next_clock(kind);
|
replay_read_next_clock(kind);
|
||||||
}
|
}
|
||||||
ret = replay_state.cached_clock[kind];
|
return replay_state.cached_clock[kind];
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,9 +11,8 @@ identifier F;
|
||||||
- T VAR;
|
- T VAR;
|
||||||
... when != VAR
|
... when != VAR
|
||||||
|
|
||||||
- VAR =
|
- VAR = (E);
|
||||||
+ return
|
|
||||||
E;
|
|
||||||
- return VAR;
|
- return VAR;
|
||||||
|
+ return E;
|
||||||
... when != VAR
|
... when != VAR
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,10 +43,8 @@ static SemihostingConsole console;
|
||||||
static int console_can_read(void *opaque)
|
static int console_can_read(void *opaque)
|
||||||
{
|
{
|
||||||
SemihostingConsole *c = opaque;
|
SemihostingConsole *c = opaque;
|
||||||
int ret;
|
|
||||||
g_assert(qemu_mutex_iothread_locked());
|
g_assert(qemu_mutex_iothread_locked());
|
||||||
ret = (int) fifo8_num_free(&c->fifo);
|
return (int)fifo8_num_free(&c->fifo);
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void console_wake_up(gpointer data, gpointer user_data)
|
static void console_wake_up(gpointer data, gpointer user_data)
|
||||||
|
|
|
@ -2372,20 +2372,15 @@ void memory_region_reset_dirty(MemoryRegion *mr, hwaddr addr,
|
||||||
|
|
||||||
int memory_region_get_fd(MemoryRegion *mr)
|
int memory_region_get_fd(MemoryRegion *mr)
|
||||||
{
|
{
|
||||||
int fd;
|
|
||||||
|
|
||||||
RCU_READ_LOCK_GUARD();
|
RCU_READ_LOCK_GUARD();
|
||||||
while (mr->alias) {
|
while (mr->alias) {
|
||||||
mr = mr->alias;
|
mr = mr->alias;
|
||||||
}
|
}
|
||||||
fd = mr->ram_block->fd;
|
return mr->ram_block->fd;
|
||||||
|
|
||||||
return fd;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void *memory_region_get_ram_ptr(MemoryRegion *mr)
|
void *memory_region_get_ram_ptr(MemoryRegion *mr)
|
||||||
{
|
{
|
||||||
void *ptr;
|
|
||||||
uint64_t offset = 0;
|
uint64_t offset = 0;
|
||||||
|
|
||||||
RCU_READ_LOCK_GUARD();
|
RCU_READ_LOCK_GUARD();
|
||||||
|
@ -2394,9 +2389,7 @@ void *memory_region_get_ram_ptr(MemoryRegion *mr)
|
||||||
mr = mr->alias;
|
mr = mr->alias;
|
||||||
}
|
}
|
||||||
assert(mr->ram_block);
|
assert(mr->ram_block);
|
||||||
ptr = qemu_map_ram_ptr(mr->ram_block, offset);
|
return qemu_map_ram_ptr(mr->ram_block, offset);
|
||||||
|
|
||||||
return ptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MemoryRegion *memory_region_from_host(void *ptr, ram_addr_t *offset)
|
MemoryRegion *memory_region_from_host(void *ptr, ram_addr_t *offset)
|
||||||
|
|
|
@ -3236,7 +3236,6 @@ void *address_space_map(AddressSpace *as,
|
||||||
hwaddr len = *plen;
|
hwaddr len = *plen;
|
||||||
hwaddr l, xlat;
|
hwaddr l, xlat;
|
||||||
MemoryRegion *mr;
|
MemoryRegion *mr;
|
||||||
void *ptr;
|
|
||||||
FlatView *fv;
|
FlatView *fv;
|
||||||
|
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
|
@ -3275,9 +3274,7 @@ void *address_space_map(AddressSpace *as,
|
||||||
*plen = flatview_extend_translation(fv, addr, len, mr, xlat,
|
*plen = flatview_extend_translation(fv, addr, len, mr, xlat,
|
||||||
l, is_write, attrs);
|
l, is_write, attrs);
|
||||||
fuzz_dma_read_cb(addr, *plen, mr);
|
fuzz_dma_read_cb(addr, *plen, mr);
|
||||||
ptr = qemu_ram_ptr_length(mr->ram_block, xlat, plen, true);
|
return qemu_ram_ptr_length(mr->ram_block, xlat, plen, true);
|
||||||
|
|
||||||
return ptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unmaps a memory region previously mapped by address_space_map().
|
/* Unmaps a memory region previously mapped by address_space_map().
|
||||||
|
@ -3545,15 +3542,13 @@ bool cpu_physical_memory_is_io(hwaddr phys_addr)
|
||||||
{
|
{
|
||||||
MemoryRegion*mr;
|
MemoryRegion*mr;
|
||||||
hwaddr l = 1;
|
hwaddr l = 1;
|
||||||
bool res;
|
|
||||||
|
|
||||||
RCU_READ_LOCK_GUARD();
|
RCU_READ_LOCK_GUARD();
|
||||||
mr = address_space_translate(&address_space_memory,
|
mr = address_space_translate(&address_space_memory,
|
||||||
phys_addr, &phys_addr, &l, false,
|
phys_addr, &phys_addr, &l, false,
|
||||||
MEMTXATTRS_UNSPECIFIED);
|
MEMTXATTRS_UNSPECIFIED);
|
||||||
|
|
||||||
res = !(memory_region_is_ram(mr) || memory_region_is_romd(mr));
|
return !(memory_region_is_ram(mr) || memory_region_is_romd(mr));
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque)
|
int qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque)
|
||||||
|
|
|
@ -215,8 +215,7 @@ static inline int cpu_interrupts_enabled(CPUAVRState *env)
|
||||||
|
|
||||||
static inline uint8_t cpu_get_sreg(CPUAVRState *env)
|
static inline uint8_t cpu_get_sreg(CPUAVRState *env)
|
||||||
{
|
{
|
||||||
uint8_t sreg;
|
return (env->sregC) << 0
|
||||||
sreg = (env->sregC) << 0
|
|
||||||
| (env->sregZ) << 1
|
| (env->sregZ) << 1
|
||||||
| (env->sregN) << 2
|
| (env->sregN) << 2
|
||||||
| (env->sregV) << 3
|
| (env->sregV) << 3
|
||||||
|
@ -224,7 +223,6 @@ static inline uint8_t cpu_get_sreg(CPUAVRState *env)
|
||||||
| (env->sregH) << 5
|
| (env->sregH) << 5
|
||||||
| (env->sregT) << 6
|
| (env->sregT) << 6
|
||||||
| (env->sregI) << 7;
|
| (env->sregI) << 7;
|
||||||
return sreg;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void cpu_set_sreg(CPUAVRState *env, uint8_t sreg)
|
static inline void cpu_set_sreg(CPUAVRState *env, uint8_t sreg)
|
||||||
|
|
|
@ -388,7 +388,7 @@ static int hax_handle_io(CPUArchState *env, uint32_t df, uint16_t port,
|
||||||
MemTxAttrs attrs = { 0 };
|
MemTxAttrs attrs = { 0 };
|
||||||
|
|
||||||
if (!df) {
|
if (!df) {
|
||||||
ptr = (uint8_t *) buffer;
|
ptr = buffer;
|
||||||
} else {
|
} else {
|
||||||
ptr = buffer + size * count - size;
|
ptr = buffer + size * count - size;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5689,7 +5689,6 @@ static void kvm_arch_set_notify_window(Object *obj, Visitor *v,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
KVMState *s = KVM_STATE(obj);
|
KVMState *s = KVM_STATE(obj);
|
||||||
Error *error = NULL;
|
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
|
|
||||||
if (s->fd != -1) {
|
if (s->fd != -1) {
|
||||||
|
@ -5697,9 +5696,7 @@ static void kvm_arch_set_notify_window(Object *obj, Visitor *v,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
visit_type_uint32(v, name, &value, &error);
|
if (!visit_type_uint32(v, name, &value, errp)) {
|
||||||
if (error) {
|
|
||||||
error_propagate(errp, error);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -128,13 +128,11 @@ static inline bool cpu_loongarch_hw_interrupts_pending(CPULoongArchState *env)
|
||||||
{
|
{
|
||||||
uint32_t pending;
|
uint32_t pending;
|
||||||
uint32_t status;
|
uint32_t status;
|
||||||
bool r;
|
|
||||||
|
|
||||||
pending = FIELD_EX64(env->CSR_ESTAT, CSR_ESTAT, IS);
|
pending = FIELD_EX64(env->CSR_ESTAT, CSR_ESTAT, IS);
|
||||||
status = FIELD_EX64(env->CSR_ECFG, CSR_ECFG, LIE);
|
status = FIELD_EX64(env->CSR_ECFG, CSR_ECFG, LIE);
|
||||||
|
|
||||||
r = (pending & status) != 0;
|
return (pending & status) != 0;
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void loongarch_cpu_do_interrupt(CPUState *cs)
|
static void loongarch_cpu_do_interrupt(CPUState *cs)
|
||||||
|
|
|
@ -3281,15 +3281,12 @@ target_ulong helper_dextr_l(target_ulong ac, target_ulong shift,
|
||||||
CPUMIPSState *env)
|
CPUMIPSState *env)
|
||||||
{
|
{
|
||||||
uint64_t temp[3];
|
uint64_t temp[3];
|
||||||
target_ulong ret;
|
|
||||||
|
|
||||||
shift = shift & 0x3F;
|
shift = shift & 0x3F;
|
||||||
|
|
||||||
mipsdsp_rndrashift_acc(temp, ac, shift, env);
|
mipsdsp_rndrashift_acc(temp, ac, shift, env);
|
||||||
|
|
||||||
ret = (temp[1] << 63) | (temp[0] >> 1);
|
return (temp[1] << 63) | (temp[0] >> 1);
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
target_ulong helper_dextr_r_l(target_ulong ac, target_ulong shift,
|
target_ulong helper_dextr_r_l(target_ulong ac, target_ulong shift,
|
||||||
|
@ -3297,7 +3294,6 @@ target_ulong helper_dextr_r_l(target_ulong ac, target_ulong shift,
|
||||||
{
|
{
|
||||||
uint64_t temp[3];
|
uint64_t temp[3];
|
||||||
uint32_t temp128;
|
uint32_t temp128;
|
||||||
target_ulong ret;
|
|
||||||
|
|
||||||
shift = shift & 0x3F;
|
shift = shift & 0x3F;
|
||||||
mipsdsp_rndrashift_acc(temp, ac, shift, env);
|
mipsdsp_rndrashift_acc(temp, ac, shift, env);
|
||||||
|
@ -3317,9 +3313,7 @@ target_ulong helper_dextr_r_l(target_ulong ac, target_ulong shift,
|
||||||
set_DSPControl_overflow_flag(1, 23, env);
|
set_DSPControl_overflow_flag(1, 23, env);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = (temp[1] << 63) | (temp[0] >> 1);
|
return (temp[1] << 63) | (temp[0] >> 1);
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
target_ulong helper_dextr_rs_l(target_ulong ac, target_ulong shift,
|
target_ulong helper_dextr_rs_l(target_ulong ac, target_ulong shift,
|
||||||
|
@ -3327,7 +3321,6 @@ target_ulong helper_dextr_rs_l(target_ulong ac, target_ulong shift,
|
||||||
{
|
{
|
||||||
uint64_t temp[3];
|
uint64_t temp[3];
|
||||||
uint32_t temp128;
|
uint32_t temp128;
|
||||||
target_ulong ret;
|
|
||||||
|
|
||||||
shift = shift & 0x3F;
|
shift = shift & 0x3F;
|
||||||
mipsdsp_rndrashift_acc(temp, ac, shift, env);
|
mipsdsp_rndrashift_acc(temp, ac, shift, env);
|
||||||
|
@ -3354,9 +3347,7 @@ target_ulong helper_dextr_rs_l(target_ulong ac, target_ulong shift,
|
||||||
set_DSPControl_overflow_flag(1, 23, env);
|
set_DSPControl_overflow_flag(1, 23, env);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = (temp[1] << 63) | (temp[0] >> 1);
|
return (temp[1] << 63) | (temp[0] >> 1);
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -243,15 +243,13 @@ static void do_trigger_action(CPURISCVState *env, target_ulong trigger_index)
|
||||||
|
|
||||||
static uint32_t type2_breakpoint_size(CPURISCVState *env, target_ulong ctrl)
|
static uint32_t type2_breakpoint_size(CPURISCVState *env, target_ulong ctrl)
|
||||||
{
|
{
|
||||||
uint32_t size, sizelo, sizehi = 0;
|
uint32_t sizelo, sizehi = 0;
|
||||||
|
|
||||||
if (riscv_cpu_mxl(env) == MXL_RV64) {
|
if (riscv_cpu_mxl(env) == MXL_RV64) {
|
||||||
sizehi = extract32(ctrl, 21, 2);
|
sizehi = extract32(ctrl, 21, 2);
|
||||||
}
|
}
|
||||||
sizelo = extract32(ctrl, 16, 2);
|
sizelo = extract32(ctrl, 16, 2);
|
||||||
size = (sizehi << 2) | sizelo;
|
return (sizehi << 2) | sizelo;
|
||||||
|
|
||||||
return size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool type2_breakpoint_enabled(target_ulong ctrl)
|
static inline bool type2_breakpoint_enabled(target_ulong ctrl)
|
||||||
|
|
|
@ -2791,31 +2791,25 @@ static inline uint16_t
|
||||||
vssrl16(CPURISCVState *env, int vxrm, uint16_t a, uint16_t b)
|
vssrl16(CPURISCVState *env, int vxrm, uint16_t a, uint16_t b)
|
||||||
{
|
{
|
||||||
uint8_t round, shift = b & 0xf;
|
uint8_t round, shift = b & 0xf;
|
||||||
uint16_t res;
|
|
||||||
|
|
||||||
round = get_round(vxrm, a, shift);
|
round = get_round(vxrm, a, shift);
|
||||||
res = (a >> shift) + round;
|
return (a >> shift) + round;
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
static inline uint32_t
|
static inline uint32_t
|
||||||
vssrl32(CPURISCVState *env, int vxrm, uint32_t a, uint32_t b)
|
vssrl32(CPURISCVState *env, int vxrm, uint32_t a, uint32_t b)
|
||||||
{
|
{
|
||||||
uint8_t round, shift = b & 0x1f;
|
uint8_t round, shift = b & 0x1f;
|
||||||
uint32_t res;
|
|
||||||
|
|
||||||
round = get_round(vxrm, a, shift);
|
round = get_round(vxrm, a, shift);
|
||||||
res = (a >> shift) + round;
|
return (a >> shift) + round;
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
static inline uint64_t
|
static inline uint64_t
|
||||||
vssrl64(CPURISCVState *env, int vxrm, uint64_t a, uint64_t b)
|
vssrl64(CPURISCVState *env, int vxrm, uint64_t a, uint64_t b)
|
||||||
{
|
{
|
||||||
uint8_t round, shift = b & 0x3f;
|
uint8_t round, shift = b & 0x3f;
|
||||||
uint64_t res;
|
|
||||||
|
|
||||||
round = get_round(vxrm, a, shift);
|
round = get_round(vxrm, a, shift);
|
||||||
res = (a >> shift) + round;
|
return (a >> shift) + round;
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
RVVCALL(OPIVV2_RM, vssrl_vv_b, OP_UUU_B, H1, H1, H1, vssrl8)
|
RVVCALL(OPIVV2_RM, vssrl_vv_b, OP_UUU_B, H1, H1, H1, vssrl8)
|
||||||
RVVCALL(OPIVV2_RM, vssrl_vv_h, OP_UUU_H, H2, H2, H2, vssrl16)
|
RVVCALL(OPIVV2_RM, vssrl_vv_h, OP_UUU_H, H2, H2, H2, vssrl16)
|
||||||
|
@ -2839,41 +2833,33 @@ static inline int8_t
|
||||||
vssra8(CPURISCVState *env, int vxrm, int8_t a, int8_t b)
|
vssra8(CPURISCVState *env, int vxrm, int8_t a, int8_t b)
|
||||||
{
|
{
|
||||||
uint8_t round, shift = b & 0x7;
|
uint8_t round, shift = b & 0x7;
|
||||||
int8_t res;
|
|
||||||
|
|
||||||
round = get_round(vxrm, a, shift);
|
round = get_round(vxrm, a, shift);
|
||||||
res = (a >> shift) + round;
|
return (a >> shift) + round;
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
static inline int16_t
|
static inline int16_t
|
||||||
vssra16(CPURISCVState *env, int vxrm, int16_t a, int16_t b)
|
vssra16(CPURISCVState *env, int vxrm, int16_t a, int16_t b)
|
||||||
{
|
{
|
||||||
uint8_t round, shift = b & 0xf;
|
uint8_t round, shift = b & 0xf;
|
||||||
int16_t res;
|
|
||||||
|
|
||||||
round = get_round(vxrm, a, shift);
|
round = get_round(vxrm, a, shift);
|
||||||
res = (a >> shift) + round;
|
return (a >> shift) + round;
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
static inline int32_t
|
static inline int32_t
|
||||||
vssra32(CPURISCVState *env, int vxrm, int32_t a, int32_t b)
|
vssra32(CPURISCVState *env, int vxrm, int32_t a, int32_t b)
|
||||||
{
|
{
|
||||||
uint8_t round, shift = b & 0x1f;
|
uint8_t round, shift = b & 0x1f;
|
||||||
int32_t res;
|
|
||||||
|
|
||||||
round = get_round(vxrm, a, shift);
|
round = get_round(vxrm, a, shift);
|
||||||
res = (a >> shift) + round;
|
return (a >> shift) + round;
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
static inline int64_t
|
static inline int64_t
|
||||||
vssra64(CPURISCVState *env, int vxrm, int64_t a, int64_t b)
|
vssra64(CPURISCVState *env, int vxrm, int64_t a, int64_t b)
|
||||||
{
|
{
|
||||||
uint8_t round, shift = b & 0x3f;
|
uint8_t round, shift = b & 0x3f;
|
||||||
int64_t res;
|
|
||||||
|
|
||||||
round = get_round(vxrm, a, shift);
|
round = get_round(vxrm, a, shift);
|
||||||
res = (a >> shift) + round;
|
return (a >> shift) + round;
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RVVCALL(OPIVV2_RM, vssra_vv_b, OP_SSS_B, H1, H1, H1, vssra8)
|
RVVCALL(OPIVV2_RM, vssra_vv_b, OP_SSS_B, H1, H1, H1, vssra8)
|
||||||
|
|
|
@ -24,14 +24,12 @@ static QCryptoAkCipher *create_rsa_akcipher(const uint8_t *priv_key,
|
||||||
QCryptoHashAlgorithm hash)
|
QCryptoHashAlgorithm hash)
|
||||||
{
|
{
|
||||||
QCryptoAkCipherOptions opt;
|
QCryptoAkCipherOptions opt;
|
||||||
QCryptoAkCipher *rsa;
|
|
||||||
|
|
||||||
opt.alg = QCRYPTO_AKCIPHER_ALG_RSA;
|
opt.alg = QCRYPTO_AKCIPHER_ALG_RSA;
|
||||||
opt.u.rsa.padding_alg = padding;
|
opt.u.rsa.padding_alg = padding;
|
||||||
opt.u.rsa.hash_alg = hash;
|
opt.u.rsa.hash_alg = hash;
|
||||||
rsa = qcrypto_akcipher_new(&opt, QCRYPTO_AKCIPHER_KEY_TYPE_PRIVATE,
|
return qcrypto_akcipher_new(&opt, QCRYPTO_AKCIPHER_KEY_TYPE_PRIVATE,
|
||||||
priv_key, keylen, &error_abort);
|
priv_key, keylen, &error_abort);
|
||||||
return rsa;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_rsa_speed(const uint8_t *priv_key, size_t keylen,
|
static void test_rsa_speed(const uint8_t *priv_key, size_t keylen,
|
||||||
|
|
|
@ -154,10 +154,7 @@ static void test_acpi_erst_basic(void)
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
|
|
||||||
g_test_init(&argc, &argv, NULL);
|
g_test_init(&argc, &argv, NULL);
|
||||||
qtest_add_func("/acpi-erst/basic", test_acpi_erst_basic);
|
qtest_add_func("/acpi-erst/basic", test_acpi_erst_basic);
|
||||||
ret = g_test_run();
|
return g_test_run();
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,12 +34,8 @@ static void hex_loader_test(void)
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
|
|
||||||
g_test_init(&argc, &argv, NULL);
|
g_test_init(&argc, &argv, NULL);
|
||||||
|
|
||||||
qtest_add_func("/tmp/hex_loader", hex_loader_test);
|
qtest_add_func("/tmp/hex_loader", hex_loader_test);
|
||||||
ret = g_test_run();
|
return g_test_run();
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,13 +86,9 @@ static void test_panic(void)
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
|
|
||||||
g_test_init(&argc, &argv, NULL);
|
g_test_init(&argc, &argv, NULL);
|
||||||
qtest_add_func("/pvpanic-pci/panic", test_panic);
|
qtest_add_func("/pvpanic-pci/panic", test_panic);
|
||||||
qtest_add_func("/pvpanic-pci/panic-nopause", test_panic_nopause);
|
qtest_add_func("/pvpanic-pci/panic-nopause", test_panic_nopause);
|
||||||
|
|
||||||
ret = g_test_run();
|
return g_test_run();
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,13 +59,9 @@ static void test_panic(void)
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
|
|
||||||
g_test_init(&argc, &argv, NULL);
|
g_test_init(&argc, &argv, NULL);
|
||||||
qtest_add_func("/pvpanic/panic", test_panic);
|
qtest_add_func("/pvpanic/panic", test_panic);
|
||||||
qtest_add_func("/pvpanic/panic-nopause", test_panic_nopause);
|
qtest_add_func("/pvpanic/panic-nopause", test_panic_nopause);
|
||||||
|
|
||||||
ret = g_test_run();
|
return g_test_run();
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,12 +76,8 @@ static void test_mirror(void)
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
|
|
||||||
g_test_init(&argc, &argv, NULL);
|
g_test_init(&argc, &argv, NULL);
|
||||||
|
|
||||||
qtest_add_func("/netfilter/mirror", test_mirror);
|
qtest_add_func("/netfilter/mirror", test_mirror);
|
||||||
ret = g_test_run();
|
return g_test_run();
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,8 +95,6 @@ static void virtio_scsi_hotplug(void)
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
|
|
||||||
g_test_init(&argc, &argv, NULL);
|
g_test_init(&argc, &argv, NULL);
|
||||||
qtest_add_func("/virtio/balloon/nop", virtio_balloon_nop);
|
qtest_add_func("/virtio/balloon/nop", virtio_balloon_nop);
|
||||||
qtest_add_func("/virtio/console/nop", virtconsole_nop);
|
qtest_add_func("/virtio/console/nop", virtconsole_nop);
|
||||||
|
@ -109,7 +107,5 @@ int main(int argc, char **argv)
|
||||||
qtest_add_func("/virtio/scsi/nop", virtio_scsi_nop);
|
qtest_add_func("/virtio/scsi/nop", virtio_scsi_nop);
|
||||||
qtest_add_func("/virtio/scsi/hotplug", virtio_scsi_hotplug);
|
qtest_add_func("/virtio/scsi/hotplug", virtio_scsi_hotplug);
|
||||||
|
|
||||||
ret = g_test_run();
|
return g_test_run();
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,11 +73,11 @@ int main(int argc, char *argv[argc])
|
||||||
ml_printf("stack: %p <- %p\n", info.stack_limit, info.stack_base);
|
ml_printf("stack: %p <- %p\n", info.stack_limit, info.stack_base);
|
||||||
|
|
||||||
/* finally can we read/write the heap */
|
/* finally can we read/write the heap */
|
||||||
ptr_to_heap = (uint32_t *) info.heap_base;
|
ptr_to_heap = info.heap_base;
|
||||||
for (i = 0; i < 512; i++) {
|
for (i = 0; i < 512; i++) {
|
||||||
*ptr_to_heap++ = i;
|
*ptr_to_heap++ = i;
|
||||||
}
|
}
|
||||||
ptr_to_heap = (uint32_t *) info.heap_base;
|
ptr_to_heap = info.heap_base;
|
||||||
for (i = 0; i < 512; i++) {
|
for (i = 0; i < 512; i++) {
|
||||||
uint32_t tmp = *ptr_to_heap;
|
uint32_t tmp = *ptr_to_heap;
|
||||||
if (tmp != i) {
|
if (tmp != i) {
|
||||||
|
|
|
@ -855,8 +855,6 @@ plan_tests(unsigned int tests)
|
||||||
static int
|
static int
|
||||||
exit_status_(void)
|
exit_status_(void)
|
||||||
{
|
{
|
||||||
int r;
|
|
||||||
|
|
||||||
/* If there's no plan, just return the number of failures */
|
/* If there's no plan, just return the number of failures */
|
||||||
if(no_plan || !have_plan) {
|
if(no_plan || !have_plan) {
|
||||||
return failures;
|
return failures;
|
||||||
|
@ -865,15 +863,12 @@ exit_status_(void)
|
||||||
/* Ran too many tests? Return the number of tests that were run
|
/* Ran too many tests? Return the number of tests that were run
|
||||||
that shouldn't have been */
|
that shouldn't have been */
|
||||||
if(e_tests < test_count) {
|
if(e_tests < test_count) {
|
||||||
r = test_count - e_tests;
|
return test_count - e_tests;
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the number of tests that failed + the number of tests
|
/* Return the number of tests that failed + the number of tests
|
||||||
that weren't run */
|
that weren't run */
|
||||||
r = failures + e_tests - test_count;
|
return failures + e_tests - test_count;
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -216,7 +216,6 @@ static int send_reply(fuse_req_t req, int error, const void *arg,
|
||||||
|
|
||||||
int fuse_reply_iov(fuse_req_t req, const struct iovec *iov, int count)
|
int fuse_reply_iov(fuse_req_t req, const struct iovec *iov, int count)
|
||||||
{
|
{
|
||||||
int res;
|
|
||||||
g_autofree struct iovec *padded_iov = NULL;
|
g_autofree struct iovec *padded_iov = NULL;
|
||||||
|
|
||||||
padded_iov = g_try_new(struct iovec, count + 1);
|
padded_iov = g_try_new(struct iovec, count + 1);
|
||||||
|
@ -227,9 +226,7 @@ int fuse_reply_iov(fuse_req_t req, const struct iovec *iov, int count)
|
||||||
memcpy(padded_iov + 1, iov, count * sizeof(struct iovec));
|
memcpy(padded_iov + 1, iov, count * sizeof(struct iovec));
|
||||||
count++;
|
count++;
|
||||||
|
|
||||||
res = send_reply_iov(req, 0, padded_iov, count);
|
return send_reply_iov(req, 0, padded_iov, count);
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -589,7 +586,6 @@ int fuse_reply_ioctl_retry(fuse_req_t req, const struct iovec *in_iov,
|
||||||
g_autofree struct fuse_ioctl_iovec *out_fiov = NULL;
|
g_autofree struct fuse_ioctl_iovec *out_fiov = NULL;
|
||||||
struct iovec iov[4];
|
struct iovec iov[4];
|
||||||
size_t count = 1;
|
size_t count = 1;
|
||||||
int res;
|
|
||||||
|
|
||||||
memset(&arg, 0, sizeof(arg));
|
memset(&arg, 0, sizeof(arg));
|
||||||
arg.flags |= FUSE_IOCTL_RETRY;
|
arg.flags |= FUSE_IOCTL_RETRY;
|
||||||
|
@ -601,15 +597,13 @@ int fuse_reply_ioctl_retry(fuse_req_t req, const struct iovec *in_iov,
|
||||||
|
|
||||||
/* Can't handle non-compat 64bit ioctls on 32bit */
|
/* Can't handle non-compat 64bit ioctls on 32bit */
|
||||||
if (sizeof(void *) == 4 && req->ioctl_64bit) {
|
if (sizeof(void *) == 4 && req->ioctl_64bit) {
|
||||||
res = fuse_reply_err(req, EINVAL);
|
return fuse_reply_err(req, EINVAL);
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_count) {
|
if (in_count) {
|
||||||
in_fiov = fuse_ioctl_iovec_copy(in_iov, in_count);
|
in_fiov = fuse_ioctl_iovec_copy(in_iov, in_count);
|
||||||
if (!in_fiov) {
|
if (!in_fiov) {
|
||||||
res = fuse_reply_err(req, ENOMEM);
|
return fuse_reply_err(req, ENOMEM);
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
iov[count].iov_base = (void *)in_fiov;
|
iov[count].iov_base = (void *)in_fiov;
|
||||||
|
@ -619,8 +613,7 @@ int fuse_reply_ioctl_retry(fuse_req_t req, const struct iovec *in_iov,
|
||||||
if (out_count) {
|
if (out_count) {
|
||||||
out_fiov = fuse_ioctl_iovec_copy(out_iov, out_count);
|
out_fiov = fuse_ioctl_iovec_copy(out_iov, out_count);
|
||||||
if (!out_fiov) {
|
if (!out_fiov) {
|
||||||
res = fuse_reply_err(req, ENOMEM);
|
return fuse_reply_err(req, ENOMEM);
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
iov[count].iov_base = (void *)out_fiov;
|
iov[count].iov_base = (void *)out_fiov;
|
||||||
|
@ -628,9 +621,7 @@ int fuse_reply_ioctl_retry(fuse_req_t req, const struct iovec *in_iov,
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
res = send_reply_iov(req, 0, iov, count);
|
return send_reply_iov(req, 0, iov, count);
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int fuse_reply_ioctl(fuse_req_t req, int result, const void *buf, size_t size)
|
int fuse_reply_ioctl(fuse_req_t req, int result, const void *buf, size_t size)
|
||||||
|
@ -659,7 +650,6 @@ int fuse_reply_ioctl_iov(fuse_req_t req, int result, const struct iovec *iov,
|
||||||
{
|
{
|
||||||
g_autofree struct iovec *padded_iov = NULL;
|
g_autofree struct iovec *padded_iov = NULL;
|
||||||
struct fuse_ioctl_out arg;
|
struct fuse_ioctl_out arg;
|
||||||
int res;
|
|
||||||
|
|
||||||
padded_iov = g_try_new(struct iovec, count + 2);
|
padded_iov = g_try_new(struct iovec, count + 2);
|
||||||
if (padded_iov == NULL) {
|
if (padded_iov == NULL) {
|
||||||
|
@ -673,9 +663,7 @@ int fuse_reply_ioctl_iov(fuse_req_t req, int result, const struct iovec *iov,
|
||||||
|
|
||||||
memcpy(&padded_iov[2], iov, count * sizeof(struct iovec));
|
memcpy(&padded_iov[2], iov, count * sizeof(struct iovec));
|
||||||
|
|
||||||
res = send_reply_iov(req, 0, padded_iov, count + 2);
|
return send_reply_iov(req, 0, padded_iov, count + 2);
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int fuse_reply_poll(fuse_req_t req, unsigned revents)
|
int fuse_reply_poll(fuse_req_t req, unsigned revents)
|
||||||
|
|
|
@ -51,7 +51,6 @@ bool qemu_console_fill_device_address(QemuConsole *con,
|
||||||
size_t size,
|
size_t size,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
ERRP_GUARD();
|
|
||||||
DeviceState *dev = DEVICE(object_property_get_link(OBJECT(con),
|
DeviceState *dev = DEVICE(object_property_get_link(OBJECT(con),
|
||||||
"device",
|
"device",
|
||||||
&error_abort));
|
&error_abort));
|
||||||
|
|
|
@ -311,9 +311,9 @@ void qemu_add_opts(QemuOptsList *list)
|
||||||
static int qemu_config_foreach(FILE *fp, QEMUConfigCB *cb, void *opaque,
|
static int qemu_config_foreach(FILE *fp, QEMUConfigCB *cb, void *opaque,
|
||||||
const char *fname, Error **errp)
|
const char *fname, Error **errp)
|
||||||
{
|
{
|
||||||
|
ERRP_GUARD();
|
||||||
char line[1024], prev_group[64], group[64], arg[64], value[1024];
|
char line[1024], prev_group[64], group[64], arg[64], value[1024];
|
||||||
Location loc;
|
Location loc;
|
||||||
Error *local_err = NULL;
|
|
||||||
QDict *qdict = NULL;
|
QDict *qdict = NULL;
|
||||||
int res = -EINVAL, lno = 0;
|
int res = -EINVAL, lno = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
@ -341,10 +341,9 @@ static int qemu_config_foreach(FILE *fp, QEMUConfigCB *cb, void *opaque,
|
||||||
}
|
}
|
||||||
if (qdict != prev) {
|
if (qdict != prev) {
|
||||||
if (prev) {
|
if (prev) {
|
||||||
cb(prev_group, prev, opaque, &local_err);
|
cb(prev_group, prev, opaque, errp);
|
||||||
qobject_unref(prev);
|
qobject_unref(prev);
|
||||||
if (local_err) {
|
if (*errp) {
|
||||||
error_propagate(errp, local_err);
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -416,12 +415,12 @@ int qemu_read_config_file(const char *filename, QEMUConfigCB *cb, Error **errp)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void config_parse_qdict_section(QDict *options, QemuOptsList *opts,
|
static bool config_parse_qdict_section(QDict *options, QemuOptsList *opts,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
QemuOpts *subopts;
|
QemuOpts *subopts;
|
||||||
QDict *subqdict;
|
g_autoptr(QDict) subqdict = NULL;
|
||||||
QList *list = NULL;
|
g_autoptr(QList) list = NULL;
|
||||||
size_t orig_size, enum_size;
|
size_t orig_size, enum_size;
|
||||||
char *prefix;
|
char *prefix;
|
||||||
|
|
||||||
|
@ -430,23 +429,23 @@ static void config_parse_qdict_section(QDict *options, QemuOptsList *opts,
|
||||||
g_free(prefix);
|
g_free(prefix);
|
||||||
orig_size = qdict_size(subqdict);
|
orig_size = qdict_size(subqdict);
|
||||||
if (!orig_size) {
|
if (!orig_size) {
|
||||||
goto out;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
subopts = qemu_opts_create(opts, NULL, 0, errp);
|
subopts = qemu_opts_create(opts, NULL, 0, errp);
|
||||||
if (!subopts) {
|
if (!subopts) {
|
||||||
goto out;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!qemu_opts_absorb_qdict(subopts, subqdict, errp)) {
|
if (!qemu_opts_absorb_qdict(subopts, subqdict, errp)) {
|
||||||
goto out;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum_size = qdict_size(subqdict);
|
enum_size = qdict_size(subqdict);
|
||||||
if (enum_size < orig_size && enum_size) {
|
if (enum_size < orig_size && enum_size) {
|
||||||
error_setg(errp, "Unknown option '%s' for [%s]",
|
error_setg(errp, "Unknown option '%s' for [%s]",
|
||||||
qdict_first(subqdict)->key, opts->name);
|
qdict_first(subqdict)->key, opts->name);
|
||||||
goto out;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enum_size) {
|
if (enum_size) {
|
||||||
|
@ -461,7 +460,7 @@ static void config_parse_qdict_section(QDict *options, QemuOptsList *opts,
|
||||||
if (qdict_size(subqdict)) {
|
if (qdict_size(subqdict)) {
|
||||||
error_setg(errp, "Unused option '%s' for [%s]",
|
error_setg(errp, "Unused option '%s' for [%s]",
|
||||||
qdict_first(subqdict)->key, opts->name);
|
qdict_first(subqdict)->key, opts->name);
|
||||||
goto out;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QLIST_FOREACH_ENTRY(list, list_entry) {
|
QLIST_FOREACH_ENTRY(list, list_entry) {
|
||||||
|
@ -471,46 +470,43 @@ static void config_parse_qdict_section(QDict *options, QemuOptsList *opts,
|
||||||
if (!section) {
|
if (!section) {
|
||||||
error_setg(errp, "[%s] section (index %u) does not consist of "
|
error_setg(errp, "[%s] section (index %u) does not consist of "
|
||||||
"keys", opts->name, i);
|
"keys", opts->name, i);
|
||||||
goto out;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
opt_name = g_strdup_printf("%s.%u", opts->name, i++);
|
opt_name = g_strdup_printf("%s.%u", opts->name, i++);
|
||||||
subopts = qemu_opts_create(opts, opt_name, 1, errp);
|
subopts = qemu_opts_create(opts, opt_name, 1, errp);
|
||||||
g_free(opt_name);
|
g_free(opt_name);
|
||||||
if (!subopts) {
|
if (!subopts) {
|
||||||
goto out;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!qemu_opts_absorb_qdict(subopts, section, errp)) {
|
if (!qemu_opts_absorb_qdict(subopts, section, errp)) {
|
||||||
qemu_opts_del(subopts);
|
qemu_opts_del(subopts);
|
||||||
goto out;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qdict_size(section)) {
|
if (qdict_size(section)) {
|
||||||
error_setg(errp, "[%s] section doesn't support the option '%s'",
|
error_setg(errp, "[%s] section doesn't support the option '%s'",
|
||||||
opts->name, qdict_first(section)->key);
|
opts->name, qdict_first(section)->key);
|
||||||
qemu_opts_del(subopts);
|
qemu_opts_del(subopts);
|
||||||
goto out;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
return true;
|
||||||
qobject_unref(subqdict);
|
|
||||||
qobject_unref(list);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void qemu_config_parse_qdict(QDict *options, QemuOptsList **lists,
|
bool qemu_config_parse_qdict(QDict *options, QemuOptsList **lists,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
Error *local_err = NULL;
|
|
||||||
|
|
||||||
for (i = 0; lists[i]; i++) {
|
for (i = 0; lists[i]; i++) {
|
||||||
config_parse_qdict_section(options, lists[i], &local_err);
|
if (!config_parse_qdict_section(options, lists[i], errp)) {
|
||||||
if (local_err) {
|
return false;
|
||||||
error_propagate(errp, local_err);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -210,7 +210,8 @@ static int inet_listen_saddr(InetSocketAddress *saddr,
|
||||||
int num,
|
int num,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
struct addrinfo ai,*res,*e;
|
ERRP_GUARD();
|
||||||
|
struct addrinfo ai, *res, *e;
|
||||||
char port[33];
|
char port[33];
|
||||||
char uaddr[INET6_ADDRSTRLEN+1];
|
char uaddr[INET6_ADDRSTRLEN+1];
|
||||||
char uport[33];
|
char uport[33];
|
||||||
|
@ -218,7 +219,6 @@ static int inet_listen_saddr(InetSocketAddress *saddr,
|
||||||
int slisten = -1;
|
int slisten = -1;
|
||||||
int saved_errno = 0;
|
int saved_errno = 0;
|
||||||
bool socket_created = false;
|
bool socket_created = false;
|
||||||
Error *err = NULL;
|
|
||||||
|
|
||||||
if (saddr->keep_alive) {
|
if (saddr->keep_alive) {
|
||||||
error_setg(errp, "keep-alive option is not supported for passive "
|
error_setg(errp, "keep-alive option is not supported for passive "
|
||||||
|
@ -231,11 +231,9 @@ static int inet_listen_saddr(InetSocketAddress *saddr,
|
||||||
if (saddr->has_numeric && saddr->numeric) {
|
if (saddr->has_numeric && saddr->numeric) {
|
||||||
ai.ai_flags |= AI_NUMERICHOST | AI_NUMERICSERV;
|
ai.ai_flags |= AI_NUMERICHOST | AI_NUMERICSERV;
|
||||||
}
|
}
|
||||||
ai.ai_family = inet_ai_family_from_address(saddr, &err);
|
|
||||||
ai.ai_socktype = SOCK_STREAM;
|
ai.ai_socktype = SOCK_STREAM;
|
||||||
|
ai.ai_family = inet_ai_family_from_address(saddr, errp);
|
||||||
if (err) {
|
if (*errp) {
|
||||||
error_propagate(errp, err);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -392,9 +390,9 @@ static int inet_connect_addr(const InetSocketAddress *saddr,
|
||||||
static struct addrinfo *inet_parse_connect_saddr(InetSocketAddress *saddr,
|
static struct addrinfo *inet_parse_connect_saddr(InetSocketAddress *saddr,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
|
ERRP_GUARD();
|
||||||
struct addrinfo ai, *res;
|
struct addrinfo ai, *res;
|
||||||
int rc;
|
int rc;
|
||||||
Error *err = NULL;
|
|
||||||
static int useV4Mapped = 1;
|
static int useV4Mapped = 1;
|
||||||
|
|
||||||
memset(&ai, 0, sizeof(ai));
|
memset(&ai, 0, sizeof(ai));
|
||||||
|
@ -403,11 +401,9 @@ static struct addrinfo *inet_parse_connect_saddr(InetSocketAddress *saddr,
|
||||||
if (qatomic_read(&useV4Mapped)) {
|
if (qatomic_read(&useV4Mapped)) {
|
||||||
ai.ai_flags |= AI_V4MAPPED;
|
ai.ai_flags |= AI_V4MAPPED;
|
||||||
}
|
}
|
||||||
ai.ai_family = inet_ai_family_from_address(saddr, &err);
|
|
||||||
ai.ai_socktype = SOCK_STREAM;
|
ai.ai_socktype = SOCK_STREAM;
|
||||||
|
ai.ai_family = inet_ai_family_from_address(saddr, errp);
|
||||||
if (err) {
|
if (*errp) {
|
||||||
error_propagate(errp, err);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -499,20 +495,18 @@ static int inet_dgram_saddr(InetSocketAddress *sraddr,
|
||||||
InetSocketAddress *sladdr,
|
InetSocketAddress *sladdr,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
|
ERRP_GUARD();
|
||||||
struct addrinfo ai, *peer = NULL, *local = NULL;
|
struct addrinfo ai, *peer = NULL, *local = NULL;
|
||||||
const char *addr;
|
const char *addr;
|
||||||
const char *port;
|
const char *port;
|
||||||
int sock = -1, rc;
|
int sock = -1, rc;
|
||||||
Error *err = NULL;
|
|
||||||
|
|
||||||
/* lookup peer addr */
|
/* lookup peer addr */
|
||||||
memset(&ai,0, sizeof(ai));
|
memset(&ai,0, sizeof(ai));
|
||||||
ai.ai_flags = AI_CANONNAME | AI_V4MAPPED | AI_ADDRCONFIG;
|
ai.ai_flags = AI_CANONNAME | AI_V4MAPPED | AI_ADDRCONFIG;
|
||||||
ai.ai_family = inet_ai_family_from_address(sraddr, &err);
|
|
||||||
ai.ai_socktype = SOCK_DGRAM;
|
ai.ai_socktype = SOCK_DGRAM;
|
||||||
|
ai.ai_family = inet_ai_family_from_address(sraddr, errp);
|
||||||
if (err) {
|
if (*errp) {
|
||||||
error_propagate(errp, err);
|
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -90,16 +90,13 @@ static void thread_context_set_cpu_affinity(Object *obj, Visitor *v,
|
||||||
uint16List *l, *host_cpus = NULL;
|
uint16List *l, *host_cpus = NULL;
|
||||||
unsigned long *bitmap = NULL;
|
unsigned long *bitmap = NULL;
|
||||||
int nbits = 0, ret;
|
int nbits = 0, ret;
|
||||||
Error *err = NULL;
|
|
||||||
|
|
||||||
if (tc->init_cpu_bitmap) {
|
if (tc->init_cpu_bitmap) {
|
||||||
error_setg(errp, "Mixing CPU and node affinity not supported");
|
error_setg(errp, "Mixing CPU and node affinity not supported");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
visit_type_uint16List(v, name, &host_cpus, &err);
|
if (!visit_type_uint16List(v, name, &host_cpus, errp)) {
|
||||||
if (err) {
|
|
||||||
error_propagate(errp, err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +175,6 @@ static void thread_context_set_node_affinity(Object *obj, Visitor *v,
|
||||||
uint16List *l, *host_nodes = NULL;
|
uint16List *l, *host_nodes = NULL;
|
||||||
unsigned long *bitmap = NULL;
|
unsigned long *bitmap = NULL;
|
||||||
struct bitmask *tmp_cpus;
|
struct bitmask *tmp_cpus;
|
||||||
Error *err = NULL;
|
|
||||||
int ret, i;
|
int ret, i;
|
||||||
|
|
||||||
if (tc->init_cpu_bitmap) {
|
if (tc->init_cpu_bitmap) {
|
||||||
|
@ -186,9 +182,7 @@ static void thread_context_set_node_affinity(Object *obj, Visitor *v,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
visit_type_uint16List(v, name, &host_nodes, &err);
|
if (!visit_type_uint16List(v, name, &host_nodes, errp)) {
|
||||||
if (err) {
|
|
||||||
error_propagate(errp, err);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -271,7 +271,7 @@ static void collect_usable_iova_ranges(QEMUVFIOState *s, void *buf)
|
||||||
if (!cap->next) {
|
if (!cap->next) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
cap = (struct vfio_info_cap_header *)(buf + cap->next);
|
cap = buf + cap->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
cap_iova_range = (struct vfio_iommu_type1_info_cap_iova_range *)cap;
|
cap_iova_range = (struct vfio_iommu_type1_info_cap_iova_range *)cap;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue