mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 21:40:49 +00:00
d34e8f6e9d
In some cases initializing the alarm timers can lead to non-negligable overhead from programs that link against qemu-tool.o. At least, setting a max-resolution WinMM alarm timer via mm_start_timer() (the current default for Windows) can increase the "tick rate" on Windows OSs and affect frequency scaling, and in the case of tools that run in guest OSs such has qemu-ga, the impact can be fairly dramatic (+20%/20% user/sys time on a core 2 processor was observed from an idle Windows XP guest). This patch doesn't address the issue directly (not sure what a good solution would be for Windows, or what other situations it might be noticeable), but it at least limits the scope of the issue to programs that "opt-in" to using the main-loop.c functions by only enabling alarm timers when qemu_init_main_loop() is called, which is already required to make use of those facilities, so existing users shouldn't be affected. Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
111 lines
1.7 KiB
C
111 lines
1.7 KiB
C
/*
|
|
* Compatibility for qemu-img/qemu-nbd
|
|
*
|
|
* Copyright IBM, Corp. 2008
|
|
*
|
|
* Authors:
|
|
* Anthony Liguori <aliguori@us.ibm.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2. See
|
|
* the COPYING file in the top-level directory.
|
|
*
|
|
* Contributions after 2012-01-13 are licensed under the terms of the
|
|
* GNU GPL, version 2 or (at your option) any later version.
|
|
*/
|
|
|
|
#include "qemu-common.h"
|
|
#include "monitor.h"
|
|
#include "qemu-timer.h"
|
|
#include "qemu-log.h"
|
|
#include "migration.h"
|
|
#include "main-loop.h"
|
|
#include "qemu_socket.h"
|
|
#include "slirp/libslirp.h"
|
|
|
|
#include <sys/time.h>
|
|
|
|
FILE *logfile;
|
|
|
|
struct QEMUBH
|
|
{
|
|
QEMUBHFunc *cb;
|
|
void *opaque;
|
|
};
|
|
|
|
Monitor *cur_mon;
|
|
|
|
int monitor_cur_is_qmp(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
void monitor_set_error(Monitor *mon, QError *qerror)
|
|
{
|
|
}
|
|
|
|
void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
|
|
{
|
|
}
|
|
|
|
void monitor_printf(Monitor *mon, const char *fmt, ...)
|
|
{
|
|
}
|
|
|
|
void monitor_print_filename(Monitor *mon, const char *filename)
|
|
{
|
|
}
|
|
|
|
void monitor_protocol_event(MonitorEvent event, QObject *data)
|
|
{
|
|
}
|
|
|
|
int64_t cpu_get_clock(void)
|
|
{
|
|
abort();
|
|
}
|
|
|
|
int64_t cpu_get_icount(void)
|
|
{
|
|
abort();
|
|
}
|
|
|
|
void qemu_mutex_lock_iothread(void)
|
|
{
|
|
}
|
|
|
|
void qemu_mutex_unlock_iothread(void)
|
|
{
|
|
}
|
|
|
|
int use_icount;
|
|
|
|
void qemu_clock_warp(QEMUClock *clock)
|
|
{
|
|
}
|
|
|
|
int qemu_init_main_loop(void)
|
|
{
|
|
init_clocks();
|
|
init_timer_alarm();
|
|
qemu_clock_enable(vm_clock, false);
|
|
return main_loop_init();
|
|
}
|
|
|
|
void slirp_select_fill(int *pnfds, fd_set *readfds,
|
|
fd_set *writefds, fd_set *xfds)
|
|
{
|
|
}
|
|
|
|
void slirp_select_poll(fd_set *readfds, fd_set *writefds,
|
|
fd_set *xfds, int select_error)
|
|
{
|
|
}
|
|
|
|
void migrate_add_blocker(Error *reason)
|
|
{
|
|
}
|
|
|
|
void migrate_del_blocker(Error *reason)
|
|
{
|
|
}
|