All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Laurent Vivier" <lvivier@redhat.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Claudio Fontana" <cfontana@suse.de>
Subject: [PULL 42/53] cpu-throttle: new module, extracted from cpus.c
Date: Mon,  6 Jul 2020 12:41:44 -0400	[thread overview]
Message-ID: <20200706164155.24696-43-pbonzini@redhat.com> (raw)
In-Reply-To: <20200706164155.24696-1-pbonzini@redhat.com>

From: Claudio Fontana <cfontana@suse.de>

move the vcpu throttling functionality into its own module.

This functionality is not specific to any accelerator,
and it is used currently by migration to slow down guests to try to
have migrations converge, and by the cocoa MacOS UI to throttle speed.

cpu-throttle contains the controls to adjust and inspect throttle
settings, start (set) and stop vcpu throttling, and the throttling
function itself that is run periodically on vcpus to make them take a nap.

Execution of the throttling function on all vcpus is triggered by a timer,
registered at module initialization.

No functionality change.

Signed-off-by: Claudio Fontana <cfontana@suse.de>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Laurent Vivier <lvivier@redhat.com>
Message-Id: <20200629093504.3228-3-cfontana@suse.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 MAINTAINERS                   |   1 +
 include/hw/core/cpu.h         |  37 -----------
 include/qemu/main-loop.h      |   5 ++
 include/sysemu/cpu-throttle.h |  68 +++++++++++++++++++
 migration/migration.c         |   1 +
 migration/ram.c               |   1 +
 softmmu/Makefile.objs         |   1 +
 softmmu/cpu-throttle.c        | 122 ++++++++++++++++++++++++++++++++++
 softmmu/cpus.c                |  95 +++-----------------------
 9 files changed, 207 insertions(+), 124 deletions(-)
 create mode 100644 include/sysemu/cpu-throttle.h
 create mode 100644 softmmu/cpu-throttle.c

diff --git a/MAINTAINERS b/MAINTAINERS
index fdf43228b5..933c646a86 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2235,6 +2235,7 @@ F: util/qemu-timer.c
 F: softmmu/vl.c
 F: softmmu/main.c
 F: softmmu/cpus.c
+F: softmmu/cpu-throttle.c
 F: qapi/run-state.json
 
 Human Monitor (HMP)
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index b3f4b79318..5542577d2b 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -822,43 +822,6 @@ bool cpu_exists(int64_t id);
  */
 CPUState *cpu_by_arch_id(int64_t id);
 
-/**
- * cpu_throttle_set:
- * @new_throttle_pct: Percent of sleep time. Valid range is 1 to 99.
- *
- * Throttles all vcpus by forcing them to sleep for the given percentage of
- * time. A throttle_percentage of 25 corresponds to a 75% duty cycle roughly.
- * (example: 10ms sleep for every 30ms awake).
- *
- * cpu_throttle_set can be called as needed to adjust new_throttle_pct.
- * Once the throttling starts, it will remain in effect until cpu_throttle_stop
- * is called.
- */
-void cpu_throttle_set(int new_throttle_pct);
-
-/**
- * cpu_throttle_stop:
- *
- * Stops the vcpu throttling started by cpu_throttle_set.
- */
-void cpu_throttle_stop(void);
-
-/**
- * cpu_throttle_active:
- *
- * Returns: %true if the vcpus are currently being throttled, %false otherwise.
- */
-bool cpu_throttle_active(void);
-
-/**
- * cpu_throttle_get_percentage:
- *
- * Returns the vcpu throttle percentage. See cpu_throttle_set for details.
- *
- * Returns: The throttle percentage in range 1 to 99.
- */
-int cpu_throttle_get_percentage(void);
-
 #ifndef CONFIG_USER_ONLY
 
 typedef void (*CPUInterruptHandler)(CPUState *, int);
diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h
index a6d20b0719..8e98613656 100644
--- a/include/qemu/main-loop.h
+++ b/include/qemu/main-loop.h
@@ -303,6 +303,11 @@ void qemu_mutex_unlock_iothread(void);
  */
 void qemu_cond_wait_iothread(QemuCond *cond);
 
