return true;
}
-/*
- * Safe DPY refresh for TCG guests. We use the exclusive mechanism to
- * ensure the TCG vCPUs are quiescent so we can avoid races between
- * dirty page tracking for direct frame-buffer access by the guest.
- *
- * This is a temporary stopgap until we've fixed the dirty tracking
- * races in display adapters.
- */
-static void do_safe_dpy_refresh(DisplayChangeListener *dcl)
-{
- qemu_mutex_unlock_iothread();
- start_exclusive();
- qemu_mutex_lock_iothread();
- dcl->ops->dpy_refresh(dcl);
- qemu_mutex_unlock_iothread();
- end_exclusive();
- qemu_mutex_lock_iothread();
-}
-
static void dpy_refresh(DisplayState *s)
{
DisplayChangeListener *dcl;
QLIST_FOREACH(dcl, &s->listeners, next) {
if (dcl->ops->dpy_refresh) {
- if (tcg_enabled()) {
- do_safe_dpy_refresh(dcl);
- } else {
- dcl->ops->dpy_refresh(dcl);
- }
+ dcl->ops->dpy_refresh(dcl);
}
}
}