mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
cpus: pass CPUState to run_on_cpu helpers
CPUState is a fairly common pointer to pass to these helpers. This means if you need other arguments for the async_run_on_cpu case you end up having to do a g_malloc to stuff additional data into the routine. For the current users this isn't a massive deal but for MTTCG this gets cumbersome when the only other parameter is often an address. This adds the typedef run_on_cpu_func for helper functions which has an explicit CPUState * passed as the first parameter. All the users of run_on_cpu and async_run_on_cpu have had their helpers updated to use CPUState where available. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> [Sergey Fedorov: - eliminate more CPUState in user data; - remove unnecessary user data passing; - fix target-s390x/kvm.c and target-s390x/misc_helper.c] Signed-off-by: Sergey Fedorov <sergey.fedorov@linaro.org> Acked-by: David Gibson <david@gibson.dropbear.id.au> (ppc parts) Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> (s390 parts) Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <1470158864-17651-3-git-send-email-alex.bennee@linaro.org> Reviewed-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
4a0588996a
commit
e0eeb4a21a
14 changed files with 109 additions and 138 deletions
|
@ -1113,7 +1113,6 @@ out:
|
|||
|
||||
typedef struct MCEInjectionParams {
|
||||
Monitor *mon;
|
||||
X86CPU *cpu;
|
||||
int bank;
|
||||
uint64_t status;
|
||||
uint64_t mcg_status;
|
||||
|
@ -1122,14 +1121,14 @@ typedef struct MCEInjectionParams {
|
|||
int flags;
|
||||
} MCEInjectionParams;
|
||||
|
||||
static void do_inject_x86_mce(void *data)
|
||||
static void do_inject_x86_mce(CPUState *cs, void *data)
|
||||
{
|
||||
MCEInjectionParams *params = data;
|
||||
CPUX86State *cenv = ¶ms->cpu->env;
|
||||
CPUState *cpu = CPU(params->cpu);
|
||||
X86CPU *cpu = X86_CPU(cs);
|
||||
CPUX86State *cenv = &cpu->env;
|
||||
uint64_t *banks = cenv->mce_banks + 4 * params->bank;
|
||||
|
||||
cpu_synchronize_state(cpu);
|
||||
cpu_synchronize_state(cs);
|
||||
|
||||
/*
|
||||
* If there is an MCE exception being processed, ignore this SRAO MCE
|
||||
|
@ -1149,7 +1148,7 @@ static void do_inject_x86_mce(void *data)
|
|||
if ((cenv->mcg_cap & MCG_CTL_P) && cenv->mcg_ctl != ~(uint64_t)0) {
|
||||
monitor_printf(params->mon,
|
||||
"CPU %d: Uncorrected error reporting disabled\n",
|
||||
cpu->cpu_index);
|
||||
cs->cpu_index);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1161,7 +1160,7 @@ static void do_inject_x86_mce(void *data)
|
|||
monitor_printf(params->mon,
|
||||
"CPU %d: Uncorrected error reporting disabled for"
|
||||
" bank %d\n",
|
||||
cpu->cpu_index, params->bank);
|
||||
cs->cpu_index, params->bank);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1170,7 +1169,7 @@ static void do_inject_x86_mce(void *data)
|
|||
monitor_printf(params->mon,
|
||||
"CPU %d: Previous MCE still in progress, raising"
|
||||
" triple fault\n",
|
||||
cpu->cpu_index);
|
||||
cs->cpu_index);
|
||||
qemu_log_mask(CPU_LOG_RESET, "Triple fault\n");
|
||||
qemu_system_reset_request();
|
||||
return;
|
||||
|
@ -1182,7 +1181,7 @@ static void do_inject_x86_mce(void *data)
|
|||
banks[3] = params->misc;
|
||||
cenv->mcg_status = params->mcg_status;
|
||||
banks[1] = params->status;
|
||||
cpu_interrupt(cpu, CPU_INTERRUPT_MCE);
|
||||
cpu_interrupt(cs, CPU_INTERRUPT_MCE);
|
||||
} else if (!(banks[1] & MCI_STATUS_VAL)
|
||||
|| !(banks[1] & MCI_STATUS_UC)) {
|
||||
if (banks[1] & MCI_STATUS_VAL) {
|
||||
|
@ -1204,7 +1203,6 @@ void cpu_x86_inject_mce(Monitor *mon, X86CPU *cpu, int bank,
|
|||
CPUX86State *cenv = &cpu->env;
|
||||
MCEInjectionParams params = {
|
||||
.mon = mon,
|
||||
.cpu = cpu,
|
||||
.bank = bank,
|
||||
.status = status,
|
||||
.mcg_status = mcg_status,
|
||||
|
@ -1245,7 +1243,6 @@ void cpu_x86_inject_mce(Monitor *mon, X86CPU *cpu, int bank,
|
|||
if (other_cs == cs) {
|
||||
continue;
|
||||
}
|
||||
params.cpu = X86_CPU(other_cs);
|
||||
run_on_cpu(other_cs, do_inject_x86_mce, ¶ms);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue