int main(int argc, char **argv) { QTestState *s = NULL; CharDriverState *chr = NULL; const char *hugefs = 0; char *socket_path = 0; char *qemu_cmd = 0; char *chr_path = 0; int ret; g_test_init(&argc, &argv, NULL); module_call_init(MODULE_INIT_QOM); hugefs = init_hugepagefs(); if (!hugefs) { return 0; } socket_path = g_strdup_printf("/tmp/vhost-%d.sock", getpid()); /* create char dev and add read handlers */ qemu_add_opts(&qemu_chardev_opts); chr_path = g_strdup_printf("unix:%s,server,nowait", socket_path); chr = qemu_chr_new("chr0", chr_path, NULL); g_free(chr_path); qemu_chr_add_handlers(chr, chr_can_read, chr_read, NULL, chr); /* run the main loop thread so the chardev may operate */ data_mutex = _mutex_new(); data_cond = _cond_new(); _thread_new(NULL, thread_function, NULL); qemu_cmd = g_strdup_printf(QEMU_CMD, hugefs, socket_path); s = qtest_start(qemu_cmd); g_free(qemu_cmd); qtest_add_func("/vhost-user/read-guest-mem", read_guest_mem); ret = g_test_run(); if (s) { qtest_quit(s); } /* cleanup */ unlink(socket_path); g_free(socket_path); _cond_free(data_cond); _mutex_free(data_mutex); return ret; }
static void append_mem_opts(TestServer *server, GString *cmd_line, int size, enum test_memfd memfd) { if (memfd == TEST_MEMFD_AUTO) { memfd = qemu_memfd_check(MFD_ALLOW_SEALING) ? TEST_MEMFD_YES : TEST_MEMFD_NO; } if (memfd == TEST_MEMFD_YES) { g_string_append_printf(cmd_line, QEMU_CMD_MEMFD, size, size); } else { const char *root = init_hugepagefs() ? : server->tmpfs; g_string_append_printf(cmd_line, QEMU_CMD_MEM, size, size, root); } }