mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'hw-misc-accel-20240604' of https://github.com/philmd/qemu into staging
Misc HW & accelerators patch queue - Use async exit in debugexit model (Thomas) - Fixed bug reading xlnx_dpdma descriptor (Peter) - Initialise plugin state before vCPU/thread creation (Alex) - Few sprintf() calls removed (Richard & Philippe) - Few deprecated QMP events removed (Philippe) - Housekeeping in Xen (Edgar & Philippe) - Split USB HID/HUB & update MAINTAINERS (Gerd) # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAmZe5FMACgkQ4+MsLN6t # wN5QghAAl1j5++wKcJaWoribnhxYctcBPhg3eEAwg2qVRbx5tz7HwYw8jYp+qB47 # abAtE3WOUg+Z+NaBi0bTj8Ns0wrBTZy0toJrQb+k5M9CzJJIFSURcFV2J40ORld8 # VHNKmzNN+ZscxAW3fSFruJlGLaskwB0bk9VF0cYSip2Y+xjbPlJZ8dlffX/HAvwB # Ul4gJW04FT3k6KoeJASNiAMm7mPW9iP4kY7rKz+j+NWydAfl8yPzxFwW6J6U2npi # Hvmy1519W74cftZSqxkBETtbw1YVKyT6QEA9HjJOjc05E6UYnxoR13taEzLNaDHA # B7Xhp6IUYZGRD1bt85WZCP5t5yUINLgmzJU2OQnv9dfU1HdSkk0FQiBr0Iif3tCI # /2cQumkGI4etXX77oVIwkioo0ZTvEggDNsN1eKHIY7yIE5etqXduPwnTfwHFI3lv # Nj18MGF0cftbYDEbUwNUnN5U6+msW3Si6hQaUxpUWXy7Idkl9pBiWjv1OpBg9PqX # YIuw9/USs7i8yZkh0/q8UcZxdzB3LF+LxjVVVoTVD6t+KbRSkJSOJm7hfqCKuXbC # lEmtLt+aH/pdZ2Banug1Ayen2L7s0czRHQWC++DfNQve1xEUkSFp5VE0mxsr+6Rp # 18/dSGo++Nh52jUt2QFEv9LyAAQCKxg72I9DW9sB7uC004+ub84= # =xcID # -----END PGP SIGNATURE----- # gpg: Signature made Tue 04 Jun 2024 04:54:27 AM CDT # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [full] * tag 'hw-misc-accel-20240604' of https://github.com/philmd/qemu: (32 commits) usb: add config options for the hub and hid devices qga: Remove deprecated 'blacklist' argument / config key trace: Remove deprecated 'vcpu' field from QMP trace events hw/acpi: Remove the deprecated QAPI MEM_UNPLUG_ERROR event hw/dma/xlnx_dpdma: Read descriptor into buffer, not into pointer-to-buffer hw/misc/debugexit: use runstate API instead of plain exit() hw/xen: Register framebuffer backend via xen_backend_init() hw/xen: Make XenDevOps structures const hw/xen: Constify xenstore_be::XenDevOps hw/xen: Constify XenLegacyDevice::XenDevOps physmem: Replace check for RAMBlock offset 0 with xen_mr_is_memory physmem: Always pass offset + addr to xen_map_cache xen: Add xen_mr_is_memory() core/cpu-common: initialise plugin state before thread creation plugins: remove special casing for cpu->realized cpu-target: don't set cpu->thread_id to bogus value cpu: move Qemu[Thread|Cond] setup into common code hw/core: expand on the alignment of CPUState accel/kvm: Fix two lines with hard-coded tabs accel/tcg: Move common declarations to 'internal-common.h' ... Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
+1
-3
@@ -2142,8 +2142,7 @@ F: tests/qtest/fuzz-sdcard-test.c
|
||||
F: tests/qtest/sdhci-test.c
|
||||
|
||||
USB
|
||||
M: Gerd Hoffmann <kraxel@redhat.com>
|
||||
S: Odd Fixes
|
||||
S: Orphan
|
||||
F: hw/usb/*
|
||||
F: stubs/usb-dev-stub.c
|
||||
F: tests/qtest/usb-*-test.c
|
||||
@@ -2152,7 +2151,6 @@ F: include/hw/usb.h
|
||||
F: include/hw/usb/
|
||||
|
||||
USB (serial adapter)
|
||||
R: Gerd Hoffmann <kraxel@redhat.com>
|
||||
M: Samuel Thibault <samuel.thibault@ens-lyon.org>
|
||||
S: Maintained
|
||||
F: hw/usb/dev-serial.c
|
||||
|
||||
@@ -68,9 +68,6 @@ void dummy_start_vcpu_thread(CPUState *cpu)
|
||||
{
|
||||
char thread_name[VCPU_THREAD_NAME_SIZE];
|
||||
|
||||
cpu->thread = g_malloc0(sizeof(QemuThread));
|
||||
cpu->halt_cond = g_malloc0(sizeof(QemuCond));
|
||||
qemu_cond_init(cpu->halt_cond);
|
||||
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/DUMMY",
|
||||
cpu->cpu_index);
|
||||
qemu_thread_create(cpu->thread, thread_name, dummy_cpu_thread_fn, cpu,
|
||||
|
||||
@@ -463,10 +463,6 @@ static void hvf_start_vcpu_thread(CPUState *cpu)
|
||||
*/
|
||||
assert(hvf_enabled());
|
||||
|
||||
cpu->thread = g_malloc0(sizeof(QemuThread));
|
||||
cpu->halt_cond = g_malloc0(sizeof(QemuCond));
|
||||
qemu_cond_init(cpu->halt_cond);
|
||||
|
||||
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/HVF",
|
||||
cpu->cpu_index);
|
||||
qemu_thread_create(cpu->thread, thread_name, hvf_cpu_thread_fn,
|
||||
|
||||
@@ -66,9 +66,6 @@ static void kvm_start_vcpu_thread(CPUState *cpu)
|
||||
{
|
||||
char thread_name[VCPU_THREAD_NAME_SIZE];
|
||||
|
||||
cpu->thread = g_malloc0(sizeof(QemuThread));
|
||||
cpu->halt_cond = g_malloc0(sizeof(QemuCond));
|
||||
qemu_cond_init(cpu->halt_cond);
|
||||
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/KVM",
|
||||
cpu->cpu_index);
|
||||
qemu_thread_create(cpu->thread, thread_name, kvm_vcpu_thread_fn,
|
||||
|
||||
+2
-2
@@ -2893,7 +2893,7 @@ int kvm_convert_memory(hwaddr start, hwaddr size, bool to_private)
|
||||
!memory_region_is_ram_device(mr) &&
|
||||
!memory_region_is_rom(mr) &&
|
||||
!memory_region_is_romd(mr)) {
|
||||
ret = 0;
|
||||
ret = 0;
|
||||
} else {
|
||||
error_report("Convert non guest_memfd backed memory region "
|
||||
"(0x%"HWADDR_PRIx" ,+ 0x%"HWADDR_PRIx") to %s",
|
||||
@@ -2964,7 +2964,7 @@ int kvm_cpu_exec(CPUState *cpu)
|
||||
|
||||
kvm_arch_pre_run(cpu, run);
|
||||
if (qatomic_read(&cpu->exit_request)) {
|
||||
trace_kvm_interrupt_exit_request();
|
||||
trace_kvm_interrupt_exit_request();
|
||||
/*
|
||||
* KVM requires us to reenter the kernel after IO exits to complete
|
||||
* instruction emulation. This self-signal will ensure that we
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
extern int64_t max_delay;
|
||||
extern int64_t max_advance;
|
||||
|
||||
extern bool one_insn_per_tb;
|
||||
|
||||
/*
|
||||
* Return true if CS is not running in parallel with other cpus, either
|
||||
* because there are no other cpus or we are within an exclusive context.
|
||||
@@ -41,4 +43,17 @@ static inline bool cpu_plugin_mem_cbs_enabled(const CPUState *cpu)
|
||||
#endif
|
||||
}
|
||||
|
||||
TranslationBlock *tb_gen_code(CPUState *cpu, vaddr pc,
|
||||
uint64_t cs_base, uint32_t flags,
|
||||
int cflags);
|
||||
void page_init(void);
|
||||
void tb_htable_init(void);
|
||||
void tb_reset_jump(TranslationBlock *tb, int n);
|
||||
TranslationBlock *tb_link_page(TranslationBlock *tb);
|
||||
void cpu_restore_state_from_tb(CPUState *cpu, TranslationBlock *tb,
|
||||
uintptr_t host_pc);
|
||||
|
||||
bool tcg_exec_realizefn(CPUState *cpu, Error **errp);
|
||||
void tcg_exec_unrealizefn(CPUState *cpu);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -69,19 +69,7 @@ void tb_invalidate_phys_range_fast(ram_addr_t ram_addr,
|
||||
G_NORETURN void cpu_io_recompile(CPUState *cpu, uintptr_t retaddr);
|
||||
#endif /* CONFIG_SOFTMMU */
|
||||
|
||||
TranslationBlock *tb_gen_code(CPUState *cpu, vaddr pc,
|
||||
uint64_t cs_base, uint32_t flags,
|
||||
int cflags);
|
||||
void page_init(void);
|
||||
void tb_htable_init(void);
|
||||
void tb_reset_jump(TranslationBlock *tb, int n);
|
||||
TranslationBlock *tb_link_page(TranslationBlock *tb);
|
||||
bool tb_invalidate_phys_page_unwind(tb_page_addr_t addr, uintptr_t pc);
|
||||
void cpu_restore_state_from_tb(CPUState *cpu, TranslationBlock *tb,
|
||||
uintptr_t host_pc);
|
||||
|
||||
bool tcg_exec_realizefn(CPUState *cpu, Error **errp);
|
||||
void tcg_exec_unrealizefn(CPUState *cpu);
|
||||
|
||||
/* Return the current PC from CPU, which may be cached in TB. */
|
||||
static inline vaddr log_pc(CPUState *cpu, const TranslationBlock *tb)
|
||||
@@ -93,8 +81,6 @@ static inline vaddr log_pc(CPUState *cpu, const TranslationBlock *tb)
|
||||
}
|
||||
}
|
||||
|
||||
extern bool one_insn_per_tb;
|
||||
|
||||
/**
|
||||
* tcg_req_mo:
|
||||
* @type: TCGBar
|
||||
|
||||
@@ -137,10 +137,6 @@ void mttcg_start_vcpu_thread(CPUState *cpu)
|
||||
g_assert(tcg_enabled());
|
||||
tcg_cpu_init_cflags(cpu, current_machine->smp.max_cpus > 1);
|
||||
|
||||
cpu->thread = g_new0(QemuThread, 1);
|
||||
cpu->halt_cond = g_malloc0(sizeof(QemuCond));
|
||||
qemu_cond_init(cpu->halt_cond);
|
||||
|
||||
/* create a thread per vCPU with TCG (MTTCG) */
|
||||
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "CPU %d/TCG",
|
||||
cpu->cpu_index);
|
||||
|
||||
@@ -317,22 +317,22 @@ void rr_start_vcpu_thread(CPUState *cpu)
|
||||
tcg_cpu_init_cflags(cpu, false);
|
||||
|
||||
if (!single_tcg_cpu_thread) {
|
||||
cpu->thread = g_new0(QemuThread, 1);
|
||||
cpu->halt_cond = g_new0(QemuCond, 1);
|
||||
qemu_cond_init(cpu->halt_cond);
|
||||
single_tcg_halt_cond = cpu->halt_cond;
|
||||
single_tcg_cpu_thread = cpu->thread;
|
||||
|
||||
/* share a single thread for all cpus with TCG */
|
||||
snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "ALL CPUs/TCG");
|
||||
qemu_thread_create(cpu->thread, thread_name,
|
||||
rr_cpu_thread_fn,
|
||||
cpu, QEMU_THREAD_JOINABLE);
|
||||
|
||||
single_tcg_halt_cond = cpu->halt_cond;
|
||||
single_tcg_cpu_thread = cpu->thread;
|
||||
} else {
|
||||
/* we share the thread */
|
||||
/* we share the thread, dump spare data */
|
||||
g_free(cpu->thread);
|
||||
qemu_cond_destroy(cpu->halt_cond);
|
||||
cpu->thread = single_tcg_cpu_thread;
|
||||
cpu->halt_cond = single_tcg_halt_cond;
|
||||
|
||||
/* copy the stuff done at start of rr_cpu_thread_fn */
|
||||
cpu->thread_id = first_cpu->thread_id;
|
||||
cpu->neg.can_do_io = 1;
|
||||
cpu->created = true;
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
#include "hw/boards.h"
|
||||
#endif
|
||||
#include "internal-target.h"
|
||||
#include "internal-common.h"
|
||||
|
||||
struct TCGState {
|
||||
AccelState parent_obj;
|
||||
|
||||
@@ -241,7 +241,6 @@ void cpu_exec_initfn(CPUState *cpu)
|
||||
cpu->num_ases = 0;
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
cpu->thread_id = qemu_get_thread_id();
|
||||
cpu->memory = get_system_memory();
|
||||
object_ref(OBJECT(cpu->memory));
|
||||
#endif
|
||||
|
||||
+1
-1
@@ -1000,7 +1000,7 @@ print_indexed (int basereg,
|
||||
|
||||
/* Generate the text for the index register.
|
||||
Where this will be output is not yet determined. */
|
||||
sprintf (buf, "%s:%c%s",
|
||||
snprintf(buf, sizeof(buf), "%s:%c%s",
|
||||
reg_names[(word >> 12) & 0xf],
|
||||
(word & 0x800) ? 'l' : 'w',
|
||||
scales[(word >> 9) & 3]);
|
||||
|
||||
+16
-9
@@ -600,7 +600,8 @@ static char *
|
||||
get_field (long instr, long mask, unsigned short low)
|
||||
{
|
||||
char tmpstr[25];
|
||||
sprintf(tmpstr, "%s%d", register_prefix, (int)((instr & mask) >> low));
|
||||
snprintf(tmpstr, sizeof(tmpstr), "%s%d", register_prefix,
|
||||
(int)((instr & mask) >> low));
|
||||
return(strdup(tmpstr));
|
||||
}
|
||||
|
||||
@@ -608,7 +609,8 @@ static char *
|
||||
get_field_imm (long instr)
|
||||
{
|
||||
char tmpstr[25];
|
||||
sprintf(tmpstr, "%d", (short)((instr & IMM_MASK) >> IMM_LOW));
|
||||
snprintf(tmpstr, sizeof(tmpstr), "%d",
|
||||
(short)((instr & IMM_MASK) >> IMM_LOW));
|
||||
return(strdup(tmpstr));
|
||||
}
|
||||
|
||||
@@ -616,7 +618,8 @@ static char *
|
||||
get_field_imm5 (long instr)
|
||||
{
|
||||
char tmpstr[25];
|
||||
sprintf(tmpstr, "%d", (short)((instr & IMM5_MASK) >> IMM_LOW));
|
||||
snprintf(tmpstr, sizeof(tmpstr), "%d",
|
||||
(short)((instr & IMM5_MASK) >> IMM_LOW));
|
||||
return(strdup(tmpstr));
|
||||
}
|
||||
|
||||
@@ -624,7 +627,8 @@ static char *
|
||||
get_field_rfsl (long instr)
|
||||
{
|
||||
char tmpstr[25];
|
||||
sprintf(tmpstr, "%s%d", fsl_register_prefix, (short)((instr & RFSL_MASK) >> IMM_LOW));
|
||||
snprintf(tmpstr, sizeof(tmpstr), "%s%d", fsl_register_prefix,
|
||||
(short)((instr & RFSL_MASK) >> IMM_LOW));
|
||||
return(strdup(tmpstr));
|
||||
}
|
||||
|
||||
@@ -632,7 +636,8 @@ static char *
|
||||
get_field_imm15 (long instr)
|
||||
{
|
||||
char tmpstr[25];
|
||||
sprintf(tmpstr, "%d", (short)((instr & IMM15_MASK) >> IMM_LOW));
|
||||
snprintf(tmpstr, sizeof(tmpstr), "%d",
|
||||
(short)((instr & IMM15_MASK) >> IMM_LOW));
|
||||
return(strdup(tmpstr));
|
||||
}
|
||||
|
||||
@@ -641,7 +646,8 @@ static char *
|
||||
get_field_unsigned_imm (long instr)
|
||||
{
|
||||
char tmpstr[25];
|
||||
sprintf(tmpstr, "%d", (int)((instr & IMM_MASK) >> IMM_LOW));
|
||||
snprintf(tmpstr, sizeof(tmpstr), "%d",
|
||||
(int)((instr & IMM_MASK) >> IMM_LOW));
|
||||
return(strdup(tmpstr));
|
||||
}
|
||||
#endif
|
||||
@@ -653,7 +659,8 @@ get_field_unsigned_imm (long instr)
|
||||
{
|
||||
char tmpstr[25];
|
||||
|
||||
sprintf(tmpstr, "%s%s", register_prefix, (((instr & IMM_MASK) >> IMM_LOW) & REG_MSR_MASK) == 0 ? "pc" : "msr");
|
||||
snprintf(tmpstr, sizeof(tmpstr), "%s%s", register_prefix,
|
||||
(((instr & IMM_MASK) >> IMM_LOW) & REG_MSR_MASK) == 0 ? "pc" : "msr");
|
||||
|
||||
return(strdup(tmpstr));
|
||||
}
|
||||
@@ -709,7 +716,7 @@ get_field_special(long instr, const struct op_code_struct *op)
|
||||
default :
|
||||
{
|
||||
if ( ((((instr & IMM_MASK) >> IMM_LOW) ^ op->immval_mask) & 0xE000) == REG_PVR_MASK) {
|
||||
sprintf(tmpstr, "%s%u", pvr_register_prefix,
|
||||
snprintf(tmpstr, sizeof(tmpstr), "%s%u", pvr_register_prefix,
|
||||
(unsigned short)(((instr & IMM_MASK) >> IMM_LOW) ^
|
||||
op->immval_mask) ^ REG_PVR_MASK);
|
||||
return(strdup(tmpstr));
|
||||
@@ -720,7 +727,7 @@ get_field_special(long instr, const struct op_code_struct *op)
|
||||
break;
|
||||
}
|
||||
|
||||
sprintf(tmpstr, "%s%s", register_prefix, spr);
|
||||
snprintf(tmpstr, sizeof(tmpstr), "%s%s", register_prefix, spr);
|
||||
return(strdup(tmpstr));
|
||||
}
|
||||
|
||||
|
||||
@@ -148,22 +148,6 @@ accepted incorrect commands will return an error. Users should make sure that
|
||||
all arguments passed to ``device_add`` are consistent with the documented
|
||||
property types.
|
||||
|
||||
QEMU Machine Protocol (QMP) events
|
||||
----------------------------------
|
||||
|
||||
``MEM_UNPLUG_ERROR`` (since 6.2)
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
Use the more generic event ``DEVICE_UNPLUG_GUEST_ERROR`` instead.
|
||||
|
||||
``vcpu`` trace events (since 8.1)
|
||||
'''''''''''''''''''''''''''''''''
|
||||
|
||||
The ability to instrument QEMU helper functions with vCPU-aware trace
|
||||
points was removed in 7.0. However QMP still exposed the vcpu
|
||||
parameter. This argument has now been deprecated and the remaining
|
||||
remaining trace points that used it are selected just by name.
|
||||
|
||||
Host Architectures
|
||||
------------------
|
||||
|
||||
@@ -478,24 +462,6 @@ versions, aliases will point to newer CPU model versions
|
||||
depending on the machine type, so management software must
|
||||
resolve CPU model aliases before starting a virtual machine.
|
||||
|
||||
QEMU guest agent
|
||||
----------------
|
||||
|
||||
``--blacklist`` command line option (since 7.2)
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
``--blacklist`` has been replaced by ``--block-rpcs`` (which is a better
|
||||
wording for what this option does). The short form ``-b`` still stays
|
||||
the same and thus is the preferred way for scripts that should run with
|
||||
both, older and future versions of QEMU.
|
||||
|
||||
``blacklist`` config file option (since 7.2)
|
||||
''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
The ``blacklist`` config file option has been renamed to ``block-rpcs``
|
||||
(to be in sync with the renaming of the corresponding command line
|
||||
option).
|
||||
|
||||
Migration
|
||||
---------
|
||||
|
||||
|
||||
@@ -671,6 +671,21 @@ Use ``multifd-channels`` instead.
|
||||
|
||||
Use ``multifd-compression`` instead.
|
||||
|
||||
QEMU Machine Protocol (QMP) events
|
||||
----------------------------------
|
||||
|
||||
``MEM_UNPLUG_ERROR`` (removed in 9.1)
|
||||
'''''''''''''''''''''''''''''''''''''
|
||||
|
||||
MEM_UNPLUG_ERROR has been replaced by the more generic ``DEVICE_UNPLUG_GUEST_ERROR`` event.
|
||||
|
||||
``vcpu`` trace events (removed in 9.1)
|
||||
''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
The ability to instrument QEMU helper functions with vCPU-aware trace
|
||||
points was removed in 7.0.
|
||||
|
||||
|
||||
Human Monitor Protocol (HMP) commands
|
||||
-------------------------------------
|
||||
|
||||
@@ -1129,4 +1144,22 @@ stable for some time and is now widely used.
|
||||
The command line and feature set is very close to the removed
|
||||
C implementation.
|
||||
|
||||
QEMU guest agent
|
||||
----------------
|
||||
|
||||
``--blacklist`` command line option (removed in 9.1)
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
``--blacklist`` has been replaced by ``--block-rpcs`` (which is a better
|
||||
wording for what this option does). The short form ``-b`` still stays
|
||||
the same and thus is the preferred way for scripts that should run with
|
||||
both, older and future versions of QEMU.
|
||||
|
||||
``blacklist`` config file option (removed in 9.1)
|
||||
'''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
The ``blacklist`` config file option has been renamed to ``block-rpcs``
|
||||
(to be in sync with the renaming of the corresponding command line
|
||||
option).
|
||||
|
||||
.. _Intel discontinuance notification: https://www.intel.com/content/www/us/en/content-details/781327/intel-is-discontinuing-ip-ordering-codes-listed-in-pdn2312-for-nios-ii-ip.html
|
||||
|
||||
@@ -513,7 +513,7 @@ static void xen_9pfs_alloc(struct XenLegacyDevice *xendev)
|
||||
xenstore_write_be_int(xendev, "max-ring-page-order", MAX_RING_ORDER);
|
||||
}
|
||||
|
||||
static struct XenDevOps xen_9pfs_ops = {
|
||||
static const struct XenDevOps xen_9pfs_ops = {
|
||||
.size = sizeof(Xen9pfsDev),
|
||||
.flags = DEVOPS_FLAG_NEED_GNTDEV,
|
||||
.alloc = xen_9pfs_alloc,
|
||||
|
||||
@@ -178,14 +178,6 @@ static void acpi_memory_hotplug_write(void *opaque, hwaddr addr, uint64_t data,
|
||||
hotplug_handler_unplug(hotplug_ctrl, dev, &local_err);
|
||||
if (local_err) {
|
||||
trace_mhp_acpi_pc_dimm_delete_failed(mem_st->selector);
|
||||
|
||||
/*
|
||||
* Send both MEM_UNPLUG_ERROR and DEVICE_UNPLUG_GUEST_ERROR
|
||||
* while the deprecation of MEM_UNPLUG_ERROR is
|
||||
* pending.
|
||||
*/
|
||||
qapi_event_send_mem_unplug_error(dev->id ? : "",
|
||||
error_get_pretty(local_err));
|
||||
qapi_event_send_device_unplug_guest_error(dev->id,
|
||||
dev->canonical_path);
|
||||
error_free(local_err);
|
||||
|
||||
+17
-8
@@ -222,14 +222,6 @@ static void cpu_common_realizefn(DeviceState *dev, Error **errp)
|
||||
cpu_resume(cpu);
|
||||
}
|
||||
|
||||
/* Plugin initialization must wait until the cpu start executing code */
|
||||
#ifdef CONFIG_PLUGIN
|
||||
if (tcg_enabled()) {
|
||||
cpu->plugin_state = qemu_plugin_create_vcpu_state();
|
||||
async_run_on_cpu(cpu, qemu_plugin_vcpu_init__async, RUN_ON_CPU_NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* NOTE: latest generic point where the cpu is fully realized */
|
||||
}
|
||||
|
||||
@@ -261,6 +253,11 @@ static void cpu_common_initfn(Object *obj)
|
||||
cpu->nr_threads = 1;
|
||||
cpu->cflags_next_tb = -1;
|
||||
|
||||
/* allocate storage for thread info, initialise condition variables */
|
||||
cpu->thread = g_new0(QemuThread, 1);
|
||||
cpu->halt_cond = g_new0(QemuCond, 1);
|
||||
qemu_cond_init(cpu->halt_cond);
|
||||
|
||||
qemu_mutex_init(&cpu->work_mutex);
|
||||
qemu_lockcnt_init(&cpu->in_ioctl_lock);
|
||||
QSIMPLEQ_INIT(&cpu->work_list);
|
||||
@@ -268,6 +265,18 @@ static void cpu_common_initfn(Object *obj)
|
||||
QTAILQ_INIT(&cpu->watchpoints);
|
||||
|
||||
cpu_exec_initfn(cpu);
|
||||
|
||||
/*
|
||||
* Plugin initialization must wait until the cpu start executing
|
||||
* code, but we must queue this work before the threads are
|
||||
* created to ensure we don't race.
|
||||
*/
|
||||
#ifdef CONFIG_PLUGIN
|
||||
if (tcg_enabled()) {
|
||||
cpu->plugin_state = qemu_plugin_create_vcpu_state();
|
||||
async_run_on_cpu(cpu, qemu_plugin_vcpu_init__async, RUN_ON_CPU_NULL);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void cpu_common_finalize(Object *obj)
|
||||
|
||||
+9
-4
@@ -29,6 +29,7 @@
|
||||
|
||||
#include "ui/input.h"
|
||||
#include "ui/console.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "hw/xen/xen-legacy-backend.h"
|
||||
|
||||
#include "hw/xen/interface/io/fbif.h"
|
||||
@@ -972,7 +973,7 @@ static void fb_event(struct XenLegacyDevice *xendev)
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
||||
static struct XenDevOps xen_kbdmouse_ops = {
|
||||
static const struct XenDevOps xen_kbdmouse_ops = {
|
||||
.size = sizeof(struct XenInput),
|
||||
.init = input_init,
|
||||
.initialise = input_initialise,
|
||||
@@ -981,7 +982,7 @@ static struct XenDevOps xen_kbdmouse_ops = {
|
||||
.event = input_event,
|
||||
};
|
||||
|
||||
struct XenDevOps xen_framebuffer_ops = {
|
||||
const struct XenDevOps xen_framebuffer_ops = {
|
||||
.size = sizeof(struct XenFB),
|
||||
.init = fb_init,
|
||||
.initialise = fb_initialise,
|
||||
@@ -996,8 +997,12 @@ static const GraphicHwOps xenfb_ops = {
|
||||
.ui_info = xenfb_ui_info,
|
||||
};
|
||||
|
||||
static void xen_vkbd_register_backend(void)
|
||||
static void xen_ui_register_backend(void)
|
||||
{
|
||||
xen_be_register("vkbd", &xen_kbdmouse_ops);
|
||||
|
||||
if (vga_interface_type == VGA_XENFB) {
|
||||
xen_be_register("vfb", &xen_framebuffer_ops);
|
||||
}
|
||||
}
|
||||
xen_backend_init(xen_vkbd_register_backend);
|
||||
xen_backend_init(xen_ui_register_backend);
|
||||
|
||||
+1
-1
@@ -619,7 +619,7 @@ static MemTxResult xlnx_dpdma_read_descriptor(XlnxDPDMAState *s,
|
||||
DPDMADescriptor *desc)
|
||||
{
|
||||
MemTxResult res = dma_memory_read(&address_space_memory, desc_addr,
|
||||
&desc, sizeof(DPDMADescriptor),
|
||||
desc, sizeof(DPDMADescriptor),
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
if (res) {
|
||||
return res;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user