+/*
+ * qemu_cond_timedwait_iothread: like the previous, but with timeout
+ */
+void qemu_cond_timedwait_iothread(QemuCond *cond, int ms);
+
 /* internal interfaces */
 
 void qemu_fd_register(int fd);
diff --git a/include/sysemu/cpu-throttle.h b/include/sysemu/cpu-throttle.h
new file mode 100644
index 0000000000..d65bdef6d0
--- /dev/null
+++ b/include/sysemu/cpu-throttle.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2012 SUSE LINUX Products GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see
+ * <http://www.gnu.org/licenses/gpl-2.0.html>
+ */
+
+#ifndef SYSEMU_CPU_THROTTLE_H
+#define SYSEMU_CPU_THROTTLE_H
+
+#include "qemu/timer.h"
+
+/**
+ * cpu_throttle_init:
+ *
+ * Initialize the CPU throttling API.
+ */
+void cpu_throttle_init(void);
+
+/**
+ * cpu_throttle_set:
+ * @new_throttle_pct: Percent of sleep time. Valid range is 1 to 99.
+ *
+ * Throttles all vcpus by forcing them to sleep for the given percentage of
+ * time. A throttle_percentage of 25 corresponds to a 75% duty cycle roughly.
+ * (example: 10ms sleep for every 30ms awake).
+ *
+ * cpu_throttle_set can be called as needed to adjust new_throttle_pct.
+ * Once the throttling starts, it will remain in effect until cpu_throttle_stop
+ * is called.
+ */
+void cpu_throttle_set(int new_throttle_pct);
+
+/**
+ * cpu_throttle_stop:
+ *
+ * Stops the vcpu throttling started by cpu_throttle_set.
+ */
+void cpu_throttle_stop(void);
+
+/**
+ * cpu_throttle_active:
+ *
+ * Returns: %true if the vcpus are currently being throttled, %false otherwise.
+ */
+bool cpu_throttle_active(void);
+
+/**
+ * cpu_throttle_get_percentage:
+ *
+ * Returns the vcpu throttle percentage. See cpu_throttle_set for details.
+ *
+ * Returns: The throttle percentage in range 1 to 99.
+ */
+int cpu_throttle_get_percentage(void);
+
+#endif /* SYSEMU_CPU_THROTTLE_H */
diff --git a/migration/migration.c b/migration/migration.c
index 481a590f72..676fb6084e 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -23,6 +23,7 @@
 #include "socket.h"
 #include "sysemu/runstate.h"
 #include "sysemu/sysemu.h"
+#include "sysemu/cpu-throttle.h"
 #include "rdma.h"
 #include "ram.h"
 #include "migration/global_state.h"
diff --git a/migration/ram.c b/migration/ram.c
index 069b6e30bc..9ef1e63cb6 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -52,6 +52,7 @@
 #include "migration/colo.h"
 #include "block.h"
 #include "sysemu/sysemu.h"
+#include "sysemu/cpu-throttle.h"
 #include "savevm.h"
 #include "qemu/iov.h"
 #include "multifd.h"
diff --git a/softmmu/Makefile.objs b/softmmu/Makefile.objs
index a4bd9f2f52..a414a74c50 100644
--- a/softmmu/Makefile.objs
+++ b/softmmu/Makefile.objs
@@ -2,6 +2,7 @@ softmmu-main-y = softmmu/main.o
 
 obj-y += arch_init.o
 obj-y += cpus.o
+obj-y += cpu-throttle.o
 obj-y += balloon.o
 obj-y += ioport.o
 obj-y += memory.o
diff --git a/softmmu/cpu-throttle.c b/softmmu/cpu-throttle.c
new file mode 100644
index 0000000000..4e6b2818ca
--- /dev/null
+++ b/softmmu/cpu-throttle.c
@@ -0,0 +1,122 @@
+/*
+ * QEMU System Emulator
+ *
+ * Copyright (c) 2003-2008 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "qemu/osdep.h"
+#include "qemu-common.h"
+#include "qemu/thread.h"
+#include "hw/core/cpu.h"
+#include "qemu/main-loop.h"
+#include "sysemu/cpus.h"
+#include "sysemu/cpu-throttle.h"
+
+/* vcpu throttling controls */
+static QEMUTimer *throttle_timer;
+static unsigned int throttle_percentage;
+
+#define CPU_THROTTLE_PCT_MIN 1
+#define CPU_THROTTLE_PCT_MAX 99
+#define CPU_THROTTLE_TIMESLICE_NS 10000000
+
+static void cpu_throttle_thread(CPUState *cpu, run_on_cpu_data opaque)
+{
+    double pct;
+    double throttle_ratio;
+    int64_t sleeptime_ns, endtime_ns;
+
+    if (!cpu_throttle_get_percentage()) {
+        return;
+    }
+
+    pct = (double)cpu_throttle_get_percentage() / 100;
+    throttle_ratio = pct / (1 - pct);
+    /* Add 1ns to fix double's rounding error (like 0.9999999...) */
+    sleeptime_ns = (int64_t)(throttle_ratio * CPU_THROTTLE_TIMESLICE_NS + 1);
+    endtime_ns = qemu_clock_get_ns(QEMU_CLOCK_REALTIME) + sleeptime_ns;
+    while (sleeptime_ns > 0 && !cpu->stop) {
+        if (sleeptime_ns > SCALE_MS) {
+            qemu_cond_timedwait_iothread(cpu->halt_cond,
+                                         sleeptime_ns / SCALE_MS);
+        } else {
+            qemu_mutex_unlock_iothread();
+            g_usleep(sleeptime_ns / SCALE_US);
+            qemu_mutex_lock_iothread();
+        }
+        sleeptime_ns = endtime_ns - qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
+    }
+    atomic_set(&cpu->throttle_thread_scheduled, 0);
+}
+
+static void cpu_throttle_timer_tick(void *opaque)
+{
+    CPUState *cpu;
+    double pct;
+
+    /* Stop the timer if needed */
+    if (!cpu_throttle_get_percentage()) {
+        return;
+    }
+    CPU_FOREACH(cpu) {
+        if (!atomic_xchg(&cpu->throttle_thread_scheduled, 1)) {
+            async_run_on_cpu(cpu, cpu_throttle_thread,
+                             RUN_ON_CPU_NULL);
+        }
+    }
+
+    pct = (double)cpu_throttle_get_percentage() / 100;
+    timer_mod(throttle_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT) +
+                                   CPU_THROTTLE_TIMESLICE_NS / (1 - pct));
+}
+
+void cpu_throttle_set(int new_throttle_pct)
+{
+    /* Ensure throttle percentage is within valid range */
+    new_throttle_pct = MIN(new_throttle_pct, CPU_THROTTLE_PCT_MAX);
+    new_throttle_pct = MAX(new_throttle_pct, CPU_THROTTLE_PCT_MIN);
+
+    atomic_set(&throttle_percentage, new_throttle_pct);
+
+    timer_mod(throttle_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT) +
+                                       CPU_THROTTLE_TIMESLICE_NS);
+}
+
+void cpu_throttle_stop(void)
+{
+    atomic_set(&throttle_percentage, 0);
+}
+
+bool cpu_throttle_active(void)
+{
+    return (cpu_throttle_get_percentage() != 0);
+}
+
+int cpu_throttle_get_percentage(void)
+{
+    return atomic_read(&throttle_percentage);
+}
+
+void cpu_throttle_init(void)
+{
+    throttle_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL_RT,
+                                  cpu_throttle_timer_tick, NULL);
+}
diff --git a/softmmu/cpus.c b/softmmu/cpus.c
index d94456ed29..a802e899ab 100644
--- a/softmmu/cpus.c
+++ b/softmmu/cpus.c
@@ -61,6 +61,8 @@
 #include "hw/boards.h"
 #include "hw/hw.h"
 
+#include "sysemu/cpu-throttle.h"
+
 #ifdef CONFIG_LINUX
 
 #include <sys/prctl.h>
@@ -84,14 +86,6 @@ static QemuMutex qemu_global_mutex;
 int64_t max_delay;
 int64_t max_advance;
 
-/* vcpu throttling controls */
-static QEMUTimer *throttle_timer;
-static unsigned int throttle_percentage;
-
-#define CPU_THROTTLE_PCT_MIN 1
-#define CPU_THROTTLE_PCT_MAX 99
-#define CPU_THROTTLE_TIMESLICE_NS 10000000
-
 bool cpu_is_stopped(CPUState *cpu)
 {
     return cpu->stopped || !runstate_is_running();
@@ -738,90 +732,12 @@ static const VMStateDescription vmstate_timers = {
     }
 };
 
