mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging
* Compat machines fix (Denis) * Command line parsing fixes (Michal, Peter, Xiaoyao) * Cooperlake CPU model fixes (Xiaoyao) * i386 gdb fix (mkdolata) * IOEventHandler cleanup (Philippe) * icount fix (Pavel) * RR support for random number sources (Pavel) * Kconfig fixes (Philippe) # gpg: Signature made Wed 08 Jan 2020 10:41:00 GMT # gpg: using RSA key BFFBD25F78C7AE83 # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * remotes/bonzini/tags/for-upstream: (38 commits) chardev: Use QEMUChrEvent enum in IOEventHandler typedef chardev: use QEMUChrEvent instead of int chardev/char: Explicit we ignore some QEMUChrEvent in IOEventHandler monitor/hmp: Explicit we ignore a QEMUChrEvent in IOEventHandler monitor/qmp: Explicit we ignore few QEMUChrEvent in IOEventHandler virtio-console: Explicit we ignore some QEMUChrEvent in IOEventHandler vhost-user-blk: Explicit we ignore few QEMUChrEvent in IOEventHandler vhost-user-net: Explicit we ignore few QEMUChrEvent in IOEventHandler vhost-user-crypto: Explicit we ignore some QEMUChrEvent in IOEventHandler ccid-card-passthru: Explicit we ignore QEMUChrEvent in IOEventHandler hw/usb/redirect: Explicit we ignore few QEMUChrEvent in IOEventHandler hw/usb/dev-serial: Explicit we ignore few QEMUChrEvent in IOEventHandler hw/char/terminal3270: Explicit ignored QEMUChrEvent in IOEventHandler hw/ipmi: Explicit we ignore some QEMUChrEvent in IOEventHandler hw/ipmi: Remove unnecessary declarations target/i386: Add missed features to Cooperlake CPU model target/i386: Add new bit definitions of MSR_IA32_ARCH_CAPABILITIES target/i386: Fix handling of k_gs_base register in 32-bit mode in gdbstub hw/rtc/mc146818: Add missing dependency on ISA Bus hw/nvram/Kconfig: Restrict CHRP NVRAM to machines using OpenBIOS or SLOF ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
+13
-6
@@ -98,7 +98,7 @@ struct KVMState
|
||||
int kvm_shadow_mem;
|
||||
bool kernel_irqchip_allowed;
|
||||
bool kernel_irqchip_required;
|
||||
bool kernel_irqchip_split;
|
||||
OnOffAuto kernel_irqchip_split;
|
||||
bool sync_mmu;
|
||||
bool manual_dirty_log_protect;
|
||||
/* The man page (and posix) say ioctl numbers are signed int, but
|
||||
@@ -1783,6 +1783,7 @@ static void kvm_irqchip_create(KVMState *s)
|
||||
{
|
||||
int ret;
|
||||
|
||||
assert(s->kernel_irqchip_split != ON_OFF_AUTO_AUTO);
|
||||
if (kvm_check_extension(s, KVM_CAP_IRQCHIP)) {
|
||||
;
|
||||
} else if (kvm_check_extension(s, KVM_CAP_S390_IRQCHIP)) {
|
||||
@@ -1799,7 +1800,7 @@ static void kvm_irqchip_create(KVMState *s)
|
||||
* in-kernel irqchip for us */
|
||||
ret = kvm_arch_irqchip_create(s);
|
||||
if (ret == 0) {
|
||||
if (s->kernel_irqchip_split) {
|
||||
if (s->kernel_irqchip_split == ON_OFF_AUTO_ON) {
|
||||
perror("Split IRQ chip mode not supported.");
|
||||
exit(1);
|
||||
} else {
|
||||
@@ -2070,6 +2071,10 @@ static int kvm_init(MachineState *ms)
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (s->kernel_irqchip_split == ON_OFF_AUTO_AUTO) {
|
||||
s->kernel_irqchip_split = mc->default_kernel_irqchip_split ? ON_OFF_AUTO_ON : ON_OFF_AUTO_OFF;
|
||||
}
|
||||
|
||||
if (s->kernel_irqchip_allowed) {
|
||||
kvm_irqchip_create(s);
|
||||
}
|
||||
@@ -3005,17 +3010,17 @@ static void kvm_set_kernel_irqchip(Object *obj, Visitor *v,
|
||||
case ON_OFF_SPLIT_ON:
|
||||
s->kernel_irqchip_allowed = true;
|
||||
s->kernel_irqchip_required = true;
|
||||
s->kernel_irqchip_split = false;
|
||||
s->kernel_irqchip_split = ON_OFF_AUTO_OFF;
|
||||
break;
|
||||
case ON_OFF_SPLIT_OFF:
|
||||
s->kernel_irqchip_allowed = false;
|
||||
s->kernel_irqchip_required = false;
|
||||
s->kernel_irqchip_split = false;
|
||||
s->kernel_irqchip_split = ON_OFF_AUTO_OFF;
|
||||
break;
|
||||
case ON_OFF_SPLIT_SPLIT:
|
||||
s->kernel_irqchip_allowed = true;
|
||||
s->kernel_irqchip_required = true;
|
||||
s->kernel_irqchip_split = true;
|
||||
s->kernel_irqchip_split = ON_OFF_AUTO_ON;
|
||||
break;
|
||||
default:
|
||||
/* The value was checked in visit_type_OnOffSplit() above. If
|
||||
@@ -3038,7 +3043,7 @@ bool kvm_kernel_irqchip_required(void)
|
||||
|
||||
bool kvm_kernel_irqchip_split(void)
|
||||
{
|
||||
return kvm_state->kernel_irqchip_split;
|
||||
return kvm_state->kernel_irqchip_split == ON_OFF_AUTO_ON;
|
||||
}
|
||||
|
||||
static void kvm_accel_instance_init(Object *obj)
|
||||
@@ -3046,6 +3051,8 @@ static void kvm_accel_instance_init(Object *obj)
|
||||
KVMState *s = KVM_STATE(obj);
|
||||
|
||||
s->kvm_shadow_mem = -1;
|
||||
s->kernel_irqchip_allowed = true;
|
||||
s->kernel_irqchip_split = ON_OFF_AUTO_AUTO;
|
||||
}
|
||||
|
||||
static void kvm_accel_class_init(ObjectClass *oc, void *data)
|
||||
|
||||
@@ -152,7 +152,7 @@ cryptodev_vhost_claim_chardev(CryptoDevBackendVhostUser *s,
|
||||
return chr;
|
||||
}
|
||||
|
||||
static void cryptodev_vhost_user_event(void *opaque, int event)
|
||||
static void cryptodev_vhost_user_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
CryptoDevBackendVhostUser *s = opaque;
|
||||
CryptoDevBackend *b = CRYPTODEV_BACKEND(s);
|
||||
@@ -171,6 +171,11 @@ static void cryptodev_vhost_user_event(void *opaque, int event)
|
||||
b->ready = false;
|
||||
cryptodev_vhost_user_stop(queues, s);
|
||||
break;
|
||||
case CHR_EVENT_BREAK:
|
||||
case CHR_EVENT_MUX_IN:
|
||||
case CHR_EVENT_MUX_OUT:
|
||||
/* Ignore */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -117,7 +117,7 @@ static void mux_print_help(Chardev *chr)
|
||||
}
|
||||
}
|
||||
|
||||
static void mux_chr_send_event(MuxChardev *d, int mux_nr, int event)
|
||||
static void mux_chr_send_event(MuxChardev *d, int mux_nr, QEMUChrEvent event)
|
||||
{
|
||||
CharBackend *be = d->backends[mux_nr];
|
||||
|
||||
@@ -126,7 +126,7 @@ static void mux_chr_send_event(MuxChardev *d, int mux_nr, int event)
|
||||
}
|
||||
}
|
||||
|
||||
static void mux_chr_be_event(Chardev *chr, int event)
|
||||
static void mux_chr_be_event(Chardev *chr, QEMUChrEvent event)
|
||||
{
|
||||
MuxChardev *d = MUX_CHARDEV(chr);
|
||||
|
||||
@@ -232,7 +232,7 @@ static void mux_chr_read(void *opaque, const uint8_t *buf, int size)
|
||||
}
|
||||
}
|
||||
|
||||
void mux_chr_send_all_event(Chardev *chr, int event)
|
||||
void mux_chr_send_all_event(Chardev *chr, QEMUChrEvent event)
|
||||
{
|
||||
MuxChardev *d = MUX_CHARDEV(chr);
|
||||
int i;
|
||||
@@ -247,7 +247,7 @@ void mux_chr_send_all_event(Chardev *chr, int event)
|
||||
}
|
||||
}
|
||||
|
||||
static void mux_chr_event(void *opaque, int event)
|
||||
static void mux_chr_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
mux_chr_send_all_event(CHARDEV(opaque), event);
|
||||
}
|
||||
|
||||
+7
-2
@@ -49,7 +49,7 @@ static Object *get_chardevs_root(void)
|
||||
return container_get(object_get_root(), "/chardevs");
|
||||
}
|
||||
|
||||
static void chr_be_event(Chardev *s, int event)
|
||||
static void chr_be_event(Chardev *s, QEMUChrEvent event)
|
||||
{
|
||||
CharBackend *be = s->be;
|
||||
|
||||
@@ -60,7 +60,7 @@ static void chr_be_event(Chardev *s, int event)
|
||||
be->chr_event(be->opaque, event);
|
||||
}
|
||||
|
||||
void qemu_chr_be_event(Chardev *s, int event)
|
||||
void qemu_chr_be_event(Chardev *s, QEMUChrEvent event)
|
||||
{
|
||||
/* Keep track if the char device is open */
|
||||
switch (event) {
|
||||
@@ -70,6 +70,11 @@ void qemu_chr_be_event(Chardev *s, int event)
|
||||
case CHR_EVENT_CLOSED:
|
||||
s->be_open = 0;
|
||||
break;
|
||||
case CHR_EVENT_BREAK:
|
||||
case CHR_EVENT_MUX_IN:
|
||||
case CHR_EVENT_MUX_OUT:
|
||||
/* Ignore */
|
||||
break;
|
||||
}
|
||||
|
||||
CHARDEV_GET_CLASS(s)->chr_be_event(s, event);
|
||||
|
||||
@@ -1316,6 +1316,10 @@ static int64_t tcg_get_icount_limit(void)
|
||||
*/
|
||||
deadline = qemu_clock_deadline_ns_all(QEMU_CLOCK_VIRTUAL,
|
||||
QEMU_TIMER_ATTR_ALL);
|
||||
/* Check realtime timers, because they help with input processing */
|
||||
deadline = qemu_soonest_timeout(deadline,
|
||||
qemu_clock_deadline_ns_all(QEMU_CLOCK_REALTIME,
|
||||
QEMU_TIMER_ATTR_ALL));
|
||||
|
||||
/* Maintain prior (possibly buggy) behaviour where if no deadline
|
||||
* was set (as there is no QEMU_CLOCK_VIRTUAL timer) or it is more than
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# Default configuration for ppc-softmmu
|
||||
|
||||
# For embedded PPCs:
|
||||
CONFIG_MPC_I2C=y
|
||||
CONFIG_DS1338=y
|
||||
CONFIG_E500=y
|
||||
CONFIG_PPC405=y
|
||||
|
||||
@@ -67,6 +67,7 @@ Modifications of qemu include:
|
||||
* network filter for recording and replaying the packets
|
||||
* block driver for making block layer deterministic
|
||||
* serial port input record and replay
|
||||
* recording of random numbers obtained from the external sources
|
||||
|
||||
Locking and thread synchronisation
|
||||
----------------------------------
|
||||
|
||||
@@ -3171,7 +3171,7 @@ static void gdb_chr_receive(void *opaque, const uint8_t *buf, int size)
|
||||
}
|
||||
}
|
||||
|
||||
static void gdb_chr_event(void *opaque, int event)
|
||||
static void gdb_chr_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
int i;
|
||||
GDBState *s = (GDBState *) opaque;
|
||||
|
||||
+1
-1
@@ -1955,7 +1955,7 @@ static void pxa2xx_fir_rx(void *opaque, const uint8_t *buf, int size)
|
||||
pxa2xx_fir_update(s);
|
||||
}
|
||||
|
||||
static void pxa2xx_fir_event(void *opaque, int event)
|
||||
static void pxa2xx_fir_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1093,7 +1093,7 @@ static void strongarm_uart_receive(void *opaque, const uint8_t *buf, int size)
|
||||
strongarm_uart_update_int_status(s);
|
||||
}
|
||||
|
||||
static void strongarm_uart_event(void *opaque, int event)
|
||||
static void strongarm_uart_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
StrongARMUARTState *s = opaque;
|
||||
if (event == CHR_EVENT_BREAK) {
|
||||
|
||||
@@ -361,7 +361,7 @@ static gboolean vhost_user_blk_watch(GIOChannel *chan, GIOCondition cond,
|
||||
return true;
|
||||
}
|
||||
|
||||
static void vhost_user_blk_event(void *opaque, int event)
|
||||
static void vhost_user_blk_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
DeviceState *dev = opaque;
|
||||
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
|
||||
@@ -383,6 +383,11 @@ static void vhost_user_blk_event(void *opaque, int event)
|
||||
s->watch = 0;
|
||||
}
|
||||
break;
|
||||
case CHR_EVENT_BREAK:
|
||||
case CHR_EVENT_MUX_IN:
|
||||
case CHR_EVENT_MUX_OUT:
|
||||
/* Ignore */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -348,7 +348,7 @@ static void uart_receive(void *opaque, const uint8_t *buf, int size)
|
||||
}
|
||||
}
|
||||
|
||||
static void uart_event(void *opaque, int event)
|
||||
static void uart_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
CadenceUARTState *s = opaque;
|
||||
uint8_t buf = '\0';
|
||||
|
||||
@@ -131,7 +131,7 @@ static void uart_rx(void *opaque, const uint8_t *buf, int size)
|
||||
s->reg_rx = *buf;
|
||||
}
|
||||
|
||||
static void uart_event(void *opaque, int event)
|
||||
static void uart_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -634,7 +634,7 @@ static void serial_receive1(void *opaque, const uint8_t *buf, int size)
|
||||
serial_receive_byte(s, buf[0]);
|
||||
}
|
||||
|
||||
static void serial_event(void *opaque, int event)
|
||||
static void serial_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
ESCCChannelState *s = opaque;
|
||||
if (event == CHR_EVENT_BREAK)
|
||||
|
||||
@@ -202,7 +202,7 @@ static int serial_can_receive(void *opaque)
|
||||
return sizeof(s->rx_fifo) - s->rx_fifo_len;
|
||||
}
|
||||
|
||||
static void serial_event(void *opaque, int event)
|
||||
static void serial_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -528,7 +528,7 @@ static void exynos4210_uart_receive(void *opaque, const uint8_t *buf, int size)
|
||||
}
|
||||
|
||||
|
||||
static void exynos4210_uart_event(void *opaque, int event)
|
||||
static void exynos4210_uart_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
Exynos4210UartState *s = (Exynos4210UartState *)opaque;
|
||||
|
||||
|
||||
@@ -155,7 +155,7 @@ static void grlib_apbuart_receive(void *opaque, const uint8_t *buf, int size)
|
||||
}
|
||||
}
|
||||
|
||||
static void grlib_apbuart_event(void *opaque, int event)
|
||||
static void grlib_apbuart_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
trace_grlib_apbuart_event(event);
|
||||
}
|
||||
|
||||
@@ -323,7 +323,7 @@ static void imx_receive(void *opaque, const uint8_t *buf, int size)
|
||||
imx_put_data(opaque, *buf);
|
||||
}
|
||||
|
||||
static void imx_event(void *opaque, int event)
|
||||
static void imx_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
if (event == CHR_EVENT_BREAK) {
|
||||
imx_put_data(opaque, URXD_BRK | URXD_FRMERR | URXD_ERR);
|
||||
|
||||
@@ -503,7 +503,7 @@ static void hostdev_receive(void *opaque, const uint8_t *buf, int size)
|
||||
}
|
||||
}
|
||||
|
||||
static void hostdev_event(void *opaque, int event)
|
||||
static void hostdev_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
SCC2698Channel *ch = opaque;
|
||||
switch (event) {
|
||||
|
||||
@@ -104,7 +104,7 @@ static int juart_can_rx(void *opaque)
|
||||
return !(s->jrx & JRX_FULL);
|
||||
}
|
||||
|
||||
static void juart_event(void *opaque, int event)
|
||||
static void juart_event(void *opaque, QEMUChrEvent event)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user