Skip to contentSkip to conversation

s390x/sclp: mark sclp-cpu-hotplug as non-usercreatable

PATCH Applied Cornelia Huck 3 participants 4 messages Oct 4, 2017 – Oct 5, 2017

lore
Share & tools
lore
#0 lore raw

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
index 023d059a46..3ee890b392 100644
@@ -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
Reviewed-by on v1 1/1
#1 lore raw
Quoted 18 lines · Cornelia Huck

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 +0 -0
index 023d059a46..3ee890b392 100644

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;
 }
Acked-by on v1 1/1
#2 lore raw
In reply to Cornelia Huck
Quoted 9 lines · Cornelia Huck

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.

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
index 023d059a46..3ee890b392 100644
@@ -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 = {
author Applied
#3 lore raw
In reply to Cornelia Huck
Quoted 6 lines · On Wed, 4 Oct 2017 17:46:47 +0200 Cornelia Huck <[email protected]> wrote:

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.

Quoted 6 lines

To fix this, disallow creating a sclp-cpu-hotplug device manually.

---
 hw/s390x/sclpcpu.c | 6 ++++++
 1 file changed, 6 insertions(+)

Queued to s390-next.