-static void cpu_throttle_thread(CPUState *cpu, run_on_cpu_data opaque)
-{
-    double pct;
-    double throttle_ratio;
-    int64_t sleeptime_ns, endtime_ns;
-
-    if (!cpu_throttle_get_percentage()) {
-        return;
-    }
-
-    pct = (double)cpu_throttle_get_percentage()/100;
-    throttle_ratio = pct / (1 - pct);
-    /* Add 1ns to fix double's rounding error (like 0.9999999...) */
-    sleeptime_ns = (int64_t)(throttle_ratio * CPU_THROTTLE_TIMESLICE_NS + 1);
-    endtime_ns = qemu_clock_get_ns(QEMU_CLOCK_REALTIME) + sleeptime_ns;
-    while (sleeptime_ns > 0 && !cpu->stop) {
-        if (sleeptime_ns > SCALE_MS) {
-            qemu_cond_timedwait(cpu->halt_cond, &qemu_global_mutex,
-                                sleeptime_ns / SCALE_MS);
-        } else {
-            qemu_mutex_unlock_iothread();
-            g_usleep(sleeptime_ns / SCALE_US);
-            qemu_mutex_lock_iothread();
-        }
-        sleeptime_ns = endtime_ns - qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
-    }
-    atomic_set(&cpu->throttle_thread_scheduled, 0);
-}
-
-static void cpu_throttle_timer_tick(void *opaque)
-{
-    CPUState *cpu;
-    double pct;
-
-    /* Stop the timer if needed */
-    if (!cpu_throttle_get_percentage()) {
-        return;
-    }
-    CPU_FOREACH(cpu) {
-        if (!atomic_xchg(&cpu->throttle_thread_scheduled, 1)) {
-            async_run_on_cpu(cpu, cpu_throttle_thread,
-                             RUN_ON_CPU_NULL);
-        }
-    }
-
-    pct = (double)cpu_throttle_get_percentage()/100;
-    timer_mod(throttle_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT) +
-                                   CPU_THROTTLE_TIMESLICE_NS / (1-pct));
-}
-
-void cpu_throttle_set(int new_throttle_pct)
-{
-    /* Ensure throttle percentage is within valid range */
-    new_throttle_pct = MIN(new_throttle_pct, CPU_THROTTLE_PCT_MAX);
-    new_throttle_pct = MAX(new_throttle_pct, CPU_THROTTLE_PCT_MIN);
-
-    atomic_set(&throttle_percentage, new_throttle_pct);
-
-    timer_mod(throttle_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL_RT) +
-                                       CPU_THROTTLE_TIMESLICE_NS);
-}
-
-void cpu_throttle_stop(void)
-{
-    atomic_set(&throttle_percentage, 0);
-}
-
-bool cpu_throttle_active(void)
-{
-    return (cpu_throttle_get_percentage() != 0);
-}
-
-int cpu_throttle_get_percentage(void)
-{
-    return atomic_read(&throttle_percentage);
-}
-
 void cpu_ticks_init(void)
 {
     seqlock_init(&timers_state.vm_clock_seqlock);
     qemu_spin_init(&timers_state.vm_clock_lock);
     vmstate_register(NULL, 0, &vmstate_timers, &timers_state);
-    throttle_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL_RT,
-                                           cpu_throttle_timer_tick, NULL);
+    cpu_throttle_init();
 }
 
 void configure_icount(QemuOpts *opts, Error **errp)
@@ -1879,6 +1795,11 @@ void qemu_cond_wait_iothread(QemuCond *cond)
     qemu_cond_wait(cond, &qemu_global_mutex);
 }
 
