Message ID | 157650847239.354886.2782881118916307978.stgit@bahia.lan (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | cpu: Clarify overloading of reset QOM methods | expand |
On 12/16/19 4:01 PM, Greg Kurz wrote: > Similarly to what we already do with qdev, use a helper to overload the > reset QOM methods of the parent in children classes, for clarity. > > Signed-off-by: Greg Kurz <groug@kaod.org> > Reviewed-by: David Gibson <david@gibson.dropbear.id.au> > Reviewed-by: Alistair Francis <alistair.francis@wdc.com> > Reviewed-by: Cornelia Huck <cohuck@redhat.com> > Acked-by: David Hildenbrand <david@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > hw/core/cpu.c | 8 ++++++++ > include/hw/core/cpu.h | 4 ++++ > 2 files changed, 12 insertions(+) > > diff --git a/hw/core/cpu.c b/hw/core/cpu.c > index db1a03c6bbb3..fde5fd395b10 100644 > --- a/hw/core/cpu.c > +++ b/hw/core/cpu.c > @@ -239,6 +239,14 @@ void cpu_dump_statistics(CPUState *cpu, int flags) > } > } > > +void cpu_class_set_parent_reset(CPUClass *cc, > + void (*child_reset)(CPUState *cpu), > + void (**parent_reset)(CPUState *cpu)) > +{ > + *parent_reset = cc->reset; > + cc->reset = child_reset; > +} > + > void cpu_reset(CPUState *cpu) > { > CPUClass *klass = CPU_GET_CLASS(cpu); > diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h > index 77c6f0529903..73e9a869a41c 100644 > --- a/include/hw/core/cpu.h > +++ b/include/hw/core/cpu.h > @@ -1135,6 +1135,10 @@ void cpu_exec_unrealizefn(CPUState *cpu); > */ > bool target_words_bigendian(void); > > +void cpu_class_set_parent_reset(CPUClass *cc, > + void (*child_reset)(CPUState *cpu), > + void (**parent_reset)(CPUState *cpu)); > + > #ifdef NEED_CPU_H > > #ifdef CONFIG_SOFTMMU >
diff --git a/hw/core/cpu.c b/hw/core/cpu.c index db1a03c6bbb3..fde5fd395b10 100644 --- a/hw/core/cpu.c +++ b/hw/core/cpu.c @@ -239,6 +239,14 @@ void cpu_dump_statistics(CPUState *cpu, int flags) } } +void cpu_class_set_parent_reset(CPUClass *cc, + void (*child_reset)(CPUState *cpu), + void (**parent_reset)(CPUState *cpu)) +{ + *parent_reset = cc->reset; + cc->reset = child_reset; +} + void cpu_reset(CPUState *cpu) { CPUClass *klass = CPU_GET_CLASS(cpu); diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index 77c6f0529903..73e9a869a41c 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -1135,6 +1135,10 @@ void cpu_exec_unrealizefn(CPUState *cpu); */ bool target_words_bigendian(void); +void cpu_class_set_parent_reset(CPUClass *cc, + void (*child_reset)(CPUState *cpu), + void (**parent_reset)(CPUState *cpu)); + #ifdef NEED_CPU_H #ifdef CONFIG_SOFTMMU