[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC v18 08/15] i386: split smm helper (softmmu)
From: |
Claudio Fontana |
Subject: |
Re: [RFC v18 08/15] i386: split smm helper (softmmu) |
Date: |
Mon, 15 Feb 2021 16:33:00 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 |
On 2/15/21 3:39 PM, Claudio Fontana wrote:
> On 2/15/21 3:13 PM, Paolo Bonzini wrote:
>> On 15/02/21 15:05, Claudio Fontana wrote:
>>> On 2/15/21 2:30 PM, Paolo Bonzini wrote:
>>>> On 15/02/21 13:59, Claudio Fontana wrote:
>>>>> Yes. The difference between before the patch and after the patch
>>>>> is that before we were still going through all the code in
>>>>> tcg_gen_callN, via the call to gen_helper_rsm macro, only to call
>>>>> finally an empty function for CONFIG_USER_ONLY (helper_rsm()
>>>>> {}),
>>>>>
>>>>> while now we do not generate anything, we do not call the
>>>>> gen_helper_rsm macro at all, so we don't go through
>>>>> tcg_gen_callN.
>>>>>
>>>>
>>>> Can we even have an abort() for such cases?
>>>>
>>>> Paolo
>>>>
>>>
>>> Hi Paolo,
>>>
>>> where are you suggesting to have an abort()?
>>>
>>> You mean that we should abort() QEMU as soon as we detect in
>>> translate.c an RSM instruction in user-mode?
>>
>> Translating it is okay (it's just a guaranteed SIGILL), but I'm thinking
>> of aborting if s->flags & HF_SMM_MASK is true. Likewise if we see
>> CPU_INTERRUPT_SMI.
>>
>> Paolo
>>
>
> Ok, will rework as you suggest, thanks!
By the way, in the case of gen_bpt_io, is it a similar situation,
where we should abort in user-mode if we see s->flags & HF_IOBPT_MASK ?
static void gen_bpt_io(DisasContext *s, TCGv_i32 t_port, int ot)
{
#ifndef CONFIG_USER_ONLY
if (s->flags & HF_IOBPT_MASK) {
TCGv_i32 t_size = tcg_const_i32(1 << ot);
TCGv t_next = tcg_const_tl(s->pc - s->cs_base);
gen_helper_bpt_io(cpu_env, t_port, t_size, t_next);
tcg_temp_free_i32(t_size);
tcg_temp_free(t_next);
}
#endif /* !CONFIG_USER_ONLY */
}
What about other cases like
case 0xd8: /* VMRUN */
if (!(s->flags & HF_SVME_MASK) || !s->pe) {
goto illegal_op;
}
...
gen_helper_vmrun(cpu_env, tcg_const_i32(s->aflag - 1),
tcg_const_i32(s->pc - pc_start));
should we abort there as well if CONFIG_USER_ONLY?
And there are many more probably, should it be its own patch?
Ciao,
Claudio
>
>>>
>>> case 0x1aa: /* rsm */
>>> gen_svm_check_intercept(s, pc_start, SVM_EXIT_RSM);
>>> if (!(s->flags & HF_SMM_MASK))
>>> goto illegal_op;
>>> gen_update_cc_op(s);
>>> gen_jmp_im(s, s->pc - s->cs_base);
>>> #ifndef CONFIG_USER_ONLY
>>> gen_helper_rsm(cpu_env);
>>> #endif /* CONFIG_USER_ONLY */
>>> gen_eob(s);
>>> break;
>>
>>
>
>
- [RFC v18 00/15] i386 cleanup PART 2, Claudio Fontana, 2021/02/12
- [RFC v18 08/15] i386: split smm helper (softmmu), Claudio Fontana, 2021/02/12
- Re: [RFC v18 08/15] i386: split smm helper (softmmu), Claudio Fontana, 2021/02/15
- Re: [RFC v18 08/15] i386: split smm helper (softmmu), Alex Bennée, 2021/02/15
- Re: [RFC v18 08/15] i386: split smm helper (softmmu), Claudio Fontana, 2021/02/15
- Re: [RFC v18 08/15] i386: split smm helper (softmmu), Paolo Bonzini, 2021/02/15
- Re: [RFC v18 08/15] i386: split smm helper (softmmu), Claudio Fontana, 2021/02/15
- Re: [RFC v18 08/15] i386: split smm helper (softmmu), Paolo Bonzini, 2021/02/15
- Re: [RFC v18 08/15] i386: split smm helper (softmmu), Claudio Fontana, 2021/02/15
- Re: [RFC v18 08/15] i386: split smm helper (softmmu),
Claudio Fontana <=
[RFC v18 01/15] i386: split cpu accelerators from cpu.c, using AccelCPUClass, Claudio Fontana, 2021/02/12
[RFC v18 02/15] cpu: call AccelCPUClass::cpu_realizefn in cpu_exec_realizefn, Claudio Fontana, 2021/02/12
[RFC v18 06/15] meson: add target_user_arch, Claudio Fontana, 2021/02/12
[RFC v18 04/15] target/i386: fix host_cpu_adjust_phys_bits error handling, Claudio Fontana, 2021/02/12
[RFC v18 03/15] accel: introduce new accessor functions, Claudio Fontana, 2021/02/12
[RFC v18 07/15] i386: split off softmmu-only functionality in tcg-cpu, Claudio Fontana, 2021/02/12