[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC v6 11/11] i386: split cpu accelerators from cpu.c, using AccelC
From: |
Eduardo Habkost |
Subject: |
Re: [RFC v6 11/11] i386: split cpu accelerators from cpu.c, using AccelCPUClass |
Date: |
Fri, 27 Nov 2020 13:33:58 -0500 |
On Fri, Nov 27, 2020 at 07:16:25PM +0100, Claudio Fontana wrote:
> On 11/27/20 7:09 PM, Eduardo Habkost wrote:
> > On Fri, Nov 27, 2020 at 06:53:23PM +0100, Claudio Fontana wrote:
> >> On 11/27/20 6:41 PM, Eduardo Habkost wrote:
> >>> On Thu, Nov 26, 2020 at 11:32:18PM +0100, Claudio Fontana wrote:
> >>>> i386 is the first user of AccelCPUClass, allowing to split
> >>>> cpu.c into:
> >>>>
> >>>> cpu.c cpuid and common x86 cpu functionality
> >>>> host-cpu.c host x86 cpu functions and "host" cpu type
> >>>> kvm/cpu.c KVM x86 AccelCPUClass
> >>>> hvf/cpu.c HVF x86 AccelCPUClass
> >>>> tcg/cpu.c TCG x86 AccelCPUClass
> >>>>
> >>>> Signed-off-by: Claudio Fontana <cfontana@suse.de>
> >>>> ---
> >>> [...]
> >>>> +static void tcg_cpu_class_init(CPUClass *cc)
> >>>
> >>> Is this the only case where we need to provide an
> >>> AccelCPUClass.cpu_class_init method?
> >>>
> >>>
> >>>> +{
> >>>> + cc->do_interrupt = x86_cpu_do_interrupt;
> >>>> + cc->cpu_exec_interrupt = x86_cpu_exec_interrupt;
> >>>> + cc->synchronize_from_tb = x86_cpu_synchronize_from_tb;
> >>>> + cc->cpu_exec_enter = x86_cpu_exec_enter;
> >>>> + cc->cpu_exec_exit = x86_cpu_exec_exit;
> >>>> + cc->tcg_initialize = tcg_x86_init;
> >>>> + cc->tlb_fill = x86_cpu_tlb_fill;
> >>>> +#ifndef CONFIG_USER_ONLY
> >>>> + cc->debug_excp_handler = breakpoint_handler;
> >>>> +#endif /* !CONFIG_USER_ONLY */
> >>>
> >>> I find the need for these method overrides suspicious.
> >>
> >> These mechanisms are preexistent. My refactoring only makes them more
> >> visible.
> >>
> >>>
> >>> Comparing this with the code on qemu.git master:
> >>>
> >>> static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
> >>> {
> >>> [...]
> >>> #ifdef CONFIG_TCG
> >>> cc->do_interrupt = x86_cpu_do_interrupt;
> >>> cc->cpu_exec_interrupt = x86_cpu_exec_interrupt;
> >>> #endif
> >>> [...]
> >>> cc->synchronize_from_tb = x86_cpu_synchronize_from_tb;
> >>> [...]
> >>> #if defined(CONFIG_TCG) && !defined(CONFIG_USER_ONLY)
> >>> cc->debug_excp_handler = breakpoint_handler;
> >>> #endif
> >>> cc->cpu_exec_enter = x86_cpu_exec_enter;
> >>> cc->cpu_exec_exit = x86_cpu_exec_exit;
> >>> #ifdef CONFIG_TCG
> >>> cc->tcg_initialize = tcg_x86_init;
> >>> cc->tlb_fill = x86_cpu_tlb_fill;
> >>> #endif
> >>> [...]
> >>> }
> >>>
> >>> So, we have two kinds of CPUClass fields above:
> >>> * Code that was never conditional on CONFIG_TCG, and now is
> >>> conditional (synchronize_from_tb, cpu_exec_enter,
> >>> cpu_exec_exit).
> >>
> >>
> >>
> >> synchronize_from_tb, cpu_exec_enter and cpu_exec_exit only makes sense for
> >> TCG,
> >> and their code should not be compiled in for non-TCG.
> >>
> >> This is part of the effort to separate away non-pertinent code into
> >> accelerator-specific builds (and in the future modules).
> >>
> >> The fact that they were unconditionally compiled in before was a mistake,
> >> or at least this is the assumption I am making when changing this.
> >
> > Can you clarify why that was a mistake? Patch 07/11 makes
> > existing functions TCG-specific, but doesn't explain why.
>
>
>
> They are functions called only for TCG. You don't need translation blocks and
> cpu_exec() for other accelerators.
> I can add this information in the commit message.
Thanks! I believe we can clarify in patch 07/11 why some methods
that were not conditional on CONFIG_TCG were moved to
tcg_cpu_common_class_init().
Do you think it would be too complicated to move those methods
from CPUClass to CpusAccel? If they are really accel-specific,
CPUClass looks like the wrong place for them.
> [...]
--
Eduardo
- Re: [RFC v6 10/11] accel: introduce AccelCPUClass extending CPUClass, (continued)
[RFC v6 09/11] accel: replace struct CpusAccel with AccelOpsClass, Claudio Fontana, 2020/11/26
[RFC v6 11/11] i386: split cpu accelerators from cpu.c, using AccelCPUClass, Claudio Fontana, 2020/11/26
- Re: [RFC v6 11/11] i386: split cpu accelerators from cpu.c, using AccelCPUClass, Eduardo Habkost, 2020/11/27
- Re: [RFC v6 11/11] i386: split cpu accelerators from cpu.c, using AccelCPUClass, Claudio Fontana, 2020/11/27
- Re: [RFC v6 11/11] i386: split cpu accelerators from cpu.c, using AccelCPUClass, Eduardo Habkost, 2020/11/27
- Re: [RFC v6 11/11] i386: split cpu accelerators from cpu.c, using AccelCPUClass, Claudio Fontana, 2020/11/27
- Re: [RFC v6 11/11] i386: split cpu accelerators from cpu.c, using AccelCPUClass,
Eduardo Habkost <=