qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: qemu-devel@nongnu.org
Cc: mjrosato@linux.vnet.ibm.com, thuth@redhat.com,
	pkrempa@redhat.com, ehabkost@redhat.com, aik@ozlabs.ru,
	armbru@redhat.com, agraf@suse.de, borntraeger@de.ibm.com,
	qemu-ppc@nongnu.org, bharata@linux.vnet.ibm.com,
	pbonzini@redhat.com, mdroth@linux.vnet.ibm.com, afaerber@suse.de,
	david@gibson.dropbear.id.au
Subject: [Qemu-devel] [PATCH v2 2/5] spapr: convert slot name property to numeric core and links
Date: Tue,  8 Mar 2016 14:18:12 +0100	[thread overview]
Message-ID: <1457443095-213125-3-git-send-email-imammedo@redhat.com> (raw)
In-Reply-To: <1457443095-213125-1-git-send-email-imammedo@redhat.com>

it's just a hack to get qiuck swith to numeric core id
should be split and merged in patches
introducing modified code.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
---
 hw/cpu/core.c           | 32 +++++++++++++++++++++++---------
 hw/ppc/spapr.c          | 39 ++-------------------------------------
 hw/ppc/spapr_cpu_core.c | 25 ++-----------------------
 include/hw/cpu/core.h   |  4 ++--
 4 files changed, 29 insertions(+), 71 deletions(-)

diff --git a/hw/cpu/core.c b/hw/cpu/core.c
index d8caf37..90a9408 100644
--- a/hw/cpu/core.c
+++ b/hw/cpu/core.c
@@ -7,25 +7,39 @@
  * See the COPYING file in the top-level directory.
  */
 #include "hw/cpu/core.h"
+#include "qapi/visitor.h"
 
-static char *core_prop_get_slot(Object *obj, Error **errp)
+static void core_prop_get_core(Object *obj, Visitor *v,
+                               const char *name, void *opaque,
+                               Error **errp)
 {
-    CPUCore *core = CPU_CORE(obj);
+    CPUCore *cc = CPU_CORE(obj);
+    int64_t value = cc->core;
 
-    return g_strdup(core->slot);
+    visit_type_int(v, name, &value, errp);
 }
 
-static void core_prop_set_slot(Object *obj, const char *val, Error **errp)
+static void core_prop_set_core(Object *obj, Visitor *v,
+                               const char *name, void *opaque,
+                               Error **errp)
 {
-    CPUCore *core = CPU_CORE(obj);
-
-    core->slot = g_strdup(val);
+    CPUCore *cc = CPU_CORE(obj);
+    Error *local_err = NULL;
+    int64_t value;
+
+    visit_type_int(v, name, &value, &local_err);
+    if (local_err) {
+        error_propagate(errp, local_err);
+        return;
+    }
+    cc->core = value;
 }
 
 static void cpu_core_instance_init(Object *obj)
 {
-    object_property_add_str(obj, "slot", core_prop_get_slot, core_prop_set_slot,
-                            NULL);
+    object_property_add(obj, CPU_CORE_ID_PROP, "int",
+                            core_prop_get_core, core_prop_set_core,
+                            NULL, NULL, NULL);
 }
 
 static const TypeInfo cpu_core_type_info = {
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 6173c1b..6890a44 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1755,28 +1755,6 @@ static void spapr_validate_node_memory(MachineState *machine, Error **errp)
     }
 }
 
