[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 14/31] qtest: add qtest_server_send abstraction
From: |
Stefan Hajnoczi |
Subject: |
[PULL 14/31] qtest: add qtest_server_send abstraction |
Date: |
Sat, 22 Feb 2020 08:50:13 +0000 |
From: Alexander Bulekov <address@hidden>
qtest_server_send is a function pointer specifying the handler used to
transmit data to the qtest client. In the standard configuration, this
calls the CharBackend handler, but now it is possible for other types of
handlers, e.g direct-function calls if the qtest client and server
exist within the same process (inproc)
Signed-off-by: Alexander Bulekov <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
Reviewed-by: Darren Kenny <address@hidden>
Acked-by: Thomas Huth <address@hidden>
Message-id: address@hidden
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
include/sysemu/qtest.h | 3 +++
qtest.c | 18 ++++++++++++++++--
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/include/sysemu/qtest.h b/include/sysemu/qtest.h
index 5ed09c80b1..e2f1047fd7 100644
--- a/include/sysemu/qtest.h
+++ b/include/sysemu/qtest.h
@@ -26,4 +26,7 @@ bool qtest_driver(void);
void qtest_server_init(const char *qtest_chrdev, const char *qtest_log, Error
**errp);
+void qtest_server_set_send_handler(void (*send)(void *, const char *),
+ void *opaque);
+
#endif
diff --git a/qtest.c b/qtest.c
index 587dcbb4b5..8a4ba59828 100644
--- a/qtest.c
+++ b/qtest.c
@@ -43,6 +43,8 @@ static GString *inbuf;
static int irq_levels[MAX_IRQ];
static qemu_timeval start_time;
static bool qtest_opened;
+static void (*qtest_server_send)(void*, const char*);
+static void *qtest_server_send_opaque;
#define FMT_timeval "%ld.%06ld"
@@ -229,8 +231,10 @@ static void GCC_FMT_ATTR(1, 2) qtest_log_send(const char
*fmt, ...)
va_end(ap);
}
-static void do_qtest_send(CharBackend *chr, const char *str, size_t len)
+static void qtest_server_char_be_send(void *opaque, const char *str)
{
+ size_t len = strlen(str);
+ CharBackend* chr = (CharBackend *)opaque;
qemu_chr_fe_write_all(chr, (uint8_t *)str, len);
if (qtest_log_fp && qtest_opened) {
fprintf(qtest_log_fp, "%s", str);
@@ -239,7 +243,7 @@ static void do_qtest_send(CharBackend *chr, const char
*str, size_t len)
static void qtest_send(CharBackend *chr, const char *str)
{
- do_qtest_send(chr, str, strlen(str));
+ qtest_server_send(qtest_server_send_opaque, str);
}
static void GCC_FMT_ATTR(2, 3) qtest_sendf(CharBackend *chr,
@@ -784,6 +788,16 @@ void qtest_server_init(const char *qtest_chrdev, const
char *qtest_log, Error **
qemu_chr_fe_set_echo(&qtest_chr, true);
inbuf = g_string_new("");
+
+ if (!qtest_server_send) {
+ qtest_server_set_send_handler(qtest_server_char_be_send, &qtest_chr);
+ }
+}
+
+void qtest_server_set_send_handler(void (*send)(void*, const char*), void
*opaque)
+{
+ qtest_server_send = send;
+ qtest_server_send_opaque = opaque;
}
bool qtest_driver(void)
--
2.24.1
- [PULL 04/31] util/async: make bh_aio_poll() O(1), (continued)
- [PULL 04/31] util/async: make bh_aio_poll() O(1), Stefan Hajnoczi, 2020/02/22
- [PULL 05/31] aio-posix: fix use after leaving scope in aio_poll(), Stefan Hajnoczi, 2020/02/22
- [PULL 06/31] aio-posix: don't pass ns timeout to epoll_wait(), Stefan Hajnoczi, 2020/02/22
- [PULL 07/31] qemu/queue.h: add QLIST_SAFE_REMOVE(), Stefan Hajnoczi, 2020/02/22
- [PULL 08/31] aio-posix: make AioHandler deletion O(1), Stefan Hajnoczi, 2020/02/22
- [PULL 09/31] aio-posix: make AioHandler dispatch O(1) with epoll, Stefan Hajnoczi, 2020/02/22
- [PULL 10/31] softmmu: move vl.c to softmmu/, Stefan Hajnoczi, 2020/02/22
- [PULL 11/31] softmmu: split off vl.c:main() into main.c, Stefan Hajnoczi, 2020/02/22
- [PULL 12/31] module: check module wasn't already initialized, Stefan Hajnoczi, 2020/02/22
- [PULL 13/31] fuzz: add FUZZ_TARGET module type, Stefan Hajnoczi, 2020/02/22
- [PULL 14/31] qtest: add qtest_server_send abstraction,
Stefan Hajnoczi <=
- [PULL 15/31] libqtest: add a layer of abstraction to send/recv, Stefan Hajnoczi, 2020/02/22
- [PULL 16/31] libqtest: make bufwrite rely on the TransportOps, Stefan Hajnoczi, 2020/02/22
- [PULL 17/31] qtest: add in-process incoming command handler, Stefan Hajnoczi, 2020/02/22
- [PULL 18/31] libqos: rename i2c_send and i2c_recv, Stefan Hajnoczi, 2020/02/22
- [PULL 19/31] libqos: split qos-test and libqos makefile vars, Stefan Hajnoczi, 2020/02/22
- [PULL 21/31] fuzz: add fuzzer skeleton, Stefan Hajnoczi, 2020/02/22
- [PULL 20/31] libqos: move useful qos-test funcs to qos_external, Stefan Hajnoczi, 2020/02/22
- [PULL 22/31] exec: keep ram block across fork when using qtest, Stefan Hajnoczi, 2020/02/22
- [PULL 23/31] main: keep rcu_atfork callback enabled for qtest, Stefan Hajnoczi, 2020/02/22
- [PULL 24/31] fuzz: support for fork-based fuzzing., Stefan Hajnoczi, 2020/02/22