* [PULL v2 00/21] i386, qgraph patches for 2020-02-15
@ 2021-02-16 18:26 Paolo Bonzini
2021-02-16 18:26 ` [PULL 20/21] event_notifier: Set ->initialized earlier in event_notifier_init() Paolo Bonzini
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Paolo Bonzini @ 2021-02-16 18:26 UTC (permalink / raw)
To: qemu-devel
The following changes since commit 8ba4bca570ace1e60614a0808631a517cf5df67a:
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging (2021-02-15 17:13:57 +0000)
are available in the Git repository at:
https://gitlab.com/bonzini/qemu.git tags/for-upstream
for you to fetch changes up to 366a85e4bb748794b1ae0ca0ccc2d95f316679a0:
replay: fix icount request when replaying clock access (2021-02-16 17:15:39 +0100)
----------------------------------------------------------------
* HVF fixes
* Extra qos-test debugging output (Christian)
* SEV secret address autodetection (James)
* SEV-ES support (Thomas)
* Relocatable paths bugfix (Stefan)
* RR fix (Pavel)
* EventNotifier fix (Greg)
----------------------------------------------------------------
Alexander Graf (2):
hvf: x86: Remove unused definitions
hvf: Fetch cr4 before evaluating CPUID(1)
Christian Schoenebeck (5):
libqos/qgraph: add qos_node_create_driver_named()
libqos/qgraph_internal: add qos_printf() and qos_printf_literal()
tests/qtest/qos-test: dump qos graph if verbose
tests/qtest/qos-test: dump environment variables if verbose
tests/qtest/qos-test: dump QEMU command if verbose
Greg Kurz (1):
event_notifier: Set ->initialized earlier in event_notifier_init()
Hill Ma (1):
hvf: Guard xgetbv call
James Bottomley (2):
pc: add parser for OVMF reset block
sev: update sev-inject-launch-secret to make gpa optional
Paolo Bonzini (1):
sev/i386: Allow AP booting under SEV-ES
Pavel Dovgalyuk (1):
replay: fix icount request when replaying clock access
Stefan Weil (1):
util/cutils: Skip "." when looking for next directory component
Tom Lendacky (5):
sev/i386: Add initial support for SEV-ES
sev/i386: Require in-kernel irqchip support for SEV-ES guests
sev/i386: Don't allow a system reset under an SEV-ES guest
kvm/i386: Use a per-VM check for SMM capability
sev/i386: Enable an SEV-ES guest based on SEV policy
Vladislav Yaroshchuk (2):
target/i386/hvf: add vmware-cpuid-freq cpu feature
target/i386/hvf: add rdmsr 35H MSR_CORE_THREAD_COUNT
accel/kvm/kvm-all.c | 6 +-
hw/i386/pc_sysfw.c | 130 ++++++++++++++++++++++++-
include/hw/i386/pc.h | 4 +
include/sysemu/cpus.h | 2 +
include/sysemu/hw_accel.h | 5 +
include/sysemu/kvm.h | 10 ++
include/sysemu/replay.h | 14 +--
include/sysemu/sev.h | 5 +
qapi/misc-target.json | 2 +-
replay/replay-internal.c | 29 +++++-
replay/replay-time.c | 4 +-
replay/replay.c | 23 +----
softmmu/cpus.c | 5 +
softmmu/runstate.c | 3 +
stubs/replay-tools.c | 2 +-
target/arm/kvm.c | 5 +
target/i386/cpu.c | 1 +
target/i386/cpu.h | 1 +
target/i386/hvf/hvf-i386.h | 16 ----
target/i386/hvf/hvf.c | 100 +++++++++++++++++++-
target/i386/hvf/x86_cpuid.c | 34 ++++---
target/i386/hvf/x86_emu.c | 5 +
target/i386/kvm/kvm.c | 10 +-
target/i386/monitor.c | 23 ++++-
target/i386/sev-stub.c | 15 +++
target/i386/sev.c | 178 ++++++++++++++++++++++++++++++++++-
target/i386/sev_i386.h | 2 +-
target/mips/kvm.c | 5 +
target/ppc/kvm.c | 5 +
target/s390x/kvm.c | 5 +
tests/qtest/libqos/qgraph.c | 99 ++++++++++++++++++-
tests/qtest/libqos/qgraph.h | 36 +++++++
tests/qtest/libqos/qgraph_internal.h | 12 +++
tests/qtest/qos-test.c | 15 ++-
util/cutils.c | 3 +-
util/event_notifier-posix.c | 2 +-
36 files changed, 735 insertions(+), 81 deletions(-)
--
2.29.2
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PULL 20/21] event_notifier: Set ->initialized earlier in event_notifier_init()
2021-02-16 18:26 [PULL v2 00/21] i386, qgraph patches for 2020-02-15 Paolo Bonzini
@ 2021-02-16 18:26 ` Paolo Bonzini
2021-02-16 18:26 ` [PULL 21/21] replay: fix icount request when replaying clock access Paolo Bonzini
2021-02-17 14:44 ` [PULL v2 00/21] i386, qgraph patches for 2020-02-15 Peter Maydell
2 siblings, 0 replies; 4+ messages in thread
From: Paolo Bonzini @ 2021-02-16 18:26 UTC (permalink / raw)
To: qemu-devel; +Cc: Greg Kurz, mlevitsk
From: Greg Kurz <groug@kaod.org>
Otherwise the call to event_notifier_set() is a nop, which causes
the SLOF firmware on POWER to hang when booting from a virtio-scsi
device:
virtio_scsi_dataplane_start()
virtio_scsi_vring_init()
virtio_bus_set_host_notifier() <- assign == true
event_notifier_init() <- active == 1
event_notifier_set() <- fails right away if !e->initialized
Fixes: e34e47eb28c0 ("event_notifier: handle initialization failure better")
Cc: mlevitsk@redhat.com
Signed-off-by: Greg Kurz <groug@kaod.org>
Message-Id: <20210216120247.1293569-1-groug@kaod.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
util/event_notifier-posix.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/util/event_notifier-posix.c b/util/event_notifier-posix.c
index 5b2110e861..8307013c5d 100644
--- a/util/event_notifier-posix.c
+++ b/util/event_notifier-posix.c
@@ -66,10 +66,10 @@ int event_notifier_init(EventNotifier *e, int active)
e->rfd = fds[0];
e->wfd = fds[1];
}
+ e->initialized = true;
if (active) {
event_notifier_set(e);
}
- e->initialized = true;
return 0;
fail:
--
2.29.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PULL 21/21] replay: fix icount request when replaying clock access
2021-02-16 18:26 [PULL v2 00/21] i386, qgraph patches for 2020-02-15 Paolo Bonzini
2021-02-16 18:26 ` [PULL 20/21] event_notifier: Set ->initialized earlier in event_notifier_init() Paolo Bonzini
@ 2021-02-16 18:26 ` Paolo Bonzini
2021-02-17 14:44 ` [PULL v2 00/21] i386, qgraph patches for 2020-02-15 Peter Maydell
2 siblings, 0 replies; 4+ messages in thread
From: Paolo Bonzini @ 2021-02-16 18:26 UTC (permalink / raw)
To: qemu-devel; +Cc: Pavel Dovgalyuk
From: Pavel Dovgalyuk <pavel.dovgalyuk@ispras.ru>
Record/replay provides REPLAY_CLOCK_LOCKED macro to access
the clock when vm_clock_seqlock is locked. This macro is
needed because replay internals operate icount. In locked case
replay use icount_get_raw_locked for icount request, which prevents
excess locking which leads to deadlock. But previously only
record code used *_locked function and replay did not.
Therefore sometimes clock access lead to deadlocks.
This patch fixes clock access for replay too and uses *_locked
icount access function.
Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
Message-Id: <161347990483.1313189.8371838968343494161.stgit@pasha-ThinkPad-X280>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
include/sysemu/replay.h | 14 ++++++++------
replay/replay-internal.c | 29 +++++++++++++++++++++++++----
replay/replay-time.c | 4 ++--
replay/replay.c | 23 +----------------------
stubs/replay-tools.c | 2 +-
5 files changed, 37 insertions(+), 35 deletions(-)
diff --git a/include/sysemu/replay.h b/include/sysemu/replay.h
index 56c0c17c30..0f3b0f7eac 100644
--- a/include/sysemu/replay.h
+++ b/include/sysemu/replay.h
@@ -128,18 +128,20 @@ bool replay_has_interrupt(void);
int64_t replay_save_clock(ReplayClockKind kind, int64_t clock,
int64_t raw_icount);
/*! Read the specified clock from the log or return cached data */
-int64_t replay_read_clock(ReplayClockKind kind);
+int64_t replay_read_clock(ReplayClockKind kind, int64_t raw_icount);
/*! Saves or reads the clock depending on the current replay mode. */
#define REPLAY_CLOCK(clock, value) \
- (replay_mode == REPLAY_MODE_PLAY ? replay_read_clock((clock)) \
+ (replay_mode == REPLAY_MODE_PLAY \
+ ? replay_read_clock((clock), icount_get_raw()) \
: replay_mode == REPLAY_MODE_RECORD \
- ? replay_save_clock((clock), (value), icount_get_raw()) \
- : (value))
+ ? replay_save_clock((clock), (value), icount_get_raw()) \
+ : (value))
#define REPLAY_CLOCK_LOCKED(clock, value) \
- (replay_mode == REPLAY_MODE_PLAY ? replay_read_clock((clock)) \
+ (replay_mode == REPLAY_MODE_PLAY \
+ ? replay_read_clock((clock), icount_get_raw_locked()) \
: replay_mode == REPLAY_MODE_RECORD \
? replay_save_clock((clock), (value), icount_get_raw_locked()) \
- : (value))
+ : (value))
/* Processing data from random generators */
diff --git a/replay/replay-internal.c b/replay/replay-internal.c
index 2e8a3e947a..77d0c82327 100644
--- a/replay/replay-internal.c
+++ b/replay/replay-internal.c
@@ -247,10 +247,31 @@ void replay_advance_current_icount(uint64_t current_icount)
/* Time can only go forward */
assert(diff >= 0);
- if (diff > 0) {
- replay_put_event(EVENT_INSTRUCTION);
- replay_put_dword(diff);
- replay_state.current_icount += diff;
+ if (replay_mode == REPLAY_MODE_RECORD) {
+ if (diff > 0) {
+ replay_put_event(EVENT_INSTRUCTION);
+ replay_put_dword(diff);
+ replay_state.current_icount += diff;
+ }
+ } else if (replay_mode == REPLAY_MODE_PLAY) {
+ if (diff > 0) {
+ replay_state.instruction_count -= diff;
+ replay_state.current_icount += diff;
+ if (replay_state.instruction_count == 0) {
+ assert(replay_state.data_kind == EVENT_INSTRUCTION);
+ replay_finish_event();
+ /* Wake up iothread. This is required because
+ timers will not expire until clock counters
+ will be read from the log. */
+ qemu_notify_event();
+ }
+ }
+ /* Execution reached the break step */
+ if (replay_break_icount == replay_state.current_icount) {
+ /* Cannot make callback directly from the vCPU thread */
+ timer_mod_ns(replay_break_timer,
+ qemu_clock_get_ns(QEMU_CLOCK_REALTIME));
+ }
}
}
diff --git a/replay/replay-time.c b/replay/replay-time.c
index 43357c9f24..00ebcb7a49 100644
--- a/replay/replay-time.c
+++ b/replay/replay-time.c
@@ -46,12 +46,12 @@ void replay_read_next_clock(ReplayClockKind kind)
}
/*! Reads next clock event from the input. */
-int64_t replay_read_clock(ReplayClockKind kind)
+int64_t replay_read_clock(ReplayClockKind kind, int64_t raw_icount)
{
int64_t ret;
g_assert(replay_file && replay_mutex_locked());
- replay_account_executed_instructions();
+ replay_advance_current_icount(raw_icount);
if (replay_next_event_is(EVENT_CLOCK + kind)) {
replay_read_next_clock(kind);
diff --git a/replay/replay.c b/replay/replay.c
index d4c228ab28..c806fec69a 100644
--- a/replay/replay.c
+++ b/replay/replay.c
@@ -94,28 +94,7 @@ void replay_account_executed_instructions(void)
if (replay_mode == REPLAY_MODE_PLAY) {
g_assert(replay_mutex_locked());
if (replay_state.instruction_count > 0) {
- int count = (int)(replay_get_current_icount()
- - replay_state.current_icount);
-
- /* Time can only go forward */
- assert(count >= 0);
-
- replay_state.instruction_count -= count;
- replay_state.current_icount += count;
- if (replay_state.instruction_count == 0) {
- assert(replay_state.data_kind == EVENT_INSTRUCTION);
- replay_finish_event();
- /* Wake up iothread. This is required because
- timers will not expire until clock counters
- will be read from the log. */
- qemu_notify_event();
- }
- /* Execution reached the break step */
- if (replay_break_icount == replay_state.current_icount) {
- /* Cannot make callback directly from the vCPU thread */
- timer_mod_ns(replay_break_timer,
- qemu_clock_get_ns(QEMU_CLOCK_REALTIME));
- }
+ replay_advance_current_icount(replay_get_current_icount());
}
}
}
diff --git a/stubs/replay-tools.c b/stubs/replay-tools.c
index c06b360e22..43296b3d4e 100644
--- a/stubs/replay-tools.c
+++ b/stubs/replay-tools.c
@@ -13,7 +13,7 @@ int64_t replay_save_clock(unsigned int kind, int64_t clock, int64_t raw_icount)
return 0;
}
-int64_t replay_read_clock(unsigned int kind)
+int64_t replay_read_clock(unsigned int kind, int64_t raw_icount)
{
abort();
return 0;
--
2.29.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PULL v2 00/21] i386, qgraph patches for 2020-02-15
2021-02-16 18:26 [PULL v2 00/21] i386, qgraph patches for 2020-02-15 Paolo Bonzini
2021-02-16 18:26 ` [PULL 20/21] event_notifier: Set ->initialized earlier in event_notifier_init() Paolo Bonzini
2021-02-16 18:26 ` [PULL 21/21] replay: fix icount request when replaying clock access Paolo Bonzini
@ 2021-02-17 14:44 ` Peter Maydell
2 siblings, 0 replies; 4+ messages in thread
From: Peter Maydell @ 2021-02-17 14:44 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: QEMU Developers
On Tue, 16 Feb 2021 at 18:29, Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> The following changes since commit 8ba4bca570ace1e60614a0808631a517cf5df67a:
>
> Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging (2021-02-15 17:13:57 +0000)
>
> are available in the Git repository at:
>
> https://gitlab.com/bonzini/qemu.git tags/for-upstream
>
> for you to fetch changes up to 366a85e4bb748794b1ae0ca0ccc2d95f316679a0:
>
> replay: fix icount request when replaying clock access (2021-02-16 17:15:39 +0100)
>
> ----------------------------------------------------------------
> * HVF fixes
> * Extra qos-test debugging output (Christian)
> * SEV secret address autodetection (James)
> * SEV-ES support (Thomas)
> * Relocatable paths bugfix (Stefan)
> * RR fix (Pavel)
> * EventNotifier fix (Greg)
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/6.0
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-02-17 14:46 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-02-16 18:26 [PULL v2 00/21] i386, qgraph patches for 2020-02-15 Paolo Bonzini
2021-02-16 18:26 ` [PULL 20/21] event_notifier: Set ->initialized earlier in event_notifier_init() Paolo Bonzini
2021-02-16 18:26 ` [PULL 21/21] replay: fix icount request when replaying clock access Paolo Bonzini
2021-02-17 14:44 ` [PULL v2 00/21] i386, qgraph patches for 2020-02-15 Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).