-/*
- * Check to see if core is being hot-plugged into an already populated slot.
- */
-static void spapr_cpu_core_allow_set_link(Object *obj, const char *name,
-                                          Object *val, Error **errp)
-{
-    Object *core = object_property_get_link(qdev_get_machine(), name, NULL);
-
-    /*
-     * Allow the link to be unset when the core is unplugged.
-     */
-    if (!val) {
-        return;
-    }
-
-    if (core) {
-        char *path = object_get_canonical_path(core);
-        error_setg(errp, "Slot %s already populated with %s", name, path);
-        g_free(path);
-    }
-}
-
 /* pSeries LPAR / sPAPR hardware init */
 static void ppc_spapr_init(MachineState *machine)
 {
@@ -1884,21 +1862,8 @@ static void ppc_spapr_init(MachineState *machine)
     spapr->cores = g_new0(Object *, spapr_max_cores);
 
     for (i = 0; i < spapr_max_cores; i++) {
-        char name[32];
-
-        /*
-         * Create links from machine objects to all possible cores.
-         */
-        snprintf(name, sizeof(name), "%s[%d]", SPAPR_MACHINE_CPU_CORE_PROP, i);
-        object_property_add_link(OBJECT(spapr), name, TYPE_SPAPR_CPU_CORE,
-                                 (Object **)&spapr->cores[i],
-                                 spapr_cpu_core_allow_set_link,
-                                 OBJ_PROP_LINK_UNREF_ON_RELEASE,
-                                 &error_fatal);
-
         /*
-         * Create cores and set link from machine object to core object for
-         * boot time CPUs and realize them.
+         * Create cores for boot time CPUs and realize them.
          */
         if (i < spapr_cores) {
             Object *core  = object_new(TYPE_SPAPR_CPU_CORE);
@@ -1907,7 +1872,7 @@ static void ppc_spapr_init(MachineState *machine)
                                     &error_fatal);
             object_property_set_int(core, smp_threads, "nr_threads",
                                     &error_fatal);
-            object_property_set_str(core, name, CPU_CORE_SLOT_PROP,
+            object_property_set_int(core, i, CPU_CORE_ID_PROP,
                                     &error_fatal);
             object_property_set_bool(core, true, "realized", &error_fatal);
         }
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index 5156eb3..98af840 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -117,19 +117,12 @@ static int spapr_cpu_release(Object *obj, void *opaque)
 static void spapr_core_release(DeviceState *dev, void *opaque)
 {
     struct sPAPRCPUUnplugList unplug_list;
-    sPAPRMachineState *spapr = SPAPR_MACHINE(qdev_get_machine());
     sPAPRCPUCore *core = SPAPR_CPU_CORE(OBJECT(dev));
-    char *slot = object_property_get_str(OBJECT(dev), CPU_CORE_SLOT_PROP,
-                 &error_fatal);
 
     QLIST_INIT(&unplug_list);
     object_child_foreach(OBJECT(dev), spapr_cpu_release, &unplug_list);
     spapr_cpu_core_cleanup(&unplug_list);
 
-    /* Unset the link from machine object to this core */
-    object_property_set_link(OBJECT(spapr), NULL, slot, NULL);
-    g_free(slot);
-
     g_free(core->threads);
     object_unparent(OBJECT(dev));
 }
@@ -181,9 +174,6 @@ static int spapr_cpu_core_realize_child(Object *child, void *opaque)
 static void spapr_cpu_core_realize(DeviceState *dev, Error **errp)
 {
     sPAPRCPUCore *core = SPAPR_CPU_CORE(OBJECT(dev));
-    sPAPRMachineState *spapr = SPAPR_MACHINE(qdev_get_machine());
-    char *slot;
-    Error *local_err = NULL;
 
     if (!core->nr_threads) {
         error_setg(errp, "nr_threads property can't be 0");
@@ -199,19 +189,8 @@ static void spapr_cpu_core_realize(DeviceState *dev, Error **errp)
      * TODO: If slot isn't specified, plug this core into
      * an existing empty slot.
      */
-    slot = object_property_get_str(OBJECT(dev), CPU_CORE_SLOT_PROP, &local_err);
-    if (!slot) {
-        error_setg(errp, "slot property isn't set");
-        return;
-    }
-
-    object_property_set_link(OBJECT(spapr), OBJECT(core), slot, &local_err);
-    g_free(slot);
-    if (local_err) {
-        error_propagate(errp, local_err);
-        return;
-    }
-
+    /* probably should error out as 'core' should be specified
+       either by board or by user */
     object_child_foreach(OBJECT(dev), spapr_cpu_core_realize_child, errp);
 }
 
diff --git a/include/hw/cpu/core.h b/include/hw/cpu/core.h
index 2daa724..a627969 100644
--- a/include/hw/cpu/core.h
+++ b/include/hw/cpu/core.h
@@ -22,9 +22,9 @@ typedef struct CPUCore {
     DeviceState parent_obj;
 
     /*< public >*/
-    char *slot;
+    int core;
 } CPUCore;
 
-#define CPU_CORE_SLOT_PROP "slot"
+#define CPU_CORE_ID_PROP "core"
 
 #endif
-- 
1.8.3.1

  parent reply	other threads:[~2016-03-08 13:18 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-08 13:18 [Qemu-devel] [PATCH v2 0/5] spapr: QMP: add query-hotpluggable-cpus Igor Mammedov
2016-03-08 13:18 ` [Qemu-devel] [PATCH v2 1/5] " Igor Mammedov
2016-03-08 16:46   ` Eric Blake
2016-03-09  3:15     ` David Gibson
2016-03-09  9:34     ` Igor Mammedov
2016-03-08 13:18 ` Igor Mammedov [this message]
2016-03-08 15:09   ` [Qemu-devel] [PATCH v2 2/5] spapr: convert slot name property to numeric core and links Bharata B Rao
2016-03-09  9:27     ` Igor Mammedov
2016-03-08 16:48   ` Eric Blake
2016-03-09  9:40     ` Igor Mammedov
2016-03-09  3:19   ` David Gibson
2016-03-09  9:48     ` Igor Mammedov
2016-03-08 13:18 ` [Qemu-devel] [PATCH v2 3/5] qdev: hotplug: introduce HotplugHandler.pre_plug() callback Igor Mammedov
2016-03-08 13:18 ` [Qemu-devel] [PATCH v2 4/5] spapr: check if cpu core is already present Igor Mammedov
2016-03-08 14:34   ` Bharata B Rao
2016-03-09 10:07     ` Igor Mammedov
2016-03-10  5:22       ` David Gibson
2016-03-10  6:02         ` Bharata B Rao
2016-03-10 10:39           ` Igor Mammedov
2016-03-10 14:45             ` Bharata B Rao
2016-03-11 10:31               ` Igor Mammedov
2016-03-15  6:10             ` David Gibson
2016-03-15 11:05               ` Igor Mammedov
2016-03-15 23:38                 ` David Gibson
2016-03-16 15:26                   ` Igor Mammedov
2016-03-08 13:18 ` [Qemu-devel] [PATCH v2 5/5] spapr: implement query-hotpluggable-cpus QMP command Igor Mammedov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1457443095-213125-3-git-send-email-imammedo@redhat.com \
    --to=imammedo@redhat.com \
    --cc=afaerber@suse.de \
    --cc=agraf@suse.de \
    --cc=aik@ozlabs.ru \
    --cc=armbru@redhat.com \
    --cc=bharata@linux.vnet.ibm.com \
    --cc=borntraeger@de.ibm.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=ehabkost@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=mjrosato@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=pkrempa@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).