[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 2/6] monitor: accept chardev input from iothread
From: |
Marc-André Lureau |
Subject: |
[Qemu-devel] [PATCH v2 2/6] monitor: accept chardev input from iothread |
Date: |
Mon, 29 Oct 2018 16:57:29 +0400 |
Chardev backends may not handle safely IO events from concurrent
threads. Better to wake up the chardev from the monitor IO thread if
it's being used as the chardev context.
Unify code paths by using a BH in all cases.
Drop the now redundant aio_notify() call.
Signed-off-by: Marc-André Lureau <address@hidden>
---
monitor.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/monitor.c b/monitor.c
index 07712d89f9..511dd11d1c 100644
--- a/monitor.c
+++ b/monitor.c
@@ -4304,6 +4304,13 @@ int monitor_suspend(Monitor *mon)
return 0;
}
+static void monitor_accept_input(void *opaque)
+{
+ Monitor *mon = opaque;
+
+ qemu_chr_fe_accept_input(&mon->chr);
+}
+
void monitor_resume(Monitor *mon)
{
if (monitor_is_hmp_non_interactive(mon)) {
@@ -4311,20 +4318,24 @@ void monitor_resume(Monitor *mon)
}
if (atomic_dec_fetch(&mon->suspend_cnt) == 0) {
+ AioContext *ctx = qemu_get_aio_context();
+
if (monitor_is_qmp(mon)) {
/*
* For QMP monitors that are running in the I/O thread,
* let's kick the thread in case it's sleeping.
*/
if (mon->use_io_thread) {
- aio_notify(iothread_get_aio_context(mon_iothread));
+ ctx = iothread_get_aio_context(mon_iothread);
}
} else {
assert(mon->rs);
readline_show_prompt(mon->rs);
}
- qemu_chr_fe_accept_input(&mon->chr);
+
+ aio_bh_schedule_oneshot(ctx, monitor_accept_input, mon);
}
+
trace_monitor_suspend(mon, -1);
}
--
2.19.0.271.gfe8321ec05
- [Qemu-devel] [PATCH v2 0/6] monitor: misc fixes, Marc-André Lureau, 2018/10/29
- [Qemu-devel] [PATCH v2 1/6] monitor: inline ambiguous helper functions, Marc-André Lureau, 2018/10/29
- [Qemu-devel] [PATCH v2 2/6] monitor: accept chardev input from iothread,
Marc-André Lureau <=
- [Qemu-devel] [PATCH v2 3/6] char: add a QEMU_CHAR_FEATURE_GCONTEXT flag, Marc-André Lureau, 2018/10/29
- [Qemu-devel] [PATCH v2 4/6] monitor: check if chardev can switch gcontext for OOB, Marc-André Lureau, 2018/10/29
- [Qemu-devel] [PATCH v2 6/6] monitor: avoid potential dead-lock when cleaning up, Marc-André Lureau, 2018/10/29
- [Qemu-devel] [PATCH v2 5/6] monitor: prevent inserting new monitors after cleanup, Marc-André Lureau, 2018/10/29
- Re: [Qemu-devel] [PATCH v2 0/6] monitor: misc fixes, Peter Xu, 2018/10/30
- Re: [Qemu-devel] [PATCH v2 0/6] monitor: misc fixes, Markus Armbruster, 2018/10/30