* [PATCH v3 0/2] cpu: Clarify overloading of reset QOM methods
@ 2019-12-16 15:01 Greg Kurz
2019-12-16 15:01 ` [PATCH v3 1/2] cpu: Introduce cpu_class_set_parent_reset() Greg Kurz
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Greg Kurz @ 2019-12-16 15:01 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Laurent Vivier, Peter Maydell, David Hildenbrand, Cornelia Huck,
qemu-devel, Alistair Francis, Paolo Bonzini,
Philippe Mathieu-Daudé, David Gibson
Each cpu subclass overloads the reset method of its parent class with
its own. But since it needs to call the parent method as well, it keeps
a parent_reset pointer to do so. This causes the same not very explicit
boiler plate to be duplicated all around the place:
pcc->parent_reset = cc->reset;
cc->reset = ppc_cpu_reset;
A similar concern was addressed some time back by Philippe Mathieu-Daudé
in qdev, with the addition of device_class_set_parent_reset() and friends:
https://git.qemu.org/?p=qemu.git;a=commit;h=46795cf2e2f6
https://git.qemu.org/?p=qemu.git;a=commit;h=bf853881690d
Follow the same approach with cpus.
Changes in v3:
- drop 'cpu: Introduce CPUReset callback typedef' patch which isn't needed
and makes the code less clear. This changes the declaration of the helper
in 'cpu: Introduce cpu_class_set_parent_reset()', but it is minor so I
keep the Reviewed-by and Acked-by tags.
Changes in v2:
- added Reviewed-by and Acked-by tags
- rebased on top of https://github.com/cohuck/qemu.git s390-next
SHA1 dd6252f035a2
--
Greg
---
Greg Kurz (2):
cpu: Introduce cpu_class_set_parent_reset()
cpu: Use cpu_class_set_parent_reset()
hw/core/cpu.c | 8 ++++++++
include/hw/core/cpu.h | 4 ++++
target/arm/cpu.c | 3 +--
target/cris/cpu.c | 3 +--
target/i386/cpu.c | 3 +--
target/lm32/cpu.c | 3 +--
target/m68k/cpu.c | 3 +--
target/microblaze/cpu.c | 3 +--
target/mips/cpu.c | 3 +--
target/moxie/cpu.c | 3 +--
target/nios2/cpu.c | 3 +--
target/openrisc/cpu.c | 3 +--
target/ppc/translate_init.inc.c | 3 +--
target/riscv/cpu.c | 3 +--
target/s390x/cpu.c | 3 +--
target/sh4/cpu.c | 3 +--
target/sparc/cpu.c | 3 +--
target/tilegx/cpu.c | 3 +--
target/tricore/cpu.c | 3 +--
target/xtensa/cpu.c | 3 +--
20 files changed, 30 insertions(+), 36 deletions(-)
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3 1/2] cpu: Introduce cpu_class_set_parent_reset()
2019-12-16 15:01 [PATCH v3 0/2] cpu: Clarify overloading of reset QOM methods Greg Kurz
@ 2019-12-16 15:01 ` Greg Kurz
2019-12-16 15:35 ` Philippe Mathieu-Daudé
2019-12-16 15:01 ` [PATCH v3 2/2] cpu: Use cpu_class_set_parent_reset() Greg Kurz
2020-01-18 19:22 ` [PATCH v3 0/2] cpu: Clarify overloading of reset QOM methods Paolo Bonzini
2 siblings, 1 reply; 5+ messages in thread
From: Greg Kurz @ 2019-12-16 15:01 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Laurent Vivier, Peter Maydell, David Hildenbrand, Cornelia Huck,
qemu-devel, Alistair Francis, Paolo Bonzini,
Philippe Mathieu-Daudé, David Gibson
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>
---
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
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 2/2] cpu: Use cpu_class_set_parent_reset()
2019-12-16 15:01 [PATCH v3 0/2] cpu: Clarify overloading of reset QOM methods Greg Kurz
2019-12-16 15:01 ` [PATCH v3 1/2] cpu: Introduce cpu_class_set_parent_reset() Greg Kurz
@ 2019-12-16 15:01 ` Greg Kurz
2020-01-18 19:22 ` [PATCH v3 0/2] cpu: Clarify overloading of reset QOM methods Paolo Bonzini
2 siblings, 0 replies; 5+ messages in thread
From: Greg Kurz @ 2019-12-16 15:01 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Laurent Vivier, Peter Maydell, David Hildenbrand, Cornelia Huck,
qemu-devel, Alistair Francis, Paolo Bonzini,
Philippe Mathieu-Daudé, David Gibson
Convert all targets to use cpu_class_set_parent_reset() with the following
coccinelle script:
@@
type CPUParentClass;
CPUParentClass *pcc;
CPUClass *cc;
identifier parent_fn;
identifier child_fn;
@@
+cpu_class_set_parent_reset(cc, child_fn, &pcc->parent_fn);
-pcc->parent_fn = cc->reset;
...
-cc->reset = child_fn;
Signed-off-by: Greg Kurz <groug@kaod.org>
Acked-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>
---
target/arm/cpu.c | 3 +--
target/cris/cpu.c | 3 +--
target/i386/cpu.c | 3 +--
target/lm32/cpu.c | 3 +--
target/m68k/cpu.c | 3 +--
target/microblaze/cpu.c | 3 +--
target/mips/cpu.c | 3 +--
target/moxie/cpu.c | 3 +--
target/nios2/cpu.c | 3 +--
target/openrisc/cpu.c | 3 +--
target/ppc/translate_init.inc.c | 3 +--
target/riscv/cpu.c | 3 +--
target/s390x/cpu.c | 3 +--
target/sh4/cpu.c | 3 +--
target/sparc/cpu.c | 3 +--
target/tilegx/cpu.c | 3 +--
target/tricore/cpu.c | 3 +--
target/xtensa/cpu.c | 3 +--
18 files changed, 18 insertions(+), 36 deletions(-)
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index 7a4ac9339bf9..712a9425fdf5 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -2625,8 +2625,7 @@ static void arm_cpu_class_init(ObjectClass *oc, void *data)
&acc->parent_realize);
dc->props = arm_cpu_properties;
- acc->parent_reset = cc->reset;
- cc->reset = arm_cpu_reset;
+ cpu_class_set_parent_reset(cc, arm_cpu_reset, &acc->parent_reset);
cc->class_by_name = arm_cpu_class_by_name;
cc->has_work = arm_cpu_has_work;
diff --git a/target/cris/cpu.c b/target/cris/cpu.c
index 7adfd6caf4ed..486675e3822f 100644
--- a/target/cris/cpu.c
+++ b/target/cris/cpu.c
@@ -256,8 +256,7 @@ static void cris_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, cris_cpu_realizefn,
&ccc->parent_realize);
- ccc->parent_reset = cc->reset;
- cc->reset = cris_cpu_reset;
+ cpu_class_set_parent_reset(cc, cris_cpu_reset, &ccc->parent_reset);
cc->class_by_name = cris_cpu_class_by_name;
cc->has_work = cris_cpu_has_work;
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 69f518a21a9b..57d36931725d 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -7049,8 +7049,7 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
&xcc->parent_unrealize);
dc->props = x86_cpu_properties;
- xcc->parent_reset = cc->reset;
- cc->reset = x86_cpu_reset;
+ cpu_class_set_parent_reset(cc, x86_cpu_reset, &xcc->parent_reset);
cc->reset_dump_flags = CPU_DUMP_FPU | CPU_DUMP_CCOP;
cc->class_by_name = x86_cpu_class_by_name;
diff --git a/target/lm32/cpu.c b/target/lm32/cpu.c
index b35537de6285..687bf35e6588 100644
--- a/target/lm32/cpu.c
+++ b/target/lm32/cpu.c
@@ -218,8 +218,7 @@ static void lm32_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, lm32_cpu_realizefn,
&lcc->parent_realize);
- lcc->parent_reset = cc->reset;
- cc->reset = lm32_cpu_reset;
+ cpu_class_set_parent_reset(cc, lm32_cpu_reset, &lcc->parent_reset);
cc->class_by_name = lm32_cpu_class_by_name;
cc->has_work = lm32_cpu_has_work;
diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c
index e6596de29c2c..176d95e6fcfb 100644
--- a/target/m68k/cpu.c
+++ b/target/m68k/cpu.c
@@ -257,8 +257,7 @@ static void m68k_cpu_class_init(ObjectClass *c, void *data)
device_class_set_parent_realize(dc, m68k_cpu_realizefn,
&mcc->parent_realize);
- mcc->parent_reset = cc->reset;
- cc->reset = m68k_cpu_reset;
+ cpu_class_set_parent_reset(cc, m68k_cpu_reset, &mcc->parent_reset);
cc->class_by_name = m68k_cpu_class_by_name;
cc->has_work = m68k_cpu_has_work;
diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c
index 9cfd7445e7da..71d88f603b2e 100644
--- a/target/microblaze/cpu.c
+++ b/target/microblaze/cpu.c
@@ -292,8 +292,7 @@ static void mb_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, mb_cpu_realizefn,
&mcc->parent_realize);
- mcc->parent_reset = cc->reset;
- cc->reset = mb_cpu_reset;
+ cpu_class_set_parent_reset(cc, mb_cpu_reset, &mcc->parent_reset);
cc->class_by_name = mb_cpu_class_by_name;
cc->has_work = mb_cpu_has_work;
diff --git a/target/mips/cpu.c b/target/mips/cpu.c
index bbcf7ca4635c..6cd6b9650baa 100644
--- a/target/mips/cpu.c
+++ b/target/mips/cpu.c
@@ -189,8 +189,7 @@ static void mips_cpu_class_init(ObjectClass *c, void *data)
device_class_set_parent_realize(dc, mips_cpu_realizefn,
&mcc->parent_realize);
- mcc->parent_reset = cc->reset;
- cc->reset = mips_cpu_reset;
+ cpu_class_set_parent_reset(cc, mips_cpu_reset, &mcc->parent_reset);
cc->class_by_name = mips_cpu_class_by_name;
cc->has_work = mips_cpu_has_work;
diff --git a/target/moxie/cpu.c b/target/moxie/cpu.c
index 48996d0554f2..cf47bc709b54 100644
--- a/target/moxie/cpu.c
+++ b/target/moxie/cpu.c
@@ -101,8 +101,7 @@ static void moxie_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, moxie_cpu_realizefn,
&mcc->parent_realize);
- mcc->parent_reset = cc->reset;
- cc->reset = moxie_cpu_reset;
+ cpu_class_set_parent_reset(cc, moxie_cpu_reset, &mcc->parent_reset);
cc->class_by_name = moxie_cpu_class_by_name;
diff --git a/target/nios2/cpu.c b/target/nios2/cpu.c
index ca9c7a6df5d1..bbdbc0c6fbf0 100644
--- a/target/nios2/cpu.c
+++ b/target/nios2/cpu.c
@@ -188,8 +188,7 @@ static void nios2_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, nios2_cpu_realizefn,
&ncc->parent_realize);
dc->props = nios2_properties;
- ncc->parent_reset = cc->reset;
- cc->reset = nios2_cpu_reset;
+ cpu_class_set_parent_reset(cc, nios2_cpu_reset, &ncc->parent_reset);
cc->class_by_name = nios2_cpu_class_by_name;
cc->has_work = nios2_cpu_has_work;
diff --git a/target/openrisc/cpu.c b/target/openrisc/cpu.c
index 506aec6bfba5..5cd04dafab69 100644
--- a/target/openrisc/cpu.c
+++ b/target/openrisc/cpu.c
@@ -150,8 +150,7 @@ static void openrisc_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, openrisc_cpu_realizefn,
&occ->parent_realize);
- occ->parent_reset = cc->reset;
- cc->reset = openrisc_cpu_reset;
+ cpu_class_set_parent_reset(cc, openrisc_cpu_reset, &occ->parent_reset);
cc->class_by_name = openrisc_cpu_class_by_name;
cc->has_work = openrisc_cpu_has_work;
diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c
index ba726dec4d00..e5773a99fffd 100644
--- a/target/ppc/translate_init.inc.c
+++ b/target/ppc/translate_init.inc.c
@@ -10614,8 +10614,7 @@ static void ppc_cpu_class_init(ObjectClass *oc, void *data)
pcc->interrupts_big_endian = ppc_cpu_interrupts_big_endian_always;
dc->props = ppc_cpu_properties;
- pcc->parent_reset = cc->reset;
- cc->reset = ppc_cpu_reset;
+ cpu_class_set_parent_reset(cc, ppc_cpu_reset, &pcc->parent_reset);
cc->class_by_name = ppc_cpu_class_by_name;
pcc->parent_parse_features = cc->parse_features;
diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
index d37861a4305b..d6f187272859 100644
--- a/target/riscv/cpu.c
+++ b/target/riscv/cpu.c
@@ -462,8 +462,7 @@ static void riscv_cpu_class_init(ObjectClass *c, void *data)
device_class_set_parent_realize(dc, riscv_cpu_realize,
&mcc->parent_realize);
- mcc->parent_reset = cc->reset;
- cc->reset = riscv_cpu_reset;
+ cpu_class_set_parent_reset(cc, riscv_cpu_reset, &mcc->parent_reset);
cc->class_by_name = riscv_cpu_class_by_name;
cc->has_work = riscv_cpu_has_work;
diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c
index 99ea09085a30..80b93435a74b 100644
--- a/target/s390x/cpu.c
+++ b/target/s390x/cpu.c
@@ -448,12 +448,11 @@ static void s390_cpu_class_init(ObjectClass *oc, void *data)
dc->props = s390x_cpu_properties;
dc->user_creatable = true;
- scc->parent_reset = cc->reset;
+ cpu_class_set_parent_reset(cc, s390_cpu_reset_full, &scc->parent_reset);
#if !defined(CONFIG_USER_ONLY)
scc->load_normal = s390_cpu_load_normal;
#endif
scc->reset = s390_cpu_reset;
- cc->reset = s390_cpu_reset_full;
cc->class_by_name = s390_cpu_class_by_name,
cc->has_work = s390_cpu_has_work;
#ifdef CONFIG_TCG
diff --git a/target/sh4/cpu.c b/target/sh4/cpu.c
index d0a7707991fe..70c8d8170ff3 100644
--- a/target/sh4/cpu.c
+++ b/target/sh4/cpu.c
@@ -214,8 +214,7 @@ static void superh_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, superh_cpu_realizefn,
&scc->parent_realize);
- scc->parent_reset = cc->reset;
- cc->reset = superh_cpu_reset;
+ cpu_class_set_parent_reset(cc, superh_cpu_reset, &scc->parent_reset);
cc->class_by_name = superh_cpu_class_by_name;
cc->has_work = superh_cpu_has_work;
diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
index bc659295520f..9c306e52717e 100644
--- a/target/sparc/cpu.c
+++ b/target/sparc/cpu.c
@@ -859,8 +859,7 @@ static void sparc_cpu_class_init(ObjectClass *oc, void *data)
&scc->parent_realize);
dc->props = sparc_cpu_properties;
- scc->parent_reset = cc->reset;
- cc->reset = sparc_cpu_reset;
+ cpu_class_set_parent_reset(cc, sparc_cpu_reset, &scc->parent_reset);
cc->class_by_name = sparc_cpu_class_by_name;
cc->parse_features = sparc_cpu_parse_features;
diff --git a/target/tilegx/cpu.c b/target/tilegx/cpu.c
index 2b2a7ccc313f..cd422a0467a0 100644
--- a/target/tilegx/cpu.c
+++ b/target/tilegx/cpu.c
@@ -142,8 +142,7 @@ static void tilegx_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, tilegx_cpu_realizefn,
&tcc->parent_realize);
- tcc->parent_reset = cc->reset;
- cc->reset = tilegx_cpu_reset;
+ cpu_class_set_parent_reset(cc, tilegx_cpu_reset, &tcc->parent_reset);
cc->class_by_name = tilegx_cpu_class_by_name;
cc->has_work = tilegx_cpu_has_work;
diff --git a/target/tricore/cpu.c b/target/tricore/cpu.c
index df807c1d7437..85bc9f03a1ee 100644
--- a/target/tricore/cpu.c
+++ b/target/tricore/cpu.c
@@ -153,8 +153,7 @@ static void tricore_cpu_class_init(ObjectClass *c, void *data)
device_class_set_parent_realize(dc, tricore_cpu_realizefn,
&mcc->parent_realize);
- mcc->parent_reset = cc->reset;
- cc->reset = tricore_cpu_reset;
+ cpu_class_set_parent_reset(cc, tricore_cpu_reset, &mcc->parent_reset);
cc->class_by_name = tricore_cpu_class_by_name;
cc->has_work = tricore_cpu_has_work;
diff --git a/target/xtensa/cpu.c b/target/xtensa/cpu.c
index c65dcf9dd782..4856aee8eca6 100644
--- a/target/xtensa/cpu.c
+++ b/target/xtensa/cpu.c
@@ -184,8 +184,7 @@ static void xtensa_cpu_class_init(ObjectClass *oc, void *data)
device_class_set_parent_realize(dc, xtensa_cpu_realizefn,
&xcc->parent_realize);
- xcc->parent_reset = cc->reset;
- cc->reset = xtensa_cpu_reset;
+ cpu_class_set_parent_reset(cc, xtensa_cpu_reset, &xcc->parent_reset);
cc->class_by_name = xtensa_cpu_class_by_name;
cc->has_work = xtensa_cpu_has_work;
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3 1/2] cpu: Introduce cpu_class_set_parent_reset()
2019-12-16 15:01 ` [PATCH v3 1/2] cpu: Introduce cpu_class_set_parent_reset() Greg Kurz
@ 2019-12-16 15:35 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-12-16 15:35 UTC (permalink / raw)
To: Greg Kurz, Eduardo Habkost
Cc: Laurent Vivier, Peter Maydell, David Hildenbrand, Cornelia Huck,
qemu-devel, Alistair Francis, Paolo Bonzini, David Gibson
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
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3 0/2] cpu: Clarify overloading of reset QOM methods
2019-12-16 15:01 [PATCH v3 0/2] cpu: Clarify overloading of reset QOM methods Greg Kurz
2019-12-16 15:01 ` [PATCH v3 1/2] cpu: Introduce cpu_class_set_parent_reset() Greg Kurz
2019-12-16 15:01 ` [PATCH v3 2/2] cpu: Use cpu_class_set_parent_reset() Greg Kurz
@ 2020-01-18 19:22 ` Paolo Bonzini
2 siblings, 0 replies; 5+ messages in thread
From: Paolo Bonzini @ 2020-01-18 19:22 UTC (permalink / raw)
To: Greg Kurz, Eduardo Habkost
Cc: Laurent Vivier, Peter Maydell, David Hildenbrand, Cornelia Huck,
qemu-devel, Alistair Francis, Philippe Mathieu-Daudé,
David Gibson
On 16/12/19 16:01, Greg Kurz wrote:
> Each cpu subclass overloads the reset method of its parent class with
> its own. But since it needs to call the parent method as well, it keeps
> a parent_reset pointer to do so. This causes the same not very explicit
> boiler plate to be duplicated all around the place:
>
> pcc->parent_reset = cc->reset;
> cc->reset = ppc_cpu_reset;
>
> A similar concern was addressed some time back by Philippe Mathieu-Daudé
> in qdev, with the addition of device_class_set_parent_reset() and friends:
>
> https://git.qemu.org/?p=qemu.git;a=commit;h=46795cf2e2f6
> https://git.qemu.org/?p=qemu.git;a=commit;h=bf853881690d
>
> Follow the same approach with cpus.
>
> Changes in v3:
> - drop 'cpu: Introduce CPUReset callback typedef' patch which isn't needed
> and makes the code less clear. This changes the declaration of the helper
> in 'cpu: Introduce cpu_class_set_parent_reset()', but it is minor so I
> keep the Reviewed-by and Acked-by tags.
>
> Changes in v2:
> - added Reviewed-by and Acked-by tags
> - rebased on top of https://github.com/cohuck/qemu.git s390-next
> SHA1 dd6252f035a2
>
> --
> Greg
>
> ---
>
> Greg Kurz (2):
> cpu: Introduce cpu_class_set_parent_reset()
> cpu: Use cpu_class_set_parent_reset()
>
>
> hw/core/cpu.c | 8 ++++++++
> include/hw/core/cpu.h | 4 ++++
> target/arm/cpu.c | 3 +--
> target/cris/cpu.c | 3 +--
> target/i386/cpu.c | 3 +--
> target/lm32/cpu.c | 3 +--
> target/m68k/cpu.c | 3 +--
> target/microblaze/cpu.c | 3 +--
> target/mips/cpu.c | 3 +--
> target/moxie/cpu.c | 3 +--
> target/nios2/cpu.c | 3 +--
> target/openrisc/cpu.c | 3 +--
> target/ppc/translate_init.inc.c | 3 +--
> target/riscv/cpu.c | 3 +--
> target/s390x/cpu.c | 3 +--
> target/sh4/cpu.c | 3 +--
> target/sparc/cpu.c | 3 +--
> target/tilegx/cpu.c | 3 +--
> target/tricore/cpu.c | 3 +--
> target/xtensa/cpu.c | 3 +--
> 20 files changed, 30 insertions(+), 36 deletions(-)
>
Queued, thanks.
Paolo
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-01-18 19:43 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-12-16 15:01 [PATCH v3 0/2] cpu: Clarify overloading of reset QOM methods Greg Kurz
2019-12-16 15:01 ` [PATCH v3 1/2] cpu: Introduce cpu_class_set_parent_reset() Greg Kurz
2019-12-16 15:35 ` Philippe Mathieu-Daudé
2019-12-16 15:01 ` [PATCH v3 2/2] cpu: Use cpu_class_set_parent_reset() Greg Kurz
2020-01-18 19:22 ` [PATCH v3 0/2] cpu: Clarify overloading of reset QOM methods Paolo Bonzini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).