+void qemu_cond_timedwait_iothread(QemuCond *cond, int ms)
+{
+    qemu_cond_timedwait(cond, &qemu_global_mutex, ms);
+}
+
 static bool all_vcpus_paused(void)
 {
     CPUState *cpu;
-- 
2.26.2




  parent reply	other threads:[~2020-07-06 16:56 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-06 16:41 [PULL 00/53] Misc patches for QEMU 5.1 soft freeze Paolo Bonzini
2020-07-06 16:41 ` [PULL 01/53] tcg/svm: use host cr4 during NPT page table walk Paolo Bonzini
2020-07-06 16:41 ` [PULL 02/53] tests: Inject test name also when the test fails Paolo Bonzini
2020-07-06 16:41 ` [PULL 03/53] util/qemu-error: prepend guest name to error message to identify affected VM owner Paolo Bonzini
2020-07-06 16:41 ` [PULL 04/53] qom: Introduce object_property_try_add_child() Paolo Bonzini
2020-07-06 16:41 ` [PULL 05/53] tests/qmp-cmd-test: Add qmp/object-add-duplicate-id Paolo Bonzini
2020-07-06 16:41 ` [PULL 06/53] tests/qmp-cmd-test: Add qmp/object-add-failure-modes Paolo Bonzini
2020-07-06 16:41 ` [PULL 07/53] hw/core/null-machine: Do not initialize unused chardev backends Paolo Bonzini
2020-07-06 16:41 ` [PULL 08/53] target/i386: set SSE FTZ in correct floating-point state Paolo Bonzini
2020-07-06 16:41 ` [PULL 09/53] target/i386: fix IEEE SSE floating-point exception raising Paolo Bonzini
2020-07-06 16:41 ` [PULL 10/53] KVM: add support for AMD nested live migration Paolo Bonzini
2020-07-06 16:41 ` [PULL 11/53] coverity: provide Coverity-friendly MIN_CONST and MAX_CONST Paolo Bonzini
2020-07-06 16:41 ` [PULL 12/53] i386: hvf: Set env->eip in macvm_set_rip() Paolo Bonzini
2020-07-06 16:41 ` [PULL 13/53] i386: hvf: Move synchronize functions to sysemu Paolo Bonzini
2020-07-06 16:41 ` [PULL 14/53] i386: hvf: Add hvf_cpu_synchronize_pre_loadvm() Paolo Bonzini
2020-07-06 16:41 ` [PULL 15/53] i386: hvf: Make long mode enter and exit clearer Paolo Bonzini
2020-07-06 16:41 ` [PULL 16/53] i386: hvf: Move Guest LMA reset to macvm_set_cr0() Paolo Bonzini
2020-07-06 16:41 ` [PULL 17/53] i386: hvf: Don't duplicate register reset Paolo Bonzini
2020-07-06 16:41 ` [PULL 18/53] i386: hvf: Clean up synchronize functions Paolo Bonzini
2020-07-06 16:41 ` [PULL 19/53] MAINTAINERS: Add Cameron as HVF co-maintainer Paolo Bonzini
2020-07-06 16:41 ` [PULL 20/53] MAINTAINERS: Fix KVM path expansion glob Paolo Bonzini
2020-07-06 16:41 ` [PULL 21/53] MAINTAINERS: Add an 'overall' entry for accelerators Paolo Bonzini
2020-07-06 16:41 ` [PULL 22/53] MAINTAINERS: Cover the HAX accelerator stub Paolo Bonzini
2020-07-06 16:41 ` [PULL 23/53] Makefile: Remove dangerous EOL trailing backslash Paolo Bonzini
2020-07-06 16:41 ` [PULL 24/53] Makefile: Write MINIKCONF variables as one entry per line Paolo Bonzini
2020-07-06 16:41 ` [PULL 25/53] accel/Kconfig: Extract accel selectors into their own config Paolo Bonzini
2020-07-06 16:41 ` [PULL 26/53] accel/Kconfig: Add the TCG selector Paolo Bonzini
2020-07-06 16:41 ` [PULL 27/53] accel/tcg: Add stub for probe_access() Paolo Bonzini
2020-07-06 16:41 ` [PULL 28/53] Makefile: simplify MINIKCONF rules Paolo Bonzini
2020-07-17 11:02   ` Peter Maydell
2020-07-17 11:20     ` Paolo Bonzini
2020-07-17 13:01       ` Peter Maydell
2020-07-17 13:33         ` Paolo Bonzini
2020-07-06 16:41 ` [PULL 29/53] target/i386: remove gen_io_end Paolo Bonzini
2020-07-06 16:41 ` [PULL 30/53] target/i386: implement undocumented "smsw r32" behavior Paolo Bonzini
2020-07-06 16:41 ` [PULL 31/53] KVM: x86: believe what KVM says about WAITPKG Paolo Bonzini
2020-07-07 11:42   ` Maxim Levitsky
2020-07-07 11:58     ` Paolo Bonzini
2021-12-22  9:35   ` Chenyi Qiang
2020-07-06 16:41 ` [PULL 32/53] target/i386: sev: provide proper error reporting for query-sev-capabilities Paolo Bonzini
2020-07-06 16:41 ` [PULL 33/53] target/i386: sev: fail query-sev-capabilities if QEMU cannot use SEV Paolo Bonzini
2020-07-06 16:41 ` [PULL 34/53] iscsi: handle check condition status in retry loop Paolo Bonzini
2020-07-06 16:41 ` [PULL 35/53] iscsi: return -EIO when sense fields are meaningless Paolo Bonzini
2020-07-06 16:41 ` [PULL 36/53] chardev/tcp: fix error message double free error Paolo Bonzini
2020-07-06 16:41 ` [PULL 37/53] checkpatch: Change occurences of 'kernel' to 'qemu' in user messages Paolo Bonzini
2020-07-06 16:41 ` [PULL 38/53] target/i386: Correct the warning message of Intel PT Paolo Bonzini
2020-07-06 16:41 ` [PULL 39/53] cpus: Move CPU code from exec.c to cpus-common.c Paolo Bonzini
2020-07-06 16:41 ` [PULL 40/53] pc: fix leak in pc_system_flash_cleanup_unused Paolo Bonzini
2020-07-06 16:41 ` [PULL 41/53] softmmu: move softmmu only files from root Paolo Bonzini
2020-07-06 16:41 ` Paolo Bonzini [this message]
2020-07-06 16:41 ` [PULL 43/53] cpu-timers, icount: new modules Paolo Bonzini
2020-07-06 16:41 ` [PULL 44/53] softmmu/vl: Remove the check for colons in -accel parameters Paolo Bonzini
2020-07-06 16:41 ` [PULL 45/53] accel/kvm: Let kvm_check_extension use global KVM state Paolo Bonzini
2020-07-06 16:41 ` [PULL 46/53] accel/kvm: Simplify kvm_check_extension() Paolo Bonzini
2020-07-06 16:41 ` [PULL 47/53] accel/kvm: Simplify kvm_check_extension_list() Paolo Bonzini
2020-07-06 16:41 ` [PULL 48/53] target/i386/kvm: Simplify get_para_features() Paolo Bonzini
2020-07-06 16:41 ` [PULL 49/53] target/i386/kvm: Simplify kvm_get_mce_cap_supported() Paolo Bonzini
2020-07-06 16:41 ` [PULL 50/53] target/i386/kvm: Simplify kvm_get_supported_[feature]_msrs() Paolo Bonzini
2020-07-06 16:41 ` [PULL 51/53] target/i386: Add SERIALIZE cpu feature Paolo Bonzini
2020-07-06 16:41 ` [PULL 52/53] target/i386: Enable TSX Suspend Load Address Tracking feature Paolo Bonzini
2020-07-06 16:41 ` [PULL 53/53] scripts: improve message when TAP based tests fail Paolo Bonzini
2020-07-06 17:19 ` [PULL 00/53] Misc patches for QEMU 5.1 soft freeze no-reply
2020-07-07 18:37 ` Peter Maydell
2020-07-07 18:42   ` Peter Maydell
2020-07-07 18:48     ` Paolo Bonzini
2020-07-08  8:25   ` Philippe Mathieu-Daudé
2020-07-08 16:13   ` Claudio Fontana
2020-07-08 16:16     ` Paolo Bonzini
2020-07-08 16:45       ` Claudio Fontana
2020-07-08 16:55         ` Paolo Bonzini
2020-07-08 17:03           ` Claudio Fontana
2020-07-08 18:25             ` Claudio Fontana
2020-07-08 18:34               ` Claudio Fontana
2020-07-08 18:41               ` Paolo Bonzini
2020-07-09  6:59                 ` Claudio Fontana
2020-07-09  9:57                   ` Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200706164155.24696-43-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=cfontana@suse.de \
    --cc=lvivier@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.