Exemplo n.º 1
0
void qemu_cpu_kick(CPUState *cpu)
{
    qemu_cond_broadcast(cpu->halt_cond);
    if (!tcg_enabled() && !cpu->thread_kicked) {
        qemu_cpu_kick_thread(cpu);
        cpu->thread_kicked = true;
    }
}
Exemplo n.º 2
0
void qemu_cpu_kick(void *_env)
{
    CPUState *env = _env;

    qemu_cond_broadcast(env->halt_cond);
    if (kvm_enabled() && !env->thread_kicked) {
        qemu_cpu_kick_thread(env);
        env->thread_kicked = true;
    }
}
Exemplo n.º 3
0
void qemu_mutex_lock_iothread(struct uc_struct* uc)
{
    if (!uc->tcg_enabled(uc)) { // arch-dependent
        qemu_mutex_lock(&uc->qemu_global_mutex);
    } else {
        if (qemu_mutex_trylock(&uc->qemu_global_mutex)) {
            qemu_cpu_kick_thread(first_cpu);
            qemu_mutex_lock(&uc->qemu_global_mutex);
        }
    }
}
Exemplo n.º 4
0
void qemu_cpu_kick_self(void)
{
#ifndef _WIN32
    assert(cpu_single_env);

    if (!cpu_single_env->thread_kicked) {
        qemu_cpu_kick_thread(cpu_single_env);
        cpu_single_env->thread_kicked = true;
    }
#else
    abort();
#endif
}
Exemplo n.º 5
0
Arquivo: cpus.c Projeto: 0bliv10n/s2e
void qemu_cpu_kick(void *_env)
{
    CPUArchState *env = _env;
#ifdef CONFIG_S2E_DEBUG
    s2e_debug_print("MAIN: qemu_cpu_kick: qemu_cond_broadcast(env->halt_cond) %p\n", env->halt_cond);
#endif

    qemu_cond_broadcast(env->halt_cond);
    if (!tcg_enabled() && !env->thread_kicked) {
        qemu_cpu_kick_thread(env);
        env->thread_kicked = true;
    }
}
Exemplo n.º 6
0
void qemu_cpu_kick_self(void)
{
#ifndef _WIN32
    assert(current_cpu);

    if (!current_cpu->thread_kicked) {
        qemu_cpu_kick_thread(current_cpu);
        current_cpu->thread_kicked = true;
    }
#else
    abort();
#endif
}
Exemplo n.º 7
0
void qemu_mutex_lock_iothread(void)
{
    if (kvm_enabled()) {
        qemu_mutex_lock(&qemu_global_mutex);
    } else {
        qemu_mutex_lock(&qemu_fair_mutex);
        if (qemu_mutex_trylock(&qemu_global_mutex)) {
            qemu_cpu_kick_thread(first_cpu);
            qemu_mutex_lock(&qemu_global_mutex);
        }
        qemu_mutex_unlock(&qemu_fair_mutex);
    }
}
Exemplo n.º 8
0
void qemu_mutex_lock_iothread(void)
{
    if (!tcg_enabled()) {
        qemu_mutex_lock(&qemu_global_mutex);
    } else {
        iothread_requesting_mutex = true;
        if (qemu_mutex_trylock(&qemu_global_mutex)) {
            qemu_cpu_kick_thread(ENV_GET_CPU(first_cpu));
            qemu_mutex_lock(&qemu_global_mutex);
        }
        iothread_requesting_mutex = false;
        qemu_cond_broadcast(&qemu_io_proceeded_cond);
    }
}
Exemplo n.º 9
0
void qemu_cpu_kick_self(void)
{
#ifndef _WIN32
    assert(cpu_single_env);
    CPUState *cpu_single_cpu = ENV_GET_CPU(cpu_single_env);

    if (!cpu_single_cpu->thread_kicked) {
        qemu_cpu_kick_thread(cpu_single_cpu);
        cpu_single_cpu->thread_kicked = true;
    }
#else
    abort();
#endif
}
Exemplo n.º 10
0
void qemu_mutex_lock_iothread(void)
{
    LOGD_CPUS("%s1\n", __func__);
    if (!tcg_enabled()) {
    LOGD_CPUS("%s2\n", __func__);    
        qemu_mutex_lock(&qemu_global_mutex);
        LOGD_CPUS("%s3\n", __func__);
    } else {
        LOGD_CPUS("%s4\n", __func__);
        iothread_requesting_mutex = true;
        if (qemu_mutex_trylock(&qemu_global_mutex)) {
            LOGD_CPUS("%s5\n", __func__);
            qemu_cpu_kick_thread(first_cpu);
            LOGD_CPUS("%s6\n", __func__);
            qemu_mutex_lock(&qemu_global_mutex);
            LOGD_CPUS("%s7\n", __func__);
        }
        LOGD_CPUS("%s8\n", __func__);
        iothread_requesting_mutex = false;
        LOGD_CPUS("%s9\n", __func__);
        qemu_cond_broadcast(&qemu_io_proceeded_cond);
        LOGD_CPUS("%s10\n", __func__);
    }
}