s390x/sclp: mark sclp-cpu-hotplug as non-usercreatable
PATCH 1/1 s390x/sclp: mark sclp-cpu-hotplug as non-usercreatable
A TYPE_SCLP_CPU_HOTPLUG device for handling cpu hotplug events is already created by the sclp event facility. Adding a second TYPE_SCLP_CPU_HOTPLUG device via -device sclp-cpu-hotplug creates an ambiguity in raise_irq_cpu_hotplug(), leading to a crash once a cpu is hotplugged.
To fix this, disallow creating a sclp-cpu-hotplug device manually.
--- hw/s390x/sclpcpu.c | 6 ++++++ 1 file changed, 6 insertions(+)
hw/s390x/sclpcpu.c +6 -0
@@ -82,6 +82,12 @@ static void cpu_class_init(ObjectClass *oc, void *data) k->get_receive_mask = receive_mask; k->read_event_data = read_event_data;set_bit (DEVICE_CATEGORY_MISC , dc->categories); +/* +* Reason: raise_irq_cpu_hotplug() depends on an unique +* TYPE_SCLP_CPU_HOTPLUG device, which is already created +* by the sclp event facility +*/ + dc->user_creatable = false; }static const TypeInfo sclp_cpu_info = {
Signature · 1 line
2.13.6
Quoted 18 lines · Cornelia Huck
A
TYPE_SCLP_CPU_HOTPLUGdevice for handling cpu hotplug events is already created by the sclp event facility. Adding a secondTYPE_SCLP_CPU_HOTPLUGdevice via -device sclp-cpu-hotplug creates an ambiguity inraise_irq_cpu_hotplug(), leading to a crash once a cpu is hotplugged.To fix this, disallow creating a sclp-cpu-hotplug device manually.
Signed-off-by Cornelia Huck <[email protected]>--- hw/s390x/sclpcpu.c | 6 ++++++ 1 file changed, 6 insertions(+)hw/s390x/sclpcpu.c +0
-0
hw/s390x/sclpcpu.c static void cpu_class_init(ObjectClass *oc, void *data) · line 91
Quoted 10 lines
hw/s390x/sclpcpu.c +6
-0@@ -82,6 +82,12 @@ static void cpu_class_init(ObjectClass *oc, void *data) k->get_receive_mask = receive_mask; k->read_event_data = read_event_data;set_bit (DEVICE_CATEGORY_MISC , dc->categories); +/* +* Reason: raise_irq_cpu_hotplug() depends on an unique +* TYPE_SCLP_CPU_HOTPLUG device, which is already created +* by the sclp event facility +*/ + dc->user_creatable = false; }
Quoted 9 lines · Cornelia Huck
A
TYPE_SCLP_CPU_HOTPLUGdevice for handling cpu hotplug events is already created by the sclp event facility. Adding a secondTYPE_SCLP_CPU_HOTPLUGdevice via -device sclp-cpu-hotplug creates an ambiguity inraise_irq_cpu_hotplug(), leading to a crash once a cpu is hotplugged.To fix this, disallow creating a sclp-cpu-hotplug device manually.
Signed-off-by Cornelia Huck <[email protected]>
Most of these missing user_create things stem from a time of qdev.no_user which was then later deprecated and replaced with cannot_instantiate_with_device_add_yet It was supposed to be a temporary measure but now we all know that there ARE devices which are not user_creatable.
So its good to get this all fixed.
Quoted 22 lines
--- hw/s390x/sclpcpu.c | 6 ++++++ 1 file changed, 6 insertions(+)hw/s390x/sclpcpu.c +6
-0@@ -82,6 +82,12 @@ static void cpu_class_init(ObjectClass *oc, void *data) k->get_receive_mask = receive_mask; k->read_event_data = read_event_data;set_bit (DEVICE_CATEGORY_MISC , dc->categories); +/* +* Reason: raise_irq_cpu_hotplug() depends on an unique +* TYPE_SCLP_CPU_HOTPLUG device, which is already created +* by the sclp event facility +*/ + dc->user_creatable = false; }static const TypeInfo sclp_cpu_info = {
Cornelia Huck
AppliedQuoted 6 lines · On Wed, 4 Oct 2017 17:46:47 +0200 Cornelia Huck <[email protected]> wrote:
A
TYPE_SCLP_CPU_HOTPLUGdevice for handling cpu hotplug events is already created by the sclp event facility. Adding a secondTYPE_SCLP_CPU_HOTPLUGdevice via -device sclp-cpu-hotplug creates an ambiguity inraise_irq_cpu_hotplug(), leading to a crash once a cpu is hotplugged.
Quoted 6 lines
To fix this, disallow creating a sclp-cpu-hotplug device manually.
Signed-off-by Cornelia Huck <[email protected]>--- hw/s390x/sclpcpu.c | 6 ++++++ 1 file changed, 6 insertions(+)
Queued to s390-next.